- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本章目标 理解抽象工厂 学会搭建抽象工厂 为什么需要抽象工厂设计模式 什么是抽象工厂设计模式 什么是抽象工厂设计模式 什么是抽象工厂设计模型 提供一个创建一系列相关或相互依赖对象的接口,无需指定它们具体的类 如何使用抽象工厂设计模式 应用示例 完成本章任务的步骤 新增抽象工厂项目 在解决方案“MySchoolPro” 上单击右键选择“添加” ?新建项目 新增抽象产品项目 在解决方案“MySchoolPro” 上单击右键选择“添加” ?新建项目 实现项目之间的依赖 实现数据访问接口 在“MySchoolIDAL”项目上单击右键选择“添加” ?新建项 实现数据访问接口 定义接口 实现数据访问接口 实现接口 实现数据访问对象创建功能 在“MySchoolDALFactory”项目上单击右键选择“添加” ?新建项 实现数据访问对象创建功能 编码实现 实现数据访问对象创建功能 实现数据访问对象创建功能 在“MySchoolDALFactory”项目上单击右键选择“添加” ?新建项 实现数据访问对象创建功能 业务逻辑层调用数据访问层方法 小结 实现要点 抽象工厂将产品对象的创建延迟到它的具体工厂的子类。 如果没有应对“多系列对象创建”的需求变化,则没有必要使用抽象工厂模式,这时候使用简单的静态工厂完全可以。 系列对象指的是这些对象之间有相互依赖、或作用的关系,例如游戏开发场景中的“道路”与“房屋”的依赖,“道路”与“地道”的依赖。 抽象工厂模式经常和工厂方法模式共同组合来应对“对象创建”的需求变化。 通常在运行时刻创建一个具体工厂类的实例,这一具体工厂的创建具有特定实现的产品对象,为创建不同的产品对象,客户应使用不同的具体工厂。 把工厂作为单件,一个应用中一般每个产品系列只需一个具体工厂的实例,因此,工厂通常最好实现为一个单件模式。 创建产品,抽象工厂仅声明一个创建产品的接口,真正创建产品是由具体产品类创建的,最通常的一个办法是为每一个产品定义一个工厂方法,一个具体的工厂将为每个产品重定义该工厂方法以指定产品,虽然这样的实现很简单,但它确要求每个产品系列都要有一个新的具体工厂子类,即使这些产品系列的差别很小。 抽象工厂优缺点 优点 分离了具体的类。抽象工厂模式帮助你控制一个应用创建的对象的类,因为一个工厂封装创建产品对象的责任和过程。它将客户和类的实现分离,客户通过他们的抽象接口操纵实例,产品的类名也在具体工厂的实现中被分离,它们不出现在客户代码中。 它使得易于交换产品系列。一个具体工厂类在一个应用中仅出现一次——即在它初始化的时候。这使得改变一个应用的具体工厂变得很容易。它只需改变具体的工厂即可使用不同的产品配置,这是因为一个抽象工厂创建了一个完整的产品系列,所以整个产品系列会立刻改变。 它有利于产品的一致性。当一个系列的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要,而抽象工厂很容易实现这一点。 缺点 难以支持新种类的产品。难以扩展抽象工厂以生产新种类的产品。这是因为抽象工厂几口确定了可以被创建的产品集合,支持新种类的产品就需要扩展该工厂接口,这将涉及抽象工厂类及其所有子类的改变。 抽象工厂使用场景 适用性 在以下情况下应当考虑使用抽象工厂模式: 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有形态的工厂模式都是重要的。 这个系统有多于一个的产品族,而系统只消费其中某一产品族。 同属于同一个产品族的产品是在一起使用的,这一约束必须在系统的设计中体现出来。 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于实现。 应用场景 支持多种观感标准的用户界面工具箱(Kit)。 游戏开发中的多风格系列场景,比如道路,房屋,管道等。 …… 本课程版权归北风网所有 欢迎访问我们的官方网站 (6)创建抽象工厂类AbstarctDALFactory 用抽象方法提供数据访问对象的创建: 创建abstract 方法CreateStudentService和CreateAdminService分别返回接口IStudentService和IAdminService,具体的创建市实例化过程在实体工厂中完成。 创建static的创建工厂的方法,根据配置文件,实例化不同的实体工厂,注意在配置文件中添加Sql 设置appSetting (7)创建实体工厂SqlDALFactory和AccessDALFactory类,继承AbstractDALFactory 实现不同的创建方法,即new 不同的命名空间下的不同实例。一个来源于MySchoolDAL.SqlServer 一个来源于MySchool.DAL.Access (8)业务逻辑
文档评论(0)