设为首页 加入收藏

TOP

设计模式之装饰模式(结构型)
2019-03-02 20:08:01 】 浏览:23
Tags:设计模式 装饰 模式 结构

装饰模式:装饰模式就是允许向一个现有的对象添加新的功能,同时又不改变其结构,装饰模式是一种对象结构型设计模式。


对于装饰模式可以分为如下角色


对于装饰模式进行解释,更易于理解。要给一个类或对象新增行为,一般有两种方法,一种是继承方法,通过类继承的方法可以使Z子类拥有自身方法的同时,拥有父类的方法这就是一种新增类行为的方法;对于另外一种新增类行为的方法就是关联方法,即将一个类嵌入另外一个类,对于这个类,我们称之为装饰器(Decorator)


上面说了继承机制和关联机制,对于关联机制与继承机制相比,关联优势在于不会破坏类的封装性,继承的耦合度还是比关联要大的,所以应用关联机制的装饰模式偶尔度还是比较小的,这个就是装饰模式的优点了,不过装饰模式需要创建比较多的对象,这种缺点或许可以用享元模式减少类的创建。
下面给出装饰模式的经典代码:
继承抽象构件接口


具体装饰类型实现抽象装饰接口


给出《设计模式》一书的多重加密例子:


抽象构件接口:


具体构件类:


抽象装饰类:


具体装饰类:


客户端类进行调用:


模式应用
装饰模式应用最常见的就是JDK提供的Java IO操作


装饰模式可以分为透明装饰模式和半透明装饰模式。


透明装饰模式
透明装饰模式要求客户端面向抽象编程,装饰模式的透明性要求客户端程序不应该声明具体构件类型和具体装饰类型,而应该全部声明为抽象构件类型。


半透明装饰模式
半透明装饰模式是比较常见的,大多数装饰模式都是半透明(semi-transparent)的装饰模式,而不是完全透明(transparent)的,即允许用户在客户端声明具体装饰者类型的对象,调用在具体装饰者中新增的方法。



编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇ROS小乌龟turtlesim详解 下一篇jQuery 自动触发事件实例

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }