- 1、本文档共60页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
- Lect10_Cloud软件体系结构-PPT讲稿-汉语稿.ppt
- Lect4_Layered_Architectures软件体系结构-PPT讲稿-汉语稿.ppt
- Lect3_eventSysNew-2软件体系结构-PPT讲稿-汉语稿.ppt
- Lect1_MainProgram_subroutine-oo_sys -中文软件体系结构-PPT讲稿-汉语稿.ppt
- Lect2_DataflowSys软件体系结构-PPT讲稿-汉语稿.ppt
- Lect5_MVC软件体系结构-PPT讲稿-汉语稿.ppt
- Lect6_client_server软件体系结构-PPT讲稿-汉语稿.ppt
- Lect7_p2p_architecture(0505)-2软件体系结构-PPT讲稿-汉语稿.ppt
- Lect8_GridComputing软件体系结构-PPT讲稿-汉语稿.ppt
- Lect9_SOAandWebServices软件体系结构-PPT讲稿-汉语稿.ppt
- 新的一年工作展望.docx
- 医生年终个人工作的述职报告(3篇).docx
- 2023年消防设施操作员之消防设备中级技能考前冲刺练习题附答案详解.docx
- 2022-2023年环境影响评价工程师之环评技术导则与标准通关练习题包括详细解答.docx
- 2023年中级注册安全工程师之安全生产管理考前冲刺检测卷和答案.docx
- 2023年中级银行从业资格之中级银行管理考前冲刺测试卷提供答案解析.docx
- 2023年公共营养师之二级营养师通关模拟考试试卷附带答案.docx
- 证券分析师之发布证券研究报告业务考前冲刺模拟题库.docx
- 2022-2023年二级建造师之二建建设工程法规及相关知识综合提升测试卷附答案.docx
- 2023年二级建造师之二建机电工程实务通关模拟考试试卷提供答案解析.docx
文档评论(0)