首页 > 其他 > 详细

装饰器模式

时间:2020-03-18 21:17:14      阅读:37      评论:0      收藏:0      [点我收藏+]

装饰器模式

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

技术分享图片

 

 

 

创建一个接口

// 手机接口
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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!