不改变原有对象的情况下 给一个对象扩展功能
创建一个接口
// 手机接口 public interface Phone { // 功能 void funcation(); } -------------------- // 手机类 public class PhoneApp implements Phone { @Override public void funcation() { System.out.println("手机发短信"); } }
拥有发短信功能
public static void main(String[] args) { Phone phone = new PhoneApp(); phone.funcation(); }
假如我要新增打电话功能 不能动源码
// 实现手机接口 public abstract class PhoneFunction implements Phone{ public Phone phone; public PhoneFunction(Phone phone){ this.phone = phone; } } ------------------ // 继承抽象类 重写funcation 方法 public class PhoneApp1 extends PhoneFunction { public PhoneApp1(Phone phone) { super(phone); } @Override public void funcation() { phone.funcation(); System.out.println("手机打电话"); } }
测试
public static void main(String[] args) { Phone phone = new PhoneApp1(new PhoneApp()); phone.funcation(); }
新增点外卖功能
public class PhoneApp2 extends PhoneFunction{ public PhoneApp2(Phone phone) { super(phone); } @Override public void funcation() { phone.funcation(); System.out.println("手机点外卖"); } } ------------------------------- public static void main(String[] args) { Phone phone = new PhoneApp2(new PhoneApp1(new PhoneApp())); phone.funcation(); }
新增成功 而且没有动源代码
原文:https://www.cnblogs.com/chenziyue/p/12519820.html