`
miracle9i
  • 浏览: 35703 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

装饰模式续:与策略间...

阅读更多

装饰模式最大的好处就是避免在添加类的职责时使用单纯的继承,本来想写个例子体会继承的痛苦,改进了下,写成了组合的形式:

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();
	}

 

这样同样能做到动态添加职责的效果,相对于装饰的劣势是无法确定调用的顺序。

看看类图:

 

这不是策略模式吗? 哇哈哈哈哈~

分享到:
评论

相关推荐

    二十三种设计模式【PDF版】

    设计模式之 Decorator(装饰器) Decorator 是个油漆工,给你的东东的外表刷上美丽的颜色. 设计模式之 Bridge(桥连) 将牛郎织女分开(本应在一起,分开他们,形成两个接口),在他们之间搭建一个桥(动态的结合) 设计模式...

    设计模式可复用面向对象软件的基础.rar

    它可能展示了如何在实际项目中运用设计模式,比如可能是介绍了一个下载管理器的实现,其中可能包含了策略模式的应用,通过切换不同的下载策略(如线程数控制、断点续传等)来适应不同的网络环境。 "说明.htm"则可能...

    吉林2016上半年房地产经纪人_违反属登记管理规定的行为模拟考试题.doc

    【房地产经纪人考试模拟题解析】 1. 商品交换的初期形式:题目中...这些题目涵盖了房地产经纪行业的多个方面,包括经纪业务模式、房屋管理、租赁规定、市场营销策略、法律条款、沟通技巧以及房地产投资等多个知识点。

    23设计模式简讲

    ### 结构型模式续 9. **DECORATOR** - **场景解析**:为MM准备的礼物如果仅仅是卡片,可能显得不够用心。我们可以逐步添加装饰,比如加上漂亮的包装纸、丝带等,每次添加都会让礼物变得更加精致,但其实质仍然是...

    从一个ConnectionPool的实现看design pattern的运用 (续六).docx

    `PooledConnection`是对`Connection`对象的包装,它添加了与pool协调工作的功能,实现了装饰模式。通过`PooledConnection`,原本对用户不透明且不可容错的`ResourceMan&lt;Connection&gt;`被转化为用户友好的`Connection...

    Java 小例子合集 demo

    Java小例子可能包含了常见的设计模式,如单例模式、工厂模式、观察者模式、装饰器模式、代理模式等,这些都是提升代码可维护性和扩展性的重要工具。 7. **线程**: 多线程是Java的一个核心特性,允许并发执行任务...

    2021版本Java程序月薪30k简历模板.docx

    - 余胜军在简历中强调了对JavaSE基础知识的熟练掌握,包括面向对象分析和设计能力,熟悉各种设计模式,如代理、单例、工厂、建造者、观察者、策略、模版、装饰、门面等。 - 此外,他还精通Java中的反射、自定义...

    开心农场动态盈利分析

    5. **市场趋势与竞争分析**:乔伊可能还研究了当时的市场环境,包括竞品分析,玩家需求变化,以及如何根据这些趋势调整盈利策略。 6. **经济模型构建**:为了预测未来的盈利,可能构建了一个经济模型,考虑了玩家...

    C# asp.net MVC 在线拍照

    在IT行业中,C# ASP.NET MVC框架是一种广泛用于构建Web应用程序的技术栈,它结合了C#编程语言、ASP.NET框架以及Model-View-Controller(MVC)设计模式。本篇文章将深入探讨如何在C# ASP.NET MVC环境中实现在线拍照...

    部落格格子店租赁合同.doc

    例如,承租方可以根据租赁期限合理安排货物采购和销售策略,而出租方则可以根据租赁期限进行整体规划与市场推广。 关于租金及其他费用,合同中不仅明确了租金总额,还包括了租金的计算方式和支付周期。此外,合同中...

    Python Cookbook

    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...

Global site tag (gtag.js) - Google Analytics