装饰者设计模式

2019-08-16 11:40:16来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

1.1    简述及实现原则

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

因会创建一个包装对象,来包裹真实对象而得名。

作用:增强对象的功能

 

例子1:

墙: 功能---遮风挡雨

包了墙纸的墙(本质还是墙):

                     功能---遮风挡雨

                     新增功能---陶冶情操

 

1、没有改变原有类

2、进行动态地增强

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

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

实现原则

1、  装饰类 必须 实现 被装饰类的所有接口

2、  装饰类 必须获取 被装饰类对象

 

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("发送短信");
   }
}

 

分析:

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

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

代码实现:

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() {
        //1、先运行原来的功能
        old.sendMsg();
        //2、再执行新的增强代码
        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!]




作者:xihe
出处:http://www.cnblogs.com/xihelog/

 


原文链接:https://www.cnblogs.com/xihelog/p/11280456.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:聊一聊Java的枚举enum

下一篇:Java中的IO流之输出流|乐字节