软件工程全程班黄璜学长4.pptx

  1. 1、本文档共29页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
主讲人:黄璜;第 4 课时;;4种体系结构风格 人机交互设计 内聚与耦合 设计原则;;Chapter16 设计模式;策略模式;2) 使用场景 i. 如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 ii. 一个系统需要动态地在几种算法中选择一种。 iii. 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。 3) 优点 i. 策略模式提供了对“开闭原则”的完美支持,用户可以在不修改原有系统的基础上选择算法或行为,也可以灵活地增加新的算法或行为。 ii. 策略模式提供了可以替换继承关系的办法。 iii. 使用策略模式可以避免使用多重条件转移语句。;4) 缺点 i. 客户端必须知道所有的策略类,并自行决定使用哪一个策略类。 ii. 策略模式将造成产生很多策略类, 5) 体现的原则 SRP,FCOI,OCP,LSP,DIP 可能会违反代码要清晰To be Explicit 这个原则;public void selectSort(String type){ if("type1".equals(type)){ //选择快速排序 } else if("type2".equals(type)){ //选择插入排序 } else if("type3".equals(type)){ //选择冒泡排序 } else if("type4".equals(type)){ //选择选择排序 } ...... };public interface Sort{ public abstract int[] sort(int arr[]);} public class BubbleSort implements Sort{} public class InsertionSort implements Sort {} public class SelectionSort implements Sort {} public class ArrayHandler{ private Sort sortObj; public int[] sort(int arr[]){ sortObj.sort(arr); return arr; } public void setSortObj(Sort sortObj) { this.sortObj = sortObj; } } ;抽象工厂模式;2) 使用场景 i. 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有类型的工厂模式都是重要的。 ii. 系统中有多于一个的产品族,而每次只使用其中某一产品族。 iii. 属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来。 iv. 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。 3) 优点 i. 抽象工厂隔离了具体类的生成,是的客户端不需要知道什么被创建。所有的具体工厂都实现了抽象工厂中定义的公共接口,因此只需要改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。 ii. 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。;4) 缺点 i. 添加新的行为时比较麻烦。如果需要添加一个新产品族对象时,需要更改接口及其下所有子类,这必然会带来很大的麻烦。 5) 体现的原则 不要重复,封装,OCP,DIP,LSP 轻度违反代码要清晰To be Explicit;为了要保证每家加盟店都能够生产高质量的披萨,防止使用劣质的原料,我们打算建造一家生产原料的工厂,并将原料运送到各家加盟店。但是加盟店都位于不同的区域,比如纽约、芝加哥。纽约使用一组原料,芝加哥使用另一种原料。在这里我们可以这样理解,这些不同的区域组成了原料家族,每个区域实现了一个完整的原料家族。; 首先创建一个原料工厂。该工厂为抽象工厂,负责创建所有的原料。; 原料工厂创建完成之后,需要创建具体的原料工厂。 该具体工厂只需要继承PizzaIngredientFactory,然后实现里面的方法即可。; 重新返回到披萨。在这个披萨类里面,我们需要使用原料,其他方法保持不变, 将prepare()方法声明为抽象,在这个方法中,我们需要收集披萨所需要的原料。;publ

文档评论(0)

王子 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档