第9讲细化迭代2更多模式_第1页
第9讲细化迭代2更多模式_第2页
第9讲细化迭代2更多模式_第3页
第9讲细化迭代2更多模式_第4页
第9讲细化迭代2更多模式_第5页
已阅读5页,还剩92页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-232w迭代迭代2wGRASP模式模式wGoF模式模式上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-234w基本对象设计基本对象设计w使用模式来创建稳健的设计使用模式来创建稳健的设计w应用应用UML使模型可视化使模型可视化上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-235makeCreditPayment(credNum, expiryDate)

2、reply := requestApproval(request)postReceivable( receivable )actor:CreditAuthorizationServiceactor:AccountsenterItem(itemID, quantity):NextGenPOSSystem: CashierendSale()Process SalePay by Credit Scenariodescription, totaltotal with taxes* more itemsmakeNewSale()actor:TaxCalculatortaxLineItems :=getT

3、axes( sale )postSale( sale )上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-236w在迭代在迭代1n所有软件都已经被充分地测试所有软件都已经被充分地测试n客户定期地参与对已完成部分的评估客户定期地参与对已完成部分的评估n已经对系统(这里的系统也包括所有子系统)进行了已经对系统(这里的系统也包括所有子系统)进行了完整的集成和固化,使其成为基线化的内部版本完整的集成和固化,使其成为基线化的内部版本上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-237wNextGen POSn支持第三方外部服务的变化,例如,能够与不同的

4、税支持第三方外部服务的变化,例如,能够与不同的税金计算器相连接金计算器相连接n复杂的定价规则,可更换的业务规则复杂的定价规则,可更换的业务规则n需要进行设计,使得在销售总额变化时刷新需要进行设计,使得在销售总额变化时刷新GUI窗口窗口上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-238w由于这些需求,我们要在迭代由于这些需求,我们要在迭代2中对处理销售用中对处理销售用例进行修订,但是实现了更多场景例进行修订,但是实现了更多场景w对面向分析的对象的修改在此轮迭代中也是需要对面向分析的对象的修改在此轮迭代中也是需要的的nUse-CasesnSSDsnDomain Mod

5、el上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系For Assigning Responsibilities上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2310w信息专家信息专家w创建者创建者w高内聚高内聚w低耦合低耦合w控制器控制器上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2311w多态(多态(Polymorphism)w间接性(间接性(Indirection)w纯虚构(纯虚构(Pure Fabrication)w防止变异(防止变异(Protected Variation)上海交通大学计算机科学与工程系上海交通大学

6、计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2313w如何处理基于类型的选择如何处理基于类型的选择? n“If-then-else”; “select-case”w如何创建可插拔的软件构件如何创建可插拔的软件构件?上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2314w当相关选择或行为随类型(类)有所不同时,使当相关选择或行为随类型(类)有所不同时,使用多态为变化的行为类型分配职责用多态为变化的行为类型分配职责上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2315w支持多种外部的第三方税金计

7、算器支持多种外部的第三方税金计算器n它们具有不同技术实现的不同的它们具有不同技术实现的不同的TCP socketSOAP interfaceJava RMI interface上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2316TaxMasterAdaptergetTaxes( Sale ) : List of TaxLineItemsGoodAsGoldTaxProAdaptergetTaxes( Sale ) : List of TaxLineItemsITaxCalculatorAdaptergetTaxes( Sale ) : List of TaxLin

8、eItemsBy Polymorphism, multiple tax calculator adapters havetheir own similar, but varying behavior for adapting todifferent external tax calculators.Adapter.上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2317GoodAsGoldTaxProAdaptergetTaxes( Sale ) : List of TaxLineItemsITaxCalculatorAdaptergetTaxes( Sale ) :

9、 List of TaxLineItemsINTERFACE NOTATIONINTERFACE NOTATIONInterface implementation isillustrated with a dashed lineand a large unfilled arrowpointing to the interface fromthe implementing class.the element in guillemets iscalled a UML stereotypeReturn or parameter typesthat represent a collectioncan

10、be specified in anysyntax, but this is thegenerally accepted commonUML style.上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2318w不要为那些假想中的变化添加太多的多态不要为那些假想中的变化添加太多的多态上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2319w易于增加新变化所需的扩展易于增加新变化所需的扩展w无需影响客户便能够引入新的实现无需影响客户便能够引入新的实现上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交

11、通大学计算机科学与工程系2022-3-2321w面向对象设计依据真实世界中的概念来表示软件面向对象设计依据真实世界中的概念来表示软件类类w但是软件并非真实的世界但是软件并非真实的世界w我们需要通过领域层对象来克服我们需要通过领域层对象来克服n低内聚或者耦合低内聚或者耦合n低复用低复用上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2322w对人为制造的类分配一组高内聚的职责,该类并对人为制造的类分配一组高内聚的职责,该类并不代表问题领域的概念不代表问题领域的概念-虚构的事物虚构的事物,用以支持,用以支持高内聚、低耦合和复用高内聚、低耦合和复用上海交通大学计算机科学与工

12、程系上海交通大学计算机科学与工程系2022-3-2323w为了保存为了保存Sale 的实例到关系数据库的实例到关系数据库w基于信息专家的考虑,存在理由将责任分配给基于信息专家的考虑,存在理由将责任分配给Sale 类自己类自己. 但是考虑如下含义但是考虑如下含义:n需要大量的数据库操作,这将使需要大量的数据库操作,这将使Sale 变得非内聚变得非内聚nSale 类必须与关系数据库接口耦合,这样增加了耦合类必须与关系数据库接口耦合,这样增加了耦合n将对象保存到关系数据库中是一个普遍的任务将对象保存到关系数据库中是一个普遍的任务-它可它可以重用以重用上海交通大学计算机科学与工程系上海交通大学计算机科

13、学与工程系2022-3-2324PersistentStorageinsert( Object )update( Object ).By Pure Fabrication上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2325w对象的设计可以广泛的分成两组对象的设计可以广泛的分成两组n表示解析(表示解析(Representational decomposition)n行为解析(行为解析(Behavioral decomposition)上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2326w支持高内聚支持高内聚w增加了潜在的复用性增加了潜在

14、的复用性上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2327w不要过度使用不要过度使用w它将导致非它将导致非O-O 的系统的系统上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2329w为了避免两个或多个事物之间的直接耦合,应该为了避免两个或多个事物之间的直接耦合,应该如何分配职责如何分配职责?w如何使对象解耦,以支持低耦合并提高复用性如何使对象解耦,以支持低耦合并提高复用性?上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2330w将职责分配给将职责分

15、配给中介对象中介对象,使其作为其他构件或服,使其作为其他构件或服务之间的媒介,以避免它们之间的直接耦合务之间的媒介,以避免它们之间的直接耦合上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2331wTaxCalculatorAdapterwPersistentStorages : Sale:TaxMasterAdaptertaxes := getTaxes( s )t := getTotal()the adapter acts as a levelof indirection to externalsystems: TaxMasterTCP socketcommuni

16、cationxxx.上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2332w组件之间的低耦合组件之间的低耦合上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2334w如何设计对象,子系统和系统,使其内部的变化如何设计对象,子系统和系统,使其内部的变化或不稳定性不会对其它元素造成不良影响或不稳定性不会对其它元素造成不良影响上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2335w识别预计变化或不稳定之处,分配职责用以在这识别预计变化或不稳定之处,分配职责用以

17、在这些变化之外创建稳定接口些变化之外创建稳定接口上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2336w外部税金计算器问题外部税金计算器问题上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2337wPV 时非常重要和基本的软件设计原则。许多软时非常重要和基本的软件设计原则。许多软件或架构设计技巧都是防止变异的特例件或架构设计技巧都是防止变异的特例nData encapsulation, interfaces, polymorphism, indirectionnData-driven designsnSOAn上海交通大学计算机科学与工程系上

18、海交通大学计算机科学与工程系2022-3-2338w如果需要灵活性和对变化的预防,那么就应用如果需要灵活性和对变化的预防,那么就应用 PVw如果预测将来验证或者预测如果预测将来验证或者预测“复用复用”的可能性并的可能性并不确定,则需要有克制和批评的态度不确定,则需要有克制和批评的态度上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2339w初学者倾向于脆弱的设计初学者倾向于脆弱的设计w而中等程度的开发者则倾向于过度想象的,灵活而中等程度的开发者则倾向于过度想象的,灵活的,一般化的设计的,一般化的设计w专家开发者理智地进行选择专家开发者理智地进行选择上海交通大学计算机科

19、学与工程系上海交通大学计算机科学与工程系2022-3-2340w易于增加新变化所需的扩展易于增加新变化所需的扩展w可以引入新的实现而无需影响客户可以引入新的实现而无需影响客户w低耦合低耦合w能够降低变化的成本或影响能够降低变化的成本或影响上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2342wDesign Patterns, 作为一本非常著名的书,是由四作为一本非常著名的书,是由四位作者写的,因此位作者写的,因此 我们使用我们使用“Gang-of-Four”上海交通大学计算机科学与工程系上海交通大学计算机科

20、学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2344w如何解决不相容的接口问题,或者如何为具有不如何解决不相容的接口问题,或者如何为具有不同接口的类似构件提供稳定的接口同接口的类似构件提供稳定的接口?上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2345w通过中介适配器对象,将构件的原来的接口转换通过中介适配器对象,将构件的原来的接口转换为其它接口为其它接口w多态模式就是该模式的例子多态模式就是该模式的例子上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2346TaxMasterAdaptergetT

21、axes( Sale ) : List of TaxLineItemsGoodAsGoldTaxProAdaptergetTaxes( Sale ) : List of TaxLineItemsITaxCalculatorAdaptergetTaxes( Sale ) : List of TaxLineItemsAdapters use interfaces andpolymorphism to add a level ofindirection to varying APIs in othercomponents.SAPAccountingAdapterpostReceivable( Cre

22、ditPayment )postSale( Sale ).GreatNorthernAccountingAdapterpostReceivable( CreditPayment )postSale( Sale ).IAccountingAdapterpostReceivable( CreditPayment )postSale( Sale ).IInventoryAdapter.ICreditAuthorizationServiceAdapterrequestApproval(CreditPayment,TerminalID, MerchantID).上海交通大学计算机科学与工程系上海交通大学

23、计算机科学与工程系2022-3-2347:Register: SAPAccountingAdapterpostSale( sale )makePayment()the Adapter adapts tointerfaces in othercomponents: SAPSOAP overHTTPxxx.IAccountingAdapterUML notation to indicate somethingimplements a particular interface上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2348wAdapter 模式的应用是对模式的应用是

24、对GRASP构造块的特殊构造块的特殊化化 (polymorphism, indirection and protected variations)w可以找到数百种模式的说明可以找到数百种模式的说明w理解本质能够使我们摒弃太多细节理解本质能够使我们摒弃太多细节上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2349w命名习惯命名习惯: 将模式名字放在类型中将模式名字放在类型中w设计中发现的设计中发现的“分析分析” : 领域模型领域模型上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-23

25、51w在适配器模式中,对外部服务有不同的接口,那在适配器模式中,对外部服务有不同的接口,那么是谁创建了这些适配器,并且如何决定创建哪么是谁创建了这些适配器,并且如何决定创建哪种类的适配器种类的适配器w当有特殊考虑(例如存在复杂创建逻辑,为了改当有特殊考虑(例如存在复杂创建逻辑,为了改良内聚而分离创建职责等)时,应该由谁来负责良内聚而分离创建职责等)时,应该由谁来负责创建对象创建对象?上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2352w创建称为工厂的纯虚构对象来处理这些创建职责创建称为工厂的纯虚构对象来处理这些创建职责上海交通大学计算机科学与工程系上海交通大学计算

26、机科学与工程系2022-3-2353ServicesFactoryaccountingAdapter : IAccountingAdapterinventoryAdapter : IInventoryAdaptertaxCalculatorAdapter : ITaxCalculatorAdaptergetAccountingAdapter() : IAccountingAdaptergetInventoryAdapter() : IInventoryAdaptergetTaxCalculatorAdapter() : ITaxCalculatorAdapter.note that the f

27、actory methodsreturn objects typed to an interfacerather than a class, so that thefactory can return anyimplementation of the interface if ( taxCalculatorAdapter = null ) / a reflective or data-driven approach to finding the right class: read it from an / external property String className = System.

28、getProperty( ); taxCalculatorAdapter = (ITaxCalculatorAdapter) Class.forName( className ).newInstance(); return taxCalculatorAdapter;It may lessen the need for interaction diagramData-driven design上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2354w分离复杂的创建职责,并将其分配给内聚的帮助分离复杂的创建职责,并将其分配

29、给内聚的帮助者对象者对象w隐藏潜在的复杂创建逻辑隐藏潜在的复杂创建逻辑w允许引入提高性能的内存管理策略,例如对象缓允许引入提高性能的内存管理策略,例如对象缓存或再生存或再生上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2356w谁来创建工厂自身谁来创建工厂自身?w如何访问工厂如何访问工厂?n将实例作为一个参数进行传递将实例作为一个参数进行传递n对那些需要可见性的对象在初始化时赋予一个持久引对那些需要可见性的对象在初始化时赋予一个持久引用用n单实例模式单实例模式:只允许类的一个实例:这是一个单实例。只允许类的

30、一个实例:这是一个单实例。对象需要一个全局和唯一的访问点对象需要一个全局和唯一的访问点.上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2357w对类定义静态方法用以返回单实例对类定义静态方法用以返回单实例上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2358 1ServicesFactoryinstance : ServicesFactoryaccountingAdapter : IAccountingAdapterinventoryAdapter : IInventoryAdaptertaxCalculatorAdapter : ITa

31、xCalculatorAdaptergetInstance() : ServicesFactorygetAccountingAdapter() : IAccountingAdaptergetInventoryAdapter() : IInventoryAdaptergetTaxCalculatorAdapter() : ITaxCalculatorAdapter.singleton staticattributesingletonstatic method/ static methodpublic static synchronized ServicesFactory getInstance(

32、)if ( instance = null ) instance := new ServicesFactory()return instanceUML notation: in aclass box, anunderlined attribute ormethod indicates astatic (class level)member, rather thanan instance memberUML notation: this 1 can optionally be used toindicate that only one instance will be created (asin

33、gleton)Lazy initializationCreation work is avoided, if the instance is never actually accessedThe getInstance lazy initialization sometimes contains complex and conditional creation logic上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2359w开发人员通过类的静态方法开发人员通过类的静态方法getInstance 得到其唯得到其唯一实例的全局可见性一实例的全局可见性public cl

34、ass Register public void initialize () do some work / accessing the singleton Factory via the getInstance call accountingAdapter= ServiceFactory.getInstance().getAccountingAdapter();do some work/other mtehods. 上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2360:Register:ServicesFactoryaa := getAccountingAdapt

35、er()initialize().a UML stereotype can indicate thatvisibility to this instance wasachieved via the Singleton pattern上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2361w使用适配器,工厂和单实例类模式的结合,为具有不同接口的外部使用适配器,工厂和单实例类模式的结合,为具有不同接口的外部税金计算器,财务系统等提供防止变异税金计算器,财务系统等提供防止变异:RegisteraccountingAdapter:SAPAccountingAdapterpos

36、tSale( sale )makePayment(): SAPSOAP overHTTPxxxIAccountingAdapter:Register:ServicesFactoryaccountingAdapter := getAccountingAdapter():Storecreate()create() instance = null create(): SAPAccountingAdapterIAccountingAdapter: Paymentcreate(cashTendered)上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学

37、计算机科学与工程系2022-3-2363w提供更为复杂的定价逻辑,例如商店在某天的折提供更为复杂的定价逻辑,例如商店在某天的折扣,老年人折扣等扣,老年人折扣等w如何设计变化但相关的算法或政策?如何设计才如何设计变化但相关的算法或政策?如何设计才能使这些算法或政策具有可变更的能力能使这些算法或政策具有可变更的能力上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2364w在单独的类中分别定义每种算法在单独的类中分别定义每种算法/政策政策/策略,并策略,并且使其具有共同接口且使其具有共同接口上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2365P

38、ercentDiscountPricingStrategypercentage : floatgetTotal( s:Sale ) : MoneyAbsoluteDiscountOverThresholdPricingStrategydiscount : Moneythreshold : MoneygetTotal( s:Sale ) : MoneyISalePricingStrategygetTotal( Sale ) : Money return s.getPreDiscountTotal() * percentage?PricingStrategy.pdt := s.getPreDisc

39、ountTotal()if ( pdt threshold ) return pdtelse return pdt - discount上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2366:PercentDiscountPricingStrategyISalePricingStrategys : Sale* : st := getSubtotal()t := getTotal():SalesLineItem:SalesLineItemt := getTotal( s )pdt := getPreDiscountTotal() t = pdt * percentag

40、e note that the Sale s ispassed to the Strategyso that it has parametervisibility to it for furthercollaboration上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2367w语境对象需要其策略的属性可见性语境对象需要其策略的属性可见性PercentDiscountPricingStrategypercentage : floatgetTotal( Sale ) : MoneyAbsoluteDiscountOverThresholdPricingStrategy

41、discount : Moneythreshold : MoneygetTotal( Sale ) : MoneyISalePricingStrategygetTotal( Sale ) : MoneySaledate.getTotal().1*Sale needs attributevisibility to its StrategypricingStrategygetTotal().return pricingStrategy.getTotal( this )上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2368 1PricingStrategyFactoryi

42、nstance : PricingStrategyFactorygetInstance() : PricingStrategyFactorygetSalePricingStrategy() : ISalePricingStrategygetSeniorPricingStrategy() : ISalePricingStrategy. String className = System.getProperty( ); strategy = (ISalePricingStrategy) Class.forName( className

43、).newInstance(); return strategy;Because of the frequently changing pricing policyre-create one each time上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2369:Sale:PricingStrategyFactoryps :=getSalePricingStrategy():RegistermakeNewSale()create()create( percent )ps : PercentDiscountPricingStrategyISalePricingStr

44、ategy上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2370w如何确定百分比或绝对值折扣的数值如何确定百分比或绝对值折扣的数值?w这些数据将保存于某种外部数据存储中以便修改这些数据将保存于某种外部数据存储中以便修改w哪个对象读取这些数据,并确保将其分配给相应哪个对象读取这些数据,并确保将其分配给相应的策略的策略?nStrategy Factory w从外部数据源中读取数字的方法通过对其变化电从外部数据源中读取数字的方法通过对其变化电贺金花店进行分析后来确定贺金花店进行分析后来确定上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与

45、工程系上海交通大学计算机科学与工程系2022-3-2372w如何处理多个互相冲突的定价策略如何处理多个互相冲突的定价策略?n老年人老年人20% 的折扣的折扣n对于购物金额满对于购物金额满400元的优先客户给与折元的优先客户给与折15%的折扣的折扣n在星期一,购物金额满在星期一,购物金额满500元的享受元的享受50元的折扣元的折扣n买一罐印度大吉岭茶买一罐印度大吉岭茶, 则所有购买物品都享受则所有购买物品都享受15%的的折扣折扣上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2373w解决冲突的策略解决冲突的策略n对顾客最有利或者对商场最有利对顾客最有利或者对商场最有利

46、w定价策略可能与产品类型相关,也可能与客户类定价策略可能与产品类型相关,也可能与客户类型相关,这意味着型相关,这意味着:nStrategyFactory 必须知道客户和产品的类型必须知道客户和产品的类型如何能够像处理非组合(原子)对象一样,(多态地)处理一组对象或具有组合结构的对象呢?上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2374w为复合和原子对象定义一个类,以使他们实现相为复合和原子对象定义一个类,以使他们实现相同的接口同的接口上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2375PercentageDiscountPricin

47、gStrategypercentage : floatgetTotal( Sale ) : MoneyAbsoluteDiscountOverThresholdPricingStrategydiscount : Moneythreshold : MoneygetTotal( Sale ) : MoneyISalePricingStrategygetTotal( Sale ) : Money return sale.getPreDiscountTotal() * percentageCompositePricingStrategyadd( ISalePricingStrategy )getTot

48、al( Sale ) : MoneylowestTotal = INTEGER.MAXfor each ISalePricingStrategy strat in pricingStrategies total := strat.getTotal( sale ) lowestTotal = min( total, lowestTotal ) return lowestTotal1.*CompositeBestForCustomerPricingStrategygetTotal( Sale ) : MoneyCompositeBestForStorePricingStrategygetTotal

49、( Sale ) : MoneypricingStrategiesAll composites maintain a list ofcontained strategies. Therefore,define a common superclassCompositePricingStrategy thatdefines this list (namedpricingStrategies).Saledate.getTotal().1*pricingStrategy.return pricingStrategy.getTotal( this )The outer composite object

50、contains a list of inner objects and both the outer and inner objects implement the same interface上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2376:CompositeBestForCustomerPricingStrategyISalePricingStrategys : Sale* : st := getSubtotal()t := getTotal():SalesLineItem:SalesLineItemt := getTotal( s )the Sale

51、object treats a Composite Strategy that containsother strategies just like any other ISalePricingStrategy* : x := getTotal( s ):SalesLineItem:ObjectISalePricingStrategyUML notation : this is a way to indicate objects thatimplement some interface, when we dont want to declarewhat the specific impleme

52、ntation classes are t = min(set of all x) 上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2377w什么时候创建这些策略呢什么时候创建这些策略呢?w在情形中有三个地方可以将定价策略加入到符合在情形中有三个地方可以将定价策略加入到符合对象中对象中:n目前商店定义的折扣,可以在销售对象创建时添加目前商店定义的折扣,可以在销售对象创建时添加n顾客类型的折扣,可以在顾客类型的折扣,可以在POS机获取顾客类型时添加机获取顾客类型时添加n产品类型的折扣产品类型的折扣 (if bought Darjeeling tea, 15% off t

53、he overall sale), 可以在产品输入到销售中时添加可以在产品输入到销售中时添加上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2378:Sale:PricingStrategyFactoryps :=getSalePricingStrategy():RegistermakeNewSale()create()create()ps :CompositeBestForCustomerPricingStrategyISalePricingStrategycreate( percent )s : PercentageDiscountPricingStrategyI

54、SalePricingStrategyadd( s )上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2379w对于客户类型折扣的第二种情形对于客户类型折扣的第二种情形wUse Case UC1: Process Salenn扩展扩展 (or Alternative Flows):n5b. Customer says they are eligible for a discount (e.g., employee, preferred customer)1. Cashier signals discount request2. Cashier enters Custo

55、mer identification3. System presents discount total, based on discount rules上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2380s :Sale:RegisterenterCustomerForDiscount( custID )by Controllerby Expert andIDs to Objects:Storec := getCustomer( custID )enterCustomerForDiscount( c : Customer )continued inanotherdi

56、agramby Expert上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2381s :Sale:PricingStrategyFactoryaddCustomerPricingStrategy( s )ps :CompositeBestForCustomerPricingStrategyISalePricingStrategycreate( pct )s : PercentageDiscountPricingStrategyISalePricingStrategyadd( s )by ExpertenterCustomerForDiscount( c : Cust

57、omer )originates inanother diagramc := getCustomer()by Factory andHigh Cohesionby Expertps := getPricingStrategy()pct :=getCustomerPercentage( c )by High Cohesionby Factory and CompositePassAggregateObject asParameter上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2382wIDs 到对象到对象nA common practice in object de

58、sign-to transform keys and IDs for things into true objectsnTransform the customerID into a Customer objectw将聚集对象作为参数将聚集对象作为参数naddCustomerPricingStrategy(s:Sale) message we pass a Sale to the factory, and then the factory turns around and asks for the Customer and PricingStrategy from the Sale上海交通大学

59、计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2384w可插拔的业务规则可插拔的业务规则n创建新销售时,可能要识别该销售是否以礼券方式进创建新销售时,可能要识别该销售是否以礼券方式进行支付。商店可能会规定如果使用礼券只可以购买一行支付。商店可能会规定如果使用礼券只可以购买一件商品。件商品。n如果销售使用礼券支付,在对该顾客找零时,除了礼如果销售使用礼券支付,在对该顾客找零时,除了礼券之外所有其它支付类型的找零都应该置为无效。例券之外所有其它支付类型的找零都应该置为无效。例如,如果收银员请求现金找零或更新顾客在其商店帐如

60、,如果收银员请求现金找零或更新顾客在其商店帐户上的积分时,这些请求都应该判断为无效户上的积分时,这些请求都应该判断为无效n.w如何设计一个软件对目前的软件组件影响最小呢如何设计一个软件对目前的软件组件影响最小呢?上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3-2385w定义对子系统的单一的接触点定义对子系统的单一的接触点- 用一个外观对象用一个外观对象包装子系统。外观对象提供了一个唯一的统一接包装子系统。外观对象提供了一个唯一的统一接口,它负责与子系统的组件进行协作口,它负责与子系统的组件进行协作上海交通大学计算机科学与工程系上海交通大学计算机科学与工程系2022-3

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论