`

OO设计模式03—装饰者模式

阅读更多
OO设计模式—装饰者模式

设计原则tip:类应该对拓展开放,对修改关闭。(在不修改现有代码的情况下,就可搭配新的行为)

装饰者模式:动态地将责任附加到对象上。若要拓展功能,装饰者提供了比继承更有弹性的替代方案。

以下是《模式设计》书中的星巴克咖啡例子:

public abstract class Beverage
{
	String description = "Unknown Beverage";

	public String getDescription(){
	
		return description;
	}
	public abstract double cost();
}

public abstract class CondimentDecorator extends Beverage   //咖啡的调料,所有调料装饰者必须覆写getDescription方法
{
	public abstract String getDescription();
}

//一些基本饮品,作为基本组件

public class Espresso extends Beverage
{
	public Espresso(){
	
		description = "Espresso";

	}
	public double cost(){
	
		return 1.99;

	}
}

public class HouseBlend extends Beverage
{
	public HouseBlend(){
	
		description = "HouseBlend";

	}
	public double cost(){
	
		return .98;
	}

}

//以下为调料,作为装饰者

public class Mocha extends CondimentDecorator
{
	Beverage beverage;

	public Mocha(Beverage beverage){
	
		this.berverage = berverage;
	}
	public String getdDescription(){
	
		return berverage.getDescription();
	}
	public double cost(){
	
		return .20 + berverage.cost();
	}
}
//测试代码

public class StarbuzzCoffee
{
	public static void main(String[] args){
	
		Berverage beverage = new Espresso();
		System.out.println(berverage.getDescription()+ "$" +berverage.cost());

		Berverage beverage2 = new HouseBlend();
		beverage2 = new Mocha(beverage2);
		beverage2 = new Mocha(beverage2);
		beverage2 = new Whip(beverage2);	//添加调料
		System.out.println(berverage.getDescription()+"$"+berverage.cost());
		
	}

}
分享到:
评论

相关推荐

    设计模式课件大全

    设计模式07-组合模式、装饰模式 设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式...

    head first 设计模式

    1 设计模式入门 欢迎来到设计模式世界 2 观察者模式 让你的对象知悉现况 3 装饰者模式 装饰对象 4 工厂模式 烘烤OO的精华 5 单件模式 独一无二的对象 6 命令模式 封装调用 7 适配器模式与外观模式 随遇模式 8 模板...

    设计模式,软件开发者必读

    1.5 OO设计七原则 7 1.5.1 开-闭原则(OPEN-CLOSED PRINCIPLE, OCP): 7 1.5.2 里氏代换原则(LISKOV SUBSTITUTION PRINCIPLE,常缩写为.LSP) 8 1.5.3 依赖倒置原则(DEPENDENCE INVERSION PRINCIPLE) 8 1.5.4 接口隔离...

    Head First设计模式 中文 高清

    1 设计模式入门 欢迎来到设计模式世界 2 观察者模式 让你的对象知悉现况 3 装饰者模式 装饰对象 4 工厂模式 烘烤OO的精华 5 单件模式 独一无二的对象 6 命令模式 封装调用 7 适配器模式与外观模式 随遇模式 8 模板...

    Head.First.设计模式.中文版 1-8章

    1 欢迎来到设计模式世界:设计模式入门  模拟鸭子应用  Joe想到继承  利用接口如何?  软件开发的不变真理  分开变化和不变部分  设计鸭子的行为  测试鸭子的代码  动态地设置行为  封装行为的大局观  ...

    设计模式PPT

    经典OO设计模式PPT 经典设计模式PPT 相信你需要的

    Head.First设计模式_PDF.part1

    千万不要轻视这些OO原则,因为每个设计模式背后都包含了几个OO原则的概念。很多时候,在设计时有两难的情况,这时候我们必须回归到OO原则,以方便判断取舍。可以这么说:OO原则是我们的目标,而设计模式是我们的做法...

    Head First(Design Patterns) 设计模式英文原版

     3装饰者模式装饰对象  4工厂模式烘烤OO的精华  5单件模式独一无二的对象  6命令模式封装调用  7适配器模式与外观模式随遇模式  8模板方法模式封装算法  9选代器与组合模式管理良好的集合  10...

    简单了解设计模式中的装饰者模式及C++版代码实现

    在 OO 设计和开发过程,可能会经常遇到以下的情况:我们需要为一个已经定义好的类添加新的职责(操作),通常的情况我们会给定义一个新类继承自定义好的类,这样会带来一个问题(将在本模式的讨论中给出)。...

    12种常用设计模式C#代码示例

    3,装饰者模式:动态地将责任附加到对象上。若要扩展功能。装饰着提供 了比继承更有弹性的替代方案。 4,工厂方法模式:定义一个创建对象的接口,但由子类觉得要实例化的类是哪一个。工厂方法让类把实例化推迟到子类...

    Head First Design Pattern(en) pdf(part3)

    1 欢迎来到设计模式世界:设计模式入门  模拟鸭子应用  Joe想到继承  利用接口如何?  软件开发的不变真理  分开变化和不变部分  设计鸭子的行为  测试鸭子的代码  动态地设置行为  封装行为的大局观  ...

    Head First Design Pattern(en) pdf(part1)

    1 欢迎来到设计模式世界:设计模式入门  模拟鸭子应用  Joe想到继承  利用接口如何?  软件开发的不变真理  分开变化和不变部分  设计鸭子的行为  测试鸭子的代码  动态地设置行为  封装行为的大局观  ...

    decorator:装饰者模式

    装饰工 装饰者模式 OO基础: 多态,封装,继承,抽象 OO原则: 封装变化 多用组合,少用继承 针对接口编程而非针对抽象编程 为交互对象之间的松替换设计而努力 对扩张开放,对修改关闭

    asp.net知识库

    2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储过程:排序反转分页法 优化后的通用分页存储过程 sql语句 一些Select检索高级用法 SQL server 2005中新增的排序函数及应用 ...

    Python装饰器的函数式编程详解

    Python的装饰器的英文名叫Decorator,当你看到这...但是OO的Decorator简直就是一场恶梦,不信你就去看看wikipedia上的词条(Decorator Pattern)里的UML图和那些代码,这就是我在《 从面向对象的设计模式看软件设计》

    编程新手真言......

    新手编程导论 ———— A Programming Introduction For Beginners ... 设计才是真正的编程! 对类型的设计才是设计!...附录:一些领域逻辑,通用OO设计策略,框架设计 305 附录:参考文献 305 附录:一些建议 305

Global site tag (gtag.js) - Google Analytics