装饰模式最大的好处就是避免在添加类的职责时使用单纯的继承,本来想写个例子体会继承的痛苦,改进了下,写成了组合的形式:
public class Person {
private String name;
private Set<Clothes> clothes = new HashSet<Clothes>();
public void show(){
for(Clothes c :clothes){
c.show();
}
System.out.println(this.name+" wear");
}
public void setName(String name) {
this.name = name;
}
public void add(Clothes cloth){
this.clothes.add(cloth);
}
}
public abstract class Clothes{
public void show(){
}
}
public class BigTrousers extends Clothes {
@Override
public void show() {
System.out.println("Big Trousers");
}
}
public class TShirt extends Clothes{
@Override
public void show() {
System.out.println("T-shirt");
}
}
很明显,Person中聚合了一堆它要穿的东西,需要的时候显示出来:
public static void main(String[] args) {
Person p = new Person();
p.setName("XIao");
TShirt t = new TShirt();
BigTrousers bt = new BigTrousers();
p.add(t);
p.add(bt);
p.show();
}
这样同样能做到动态添加职责的效果,相对于装饰的劣势是无法确定调用的顺序。
看看类图:
这不是策略模式吗? 哇哈哈哈哈~
分享到:
相关推荐
设计模式之 Decorator(装饰器) Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色. 设计模式之 Bridge(桥连) 将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合) 设计模式...
它可能展示了如何在实际项目中运用设计模式,比如可能是介绍了一个下载管理器的实现,其中可能包含了策略模式的应用,通过切换不同的下载策略(如线程数控制、断点续传等)来适应不同的网络环境。 "说明.htm"则可能...
【房地产经纪人考试模拟题解析】 1. 商品交换的初期形式:题目中...这些题目涵盖了房地产经纪行业的多个方面,包括经纪业务模式、房屋管理、租赁规定、市场营销策略、法律条款、沟通技巧以及房地产投资等多个知识点。
### 结构型模式续 9. **DECORATOR** - **场景解析**:为MM准备的礼物如果仅仅是卡片,可能显得不够用心。我们可以逐步添加装饰,比如加上漂亮的包装纸、丝带等,每次添加都会让礼物变得更加精致,但其实质仍然是...
`PooledConnection`是对`Connection`对象的包装,它添加了与pool协调工作的功能,实现了装饰模式。通过`PooledConnection`,原本对用户不透明且不可容错的`ResourceMan<Connection>`被转化为用户友好的`Connection...
Java小例子可能包含了常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式、代理模式等,这些都是提升代码可维护性和扩展性的重要工具。 7. **线程**: 多线程是Java的一个核心特性,允许并发执行任务...
- 余胜军在简历中强调了对JavaSE基础知识的熟练掌握,包括面向对象分析和设计能力,熟悉各种设计模式,如代理、单例、工厂、建造者、观察者、策略、模版、装饰、门面等。 - 此外,他还精通Java中的反射、自定义...
5. **市场趋势与竞争分析**:乔伊可能还研究了当时的市场环境,包括竞品分析,玩家需求变化,以及如何根据这些趋势调整盈利策略。 6. **经济模型构建**:为了预测未来的盈利,可能构建了一个经济模型,考虑了玩家...
在IT行业中,C# ASP.NET MVC框架是一种广泛用于构建Web应用程序的技术栈,它结合了C#编程语言、ASP.NET框架以及Model-View-Controller(MVC)设计模式。本篇文章将深入探讨如何在C# ASP.NET MVC环境中实现在线拍照...
例如,承租方可以根据租赁期限合理安排货物采购和销售策略,而出租方则可以根据租赁期限进行整体规划与市场推广。 关于租金及其他费用,合同中不仅明确了租金总额,还包括了租金的计算方式和支付周期。此外,合同中...
2.22 计算目录间的相对路径 91 2.23 跨平台地读取无缓存的字符 93 2.24 在Mac OS X平台上统计PDF文档的页数 94 2.25 在Windows平台上修改文件属性 95 2.26 从OpenOffice.org文档中提取文本 96 2.27 从微软Word...