装饰者设计模式 通俗易懂

1.1    简述及实现原则

装饰模式:在不改变 原有类 和 不使用继承的状况下, 动态地扩展一个对象的功能。java

因会建立一个包装对象,来包裹真实对象而得名。设计模式

做用:加强对象的功能测试

例子1:this

墙: 功能---遮风挡雨spa

  包了墙纸的墙(本质仍是墙):设计

        原功能---遮风挡雨code

        新增功能---陶冶情操对象

        一、没有改变原有类继承

        二、进行动态地加强接口

装饰类:加强功能的类(包了墙纸的墙)

被装饰类:待加强功能的类(墙)

实现原则

一、 装饰类必须实现被装饰类的全部接口

二、装饰类中必须获取被装饰类对象

1.2   案例演示

准备代码

Phone接口:

public interface Phone {
   void call(String number);
   void sendMsg();
}

HWPhone实现类:

public class HWPhone implements Phone {
   public void call(String number) {
     System.out.println("拨打电话:"+number);
   }
   public void sendMsg() {
     System.out.println("发送短信");
   }
}

分析:

一、定义一个装饰类 实现 Phone接口

二、装饰类中 获取到 被装饰类对象(成员变量)

代码实现:

HWPhoneDecorator:

public class HWPhoneDecorator implements Phone {
    //被装饰类的对象
    private HWPhone old;
    public HWPhoneDecorator(HWPhone old) {
        this.old = old;
    }
    /*
    * 打电话方法不须要加强,不须要改变
    * */
    public void call(String number) {
        old.call(number);
    }
    /**
     * 发短信方法须要被加强
     */
    public void sendMsg() {
        //一、先运行原来的功能
        old.sendMsg();
        //二、再执行新的加强代码
        System.out.println("(o゜▽゜)o☆[BINGO!]");
    }
}

测试类:

public static void main(String[] args) {
    Phone hw = new HWPhoneDecorator(new HWPhone());
    hw.call("12345");
    hw.sendMsg();
}

未使用装饰者设计模式效果

拨打电话:12345

发送短信

使用装饰者设计模式效果

拨打电话:12345

发送短信

(o゜▽゜)o☆[BINGO!]

相关文章
相关标签/搜索