Lec1-FactoryMethod-Pattern-汉语软件设计模式.ppt

Lec1-FactoryMethod-Pattern-汉语软件设计模式.ppt

  1. 1、本文档共60页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第一讲 工厂方法模式 本讲内容 工厂方法模式的引入 简单工厂方法模式以及设计实例 工厂方法模式理论以及设计实例 工厂方法模式的进一步研究 工厂方法模式的引入 问题:怎样调用某个类中的方法? 如果一个应用对象准确地知道调用哪个方法,则它可以直接初始化包含该方法的类。 见如下的例子. 工厂方法模式的引入 工厂方法模式的引入 问题: 怎样调用一个层次类中的方法,该类包含了许多 子类,而你不知道调用哪个? 你的选择可能依赖于如下的因素: 程序运行状态 (例如用户输入) 程序的配置设置 在这种情况下,应用对象需要使用条件语句在层次类中初始化包含所需功能的合适的类,见下页的例子。 工厂方法模式的引入 工厂方法模式的引入 该设计的缺点: 高耦合 因为每个欲使用层次类提供的服务的对象必须实现类的选择标准,导致了应用类与服务提供层次类的高耦合。 工厂方法模式的引入 难看的条件语句 欲使用层次类提供的服务的对象中必须包含许多条件语句 c) 客户类应该知道被调用类的全部细节 要求应用对象要全部知道层次类中每个类 包含了什么样的功能 工厂方法模式的引入 怎样改善以上设计? 在此情况下,可以使用过此方法模式(Factory Method pattern). 该模式建议: 指定一个类,将从层次类中选择所需要的类,并且初始化该类对象的功能封装在该类一个方法中。该指定的类叫做工厂类,该方法叫做工厂方法。 工厂方法模式的引入 工厂方法模式的引入 工厂方法的功能: 工厂方法可以被定义为一个做如下事情的方法: 根据应用环境和其它的因素,在层次类中选择一个类; 创建所选择类的对象; 返回给调用者所创建的对象(该对象的类型应该是层次类的超类类型) 工厂方法的优点 清洗了客户程序 因为应用对象可以使用工厂方法访问合适的类的对象,所以,应用对象就不需要处理类的选择标准问题. Introduction to Factory Method Pattern 隐藏了创建对象的细节 因为不同的子类的对象需要以不同的方式创建。工厂方法将根据环境、客户选择而创建对象的繁琐细节封装了起来. Introduction to Factory Method Pattern 客户不需要知道哪个具体的类的对象被创建了 因为工厂方法返回给客户类的对象的类型为层次类的超类类型,所以客户类不需要知道哪个具体的子类的对象被创建了。 简单工厂方法模式 简单工厂方法模式类图 简单工厂方法模式 Creator (工厂类): 简单工厂方法模式的核心 包含应用所需要的业务逻辑 工厂方法创建一个Product类型的对象 简单工厂方法模式 Product组件: Java 接口或者抽象类 具体子类的共同接口 ConcreteProduct组件: 具体的Java类,实现其接口Product或者继承了Product 简单工厂方法模式 例 1: 汽车保险条款: 利用简单工厂方法模式进行设计 如下的类图代表一个利用简单工厂方法模式进行设计的程序,用于查询不同类型的汽车保险条款 简单工厂方法模式 简单工厂方法模式 AutoInsurance 为Java接口,声明了getInsurDescription()方法 4个子类: BodyInjurLiability (e.g., you hit a person) CollisionCoverage (e.g., you car is hit) ComprehensiveCoverage (other items) PersonInjuryProtection (driver injured) 实现了接口类AutoInsurance 简单工厂方法模式 PolicyProducer 工厂类,带有一个工厂方法: getPolicyObj(String option), 该方法创建并且返回给调用者一个 AutoInsurance类型的对象. 在本设计中,工厂类根据用户给定的选择,即参数 “option”,而决定具体地创建哪个AutoInsurance的子类的对象。 简单工厂方法模式 public interface AutoInsurance { abstract String getInsuranceDescription(); } 简单工厂方法模式 public class BodyInjurLiability implements

您可能关注的文档

文档评论(0)

东山书苑 + 关注
实名认证
内容提供者

业务以学生学习成长为中心,为外语培训、中小学基础教育、学前教育,提供各种学习资料支持服务。

1亿VIP精品文档

相关文档