装饰模式
1、装饰模式
装饰模式(Decorator)又名包装(Wrapper)模式,装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,可以在不创造更多的子类的模式下,将对象的功能加以扩展。
2、结构
装饰模式中的各个角色有:
(1)抽象构件角色:给出一个抽象接口,
(2)具体构件角色:对抽象构件角色的具体实现
(3)装饰角色:持有一个构件对象的实例,并定义一个与抽象接口一致的接口。
(4)具体装饰角色:对装饰角色的具体实现。
3、代码
(1)首相构件角色,一个蛋糕抽象类
public abstract class Cake { String remark = "蛋糕"; public String getRemark() { return remark; } public abstract String getImpression(); }
(2)具体构件角色,一个奶酪蛋糕
public class CheesCake extends Cake { public CheesCake() { super.remark = "奶酪蛋糕"; } @Override public String getImpression() { return "香甜感觉"; } }
(3)装饰角色
public abstract class OtherDecorator extends Cake { private Cake cake; public Cake getCake() { return cake; } public OtherDecorator(Cake cake) { super(); this.cake = cake; } public abstract String getRemark(); }
(4)具体装饰角色,一个带果冻的奶酪蛋糕
public class JellyDecorator extends OtherDecorator { public JellyDecorator(Cake cake) { super(cake); super.remark="香甜果冻"; } @Override public String getRemark() { return this.getCake().getRemark()+"+"+this.remark; } @Override public String getImpression() { return this.getCake().getImpression()+",这个果冻真好吃"; } }
(5)测试类
public class Client { public static void main(String[] args) { Cake c = new CheesCake(); //生成一个带果冻的奶酪蛋糕 Cake jc = new JellyDecorator(c); System.out.println(c.getRemark()); System.out.println(c.getImpression()); } }
4、总结
(1)装饰对象和真实对象具有相同的接口,这样客户端对象就可以以真实对象的相同的方式和装饰对象交互。
(2)装饰对象包含一个真实对象的引用(reference).
(3)装饰对象接受所有来自客户端的请求,它把这些请求转发给真实的对象。
(4)装饰对象可以在转发这些请求以前或者以后增加一些附加的功能。这样就能确保在运行时,不用修改给定对象结构就可以在外部增加附加的功能。在面向对象的程序设计中,通常是使用继承的关系来扩展给定类的功能。
相关推荐
9 装饰模式 10 原型模式 11 委派模式 12 适配器模式 设计模式综合运用 1 门面+模版方法+责任链+策略 2 门面+模版方法+责任链+策略+工厂方法 3 动态代理+Spring AOP 4 责任链模式进阶 Spring Framework设计模式 ...
9 装饰器模式.txt
装饰器模式(Decorator Pattern)是一种结构型设计模式,它的核心思想是在不修改原有对象的前提下,通过包装(包裹)原对象并扩展其行为来增加功能。这种模式常用于在运行时动态地给对象添加新的职责,使得系统具有...
《C++20设计模式》学习笔记-第9章装饰器模式-配套代码
1 装饰模式 2 单例模式 2 门面模式 2 模板方法模式 3 策略模式 3 工厂方法模式 3 组合模式 4 抽象工厂模式 4 代理模式 4 命令模式 5 迭代器模式 5 适配器模式 5 原型模式 6 简单工厂模式 6 解释器模式 6 享元模式 7 ...
1、装饰模式lua实现 2、代理模式lua实现 3、外观模式lua实现 4、适配器模式lua实现 5、组合模式lua实现 6、桥接模式lua实现 7、享元模式lua实现 行为模式 1、策略模式lua实现 2、模板方法模式lua实现 3、观察者模式...
31.2.1 按装饰模式描述丑小鸭 31.2.2 按适配器模式实现丑小鸭 31.2.3 最佳实践 第32章 行为类模式大PK 32.1 命令模式VS策略模式 32.1.1 策略模式实现压缩算法 32.1.2 命令模式实现压缩算法 32.1.3 小结 32.2 策略...
本项目为Java语言实现的相亲男生装饰者模式设计模式源码,包含27个文件,涵盖9个Java类文件、9个Java源文件、5个XML配置文件、1个Git忽略文件、1个LICENSE授权文件以及1个Markdown描述文件。该模式设计用于模拟相亲...
这里提到的"9种常用设计模式收集"涵盖了Java Web开发和Android开发中的一些核心设计原则,通过深入理解并应用这些模式,开发者可以提高代码的可读性、可维护性和可扩展性。 1. **单例模式**:单例模式确保一个类...
装饰模式(Decorator Pattern) 9. 组合模式(Composite Pattern) 10. 外观模式(Facade Pattern) 11. 享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令...
11. 装饰模式 12. 策略模式 13. 适配器模式 14. 迭代器模式 15. 组合模式 16. 观察者模式 17. 门面模式 18. 备忘录模式 19. 访问者模式 20. 状态模式 21. 解释器模式 22. 享元模式 23. 桥梁模式
13、装饰模式DECORATOR PATTERN 14、迭代器模式ITERATOR PATTERN 15、组合模式COMPOSITE PATTERN 16、观察者模式OBSERVER PATTERN 17、责任链模式 18、访问者模式VISITOR PATTERN 19、状态模式 20、原型模式 21...
装饰模式 4.代理模式 5.工厂方法模式 6.原型模式 7.模板方法模型 8.外观模式 9.建造者模式 10.观察者模式 11.抽象工厂模式 12.状态模式 13.适配器模式 14.备忘录模式 15.组合模式 16.迭代器模式 17.单例模式 18.桥接...
通过装饰模式,可以动态地给一个对象添加新的职责,而无需修改原有的代码。这种方式比继承更灵活,因为可以在运行时根据需要添加不同的装饰器。 综上所述,设计模式是软件工程中非常重要的概念,通过合理应用这些...
21装饰模式 22外观模式 23享元模式 24组合模式 25行为型模式概述 26模板方法模式 27策略模式 28命令模式 29责任链模式 30状态模式 31观察者模式 32中介者模式 33迭代器模式 34访问者模式 35备忘录模式 36解释器模式 ...
003装饰着模式" I/ N1 V8 f( X 004单例模式) m) x8 z7 t( q5 P4 }4 u# v 005工厂模式+ [% H7 o% z% F7 b' N* n# {& K; _ 006命令模式9 D% c+ V8 l$ {* n, y/ N 007适配器模式 008外观模式5 d3 j: D% K3 ` t 009模板...
本篇将深入探讨12种核心的设计模式,它们是:单例模式、工厂模式、抽象工厂模式、建造者模式、原型模式、适配器模式、装饰器模式、代理模式、桥接模式、组合模式、享元模式和观察者模式。 1. **单例模式**:确保一...
9. 装饰模式:装饰模式动态地给对象添加一些额外的职责,提供比继承更具有弹性的扩展方式。 10. 外观模式:外观模式为复杂的子系统提供了一个简单的接口,简化了客户端代码。 11. 享元模式:享元模式通过共享技术...
9. **命令(Command)模式**:命令模式将请求封装为一个对象,使得可以使用不同的请求、队列请求、记录请求日志、支持可撤销的操作等。它在事件驱动系统和远程调用中尤为常见。 10. **建造者(Builder)模式**:...
9. **状态模式**:允许对象在其内部状态改变时改变其行为,对象看起来似乎改变了它的类。 10. **访问者模式**:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些...