装饰器模式

装饰器模式

不改变原有对象的情况下 给一个对象扩展功能

 

 

 

创建一个接口

// 手机接口
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();
    }

 

 新增成功 而且没有动源代码

 

posted @ 2020-03-18 20:05  辰梓悦  阅读(99)  评论(0编辑  收藏  举报