您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 面向对象范式-2014装饰模式
如何动态的给一个对象的某个职责添加一些额外的职责设计模式—装饰模式场景1:对挂在墙上的一幅画进行装饰,要求能够使用多种风格的画框和蒙板进行装饰后挂在墙上展览。我们设计一个电脑程序,要求能够动态变换不同的画框和蒙板来装饰这幅画并展览。--------------------------------------------------------------------场景2:披着羊皮(当然如果吃兔子呢?)的狼吃羊的故事,用对象设计该情景。--------------------------------------------------------------------场景3:设计一个通用订单打印程序,需要对订单的内容以及组合不同的订单头部说明和订单尾部说明进行打印,以适应不同公司订单打印的需要。我们需要用对象设计该情景。分析阶段1、做什么(场景),需要解决的问题场景4:星巴兹咖啡厅,构造饮料订单,计算加入不同调料的总价和打印订单的内容。分析阶段1、做什么(场景),需要解决的问题分析阶段1、做什么(场景),需要解决的问题场景4:星巴兹咖啡厅,对每位顾客所订咖啡,构造咖啡饮料订单,计算加入不同调料的总价和打印订单的内容。第一种设计扩展类爆炸进化演变针对一份咖啡饮料订单的价格计算,能够使用不同的配料来动态调配价格,这些职责由谁来完成呢,分析阶段(场景4)2、谁来做(概念角色模型)我需要调配成不同风味的!!!针对一份咖啡饮料订单的价格计算,能够使用不同的配料来动态调配价格,这些职责由谁来完成呢—抽象主谓句--装饰者装饰本体为一个新本体,新本体执行职责;具体主谓句--由多种配料调配一份咖啡饮料成为一份新咖啡饮料,新咖啡饮料计算价格,注意新咖啡饮料也是咖啡饮料哦!设计阶段:3、谁做什么(类职责/契约)--规格视角设计阶段:4、谁做什么时和谁协作(类协作/组合)--规格视角抽象主谓句--多种装饰者装饰本体为一个新本体,新本体执行职责,具体主谓句--由多种配料订单装饰一份咖啡饮料订单成为一份新咖啡饮料,新咖啡饮料订单计算价格--注意新咖啡饮料订单也是咖啡饮料订单!设计阶段:5、“谁”可以安排哪些具体的对象执行(类泛化),可视化静态表达抽象主谓句--装饰者装饰本体为一个新本体,新本体执行职责,具体主谓句--由多种配料订单装饰一份咖啡饮料订单成为一份新咖啡饮料,新咖啡饮料订单计算价格--注意新咖啡饮料订单也是咖啡饮料订单!表达:7、可视化方式表达动态结构(对象时序图表达)请看下页表达:8、写出代码(类实现)第二种设计有什么问题呢?有哪些可变导致修改?第二种设计有什么问题呢?仅仅针对饮料订单,是否还有你想的第三种设计?HouseBlendDarkRoast牛奶摩卡饮料咖啡配料OO设计原则认识装饰模式•实际上我们需要的饮料的Cost方法需要动态的添加新的职责,即能将各类配料的Cost方法动态的加入到饮料的cost方法中,认识装饰模式•实际上我们需要的饮料的Cost方法需要动态的添加新的职责,即能将各类配料的Cost方法动态的加入到饮料的cost方法中,具体过程如下:认识装饰模式•实际上我们需要的饮料的Cost方法需要动态的添加新的职责,即能将各类配料的Cost方法动态的加入到饮料的cost方法中,具体过程如下:•实际上我们需要的饮料的Cost方法需要动态的添加新的职责,即能将各类配料的Cost方法动态的加入到饮料的cost方法中,具体过程如下:装饰模式的设计HouseBlendDarkRoast牛奶摩卡配料饮料配料+饮料还是饮料还是饮料关于装饰模式类图HouseBlendDarkRoast牛奶摩卡配料饮料配料+饮料还是饮料还是饮料publicabstractclassBeverage{Stringdescription=UnknownBeverage;publicStringgetDescription(){returndescription;}publicabstractdoublecost();}publicclassHouseBlendextendsBeverage{publicHouseBlend(){description=HouseBlendCoffee;}publicdoublecost(){return.89;}}publicclassMilkextendsCondimentDecorator{privateBeveragebeverage;publicMilk(Beveragebeverage){this.beverage=beverage;}publicStringgetDescription(){returnbeverage.getDescription()+,Milk;}publicdoublecost(){return.10+beverage.cost();}}publicabstractclassCondimentDecoratorextendsBeverage{publicabstractStringgetDescription();}分析阶段(场景1)1、做什么(场景),需要解决的问题展览分析阶段(场景2)1、做什么(场景),需要解决的问题分析阶段(场景3)1、做什么(场景),需要解决的问题针对一幅画,能够动态变换不同的画框和蒙板来装饰,这些职责由谁来完成呢,分析阶段(场景1)2、谁来做(概念角色模型)我需要装饰成不同风格的!!!针对一幅画,能够动态变换不同的画框和蒙板来装饰,这些职责由谁来完成呢—抽象主谓句--装饰者装饰本体为一个新本体,新本体执行职责,具体主谓句--由画框、蒙板装饰一幅画成为一幅新画,新画展览,注意新画也是画哦!设计阶段:3、谁做什么(类职责/契约)--规格视角设计阶段:4、谁做什么时和谁协作(类协作/组合)--规格视角抽象主谓句--装饰者装饰本体为一个新本体,新本体执行职责,具体主谓句--由画框、蒙板装饰一幅画成为一幅新画,新画展览--注意新画也是画哦!设计阶段:5、“谁”可以安排哪些具体的对象执行(类泛化),可视化静态表达抽象主谓句--装饰者装饰本体为一个新本体,新本体执行职责,具体主谓句--由画框、蒙板装饰一幅画成为一幅新画,新画展览--注意新画也是画哦!设计阶段:5、“谁”可以安排哪些具体的对象执行(类泛化),可视化静态表达设计阶段:5、“谁”可以安排哪些具体的对象执行(类泛化),可视化静态表达表达:7、可视化方式表达动态结构(对象时序图表达)请看下页简单说法:1、做什么(场景)2、谁来做(概念角色模型)3、谁做什么(类职责/契约)4、谁做什么时和谁协作(类协作/组合)5、“谁”可以安排哪些具体的对象执行(类泛化)6、可视化方式表达静态结构(类图表达)8、写出代码(类实现)7、可视化方式表达动态结构(对象时序图表达)分析设计表达实现表达:8、写出代码(类实现)如何扩展:9、讨论效果,A、还有其他可用类增加啦—画框有玻璃钢、铝合金、黄金等,蒙板有。。。,可以自由组合顺序,直接扩展装饰者子类,客户端只要按所要的装饰者和装饰顺序实例化,比如你可以使用多个画框和多次蒙板,并且不同顺序,然后调用其方法即可。B、修改,各类画框和蒙板改了—如何办?避免副作用如何扩展:披着羊皮的狼吃羊,原来是赤裸裸的吃,现在装饰一下,然后。。。我们依样画葫芦,按照上面的8大步骤进行分析和设计分析阶段(场景2)1、做什么(场景),需要解决的问题场景2:披着羊皮的狼吃羊,披着人皮的狼吃人,披着兔皮的狼。。。。这些职责由谁来完成呢?抽象概念陈述—羊皮装饰狼吃羊分析阶段:2、谁来做(概念角色模型)披着羊皮的狼吃羊,披着人皮的狼吃人,披着兔皮的狼。。。。这些职责由谁来完成呢?抽象概念陈述—装饰者装饰狼吃东西设计阶段:3、谁做什么(类职责/契约)--规格视角设计阶段:4、谁做什么时和谁协作(类协作/组合)--规格视角披着羊皮的狼吃羊,披着人皮的狼吃人,披着兔皮的狼。。。。这些职责由谁来完成呢?抽象概念陈述—装饰者装饰狼吃东西披着羊皮的狼吃羊,披着人皮的狼吃人,披着兔皮的狼。。。。这些职责由谁来完成呢?抽象概念陈述—装饰者装饰狼吃东西设计阶段:5、“谁”可以安排哪些具体的对象执行(类泛化),可视化静态表达设计阶段:5、“谁”可以安排哪些具体的对象执行(类泛化),可视化静态表达表达:类比7、可视化方式表达动态结构(对象时序图表达)简单说法:1、做什么(场景)2、谁来做(概念角色模型)3、谁做什么(类职责/契约)4、谁做什么时和谁协作(类协作/组合)5、“谁”可以安排哪些具体的对象执行(类泛化)6、可视化方式表达静态结构(类图表达)8、写出代码(类实现)7、可视化方式表达动态结构(对象时序图表达)分析设计表达实现表达:类比8、写出代码(类实现)如何扩展:9、讨论效果,A、还有其他可用类增加啦—B、修改,各类样式改了—如何办?避免副作用分析阶段(场景3)1、做什么(场景),需要解决的问题:设计一个通用订单打印程序,需要对订单的内容以及组合不同的订单头部说明和订单尾部说明进行打印,以适应不同公司订单打印的需要我想加入促销广告设计一个通用订单打印程序,需要对订单的内容以及组合不同的订单头部说明和订单尾部说明进行打印。这些职责由谁来完成呢分析阶段:2、谁来做(概念角色模型)抽象概念陈述—需要对订单的内容以及组合不同的订单头部说明和订单尾部说明进行打印设计阶段:3、谁做什么(类职责/契约)--规格视角设计阶段:4、谁做什么时和谁协作(类协作/组合)--规格视角抽象概念陈述—需要对订单的内容以及组合不同的订单头部说明和订单尾部说明进行打印,打印者打印时和谁协作抽象概念陈述—需要对订单的内容以及组合不同的订单头部说明和订单尾部说明进行打印,打印者打印时和谁协作设计阶段:5、“谁”可以安排哪些具体的对象执行(类泛化),可视化静态表达表达:类比7、可视化方式表达动态结构(对象时序图表达)简单说法:1、做什么(场景)2、谁来做(概念角色模型)3、谁做什么(类职责/契约)4、谁做什么时和谁协作(类协作/组合)5、“谁”可以安排哪些具体的对象执行(类泛化)6、可视化方式表达静态结构(类图表达)8、写出代码(类实现)7、可视化方式表达动态结构(对象时序图表达)分析设计表达实现表达:类比8、写出代码(类实现)如何扩展:9、讨论效果,A、还有其他可用类增加啦—B、修改,各类样式改了—如何办?避免副作用C、如果需要组合按照某种顺序进行打印呢?比如:打印两次头和两次尾,如何做呢?----抽象订单cxdd=newheader1(newheader2(newfooter1(newfooter2(newsaleticket()))));Cxdd.打印();
本文标题:面向对象范式-2014装饰模式
链接地址:https://www.777doc.com/doc-3373885 .html