thedecoratorpattern装饰模式内容摘要:

法,依靠委派来计算含调味品的咖啡价钱 如何装饰。 怎样委派。  我们将装饰对象想象成一个包装。 首先我们生成一个 DarkRoast对象 DarkRoast Cost() DarkRoast继承了 Beverage,拥有一个计算饮料价格的方法 cost()。 Mocha Cost() 然后 DarkRoast Cost() Mocha对象是装饰者,他与被它装饰的对象 DarkRoast具有相同的类型(是 Beverage的子类),也有一个 cost()方法。 顾客想要摩卡,所以我们创建一个 Mocha对象,并用它包装DarkRoast. 再然后 Mocha Cost() DarkRoast Cost() whip对象是装饰者,他与被它装饰的对象 DarkRoast具有相同的类型,也有一个 cost()方法。 顾客还想要蛋奶,所以我们创建一个 Whip对象,并用它包装 Mocha. Whip Cost() 现在,要计算饮料的价格 Mocha Cost() DarkRoast Cost() 调用最外层的装饰者 whip的 cost(),whip再将计算任务委派给被它包装的对象,得到一个价格后,再加上 whip自己的价格 ... Whip Cost() + + 问题  如果一个顾客点了一份 DarkRoast加两份mocha和一份 soy,其装饰对象图和价格计算过程有什么样的呢。 要点  装饰者与被装饰者具有相同的类型  可以用多个装饰者装饰一个对象  由于 装饰者与被装饰者具有相同的类型,我们可以用装饰后的对象代替原来的对象。  装饰者在委派他装饰的对象作某种处理时,可以添加上自己的行为(功能扩展)(在委派之前或 /和之后)。  对象可以在任何时候被装饰,因此我们能在运行时动态的装饰对象。 装饰模式的定义  装饰模式可以动态的给一个对象附加一些功能,对于扩展功能来说,装饰模式(合成)比生成子类的方式(继承)更加灵活。 装饰模式的类图结构 Component methodA() methodB() //Other methods ConcreteDecoratorA Component wrappedObj methodA() methodB() //other methods ConcreteComponent methodA() methodB() //Other methods Decorator methodA() methodB() //Other methods ConcreteDecoratorB Component wrappedObj Object newState methodA() methodB() //other methods ponent 咖啡店的类图 HouseBlend Cost() Beverage description。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。