工厂方法模式,抽象工厂模式

工厂模式:为创建对象提供一种灵活的方式,将对象的具体过程封装隔离,客户不必关心构造对象的细节和复杂过程。
分类:简单工厂模式、工厂方法模式、抽象工厂模式   (三种模式逐渐增加抽象层次)
简单工厂模式组成:
    1:工厂类角色:内部含有一定的逻辑判断来创建对象,一般为if...else...分之或者switch...case分之。如下图的Creator。
    2:抽象产品角色:定义要生产对象的抽象概念,是具体对象类的父类或者接口。入下图的Product
    3:具体产品角色:工厂类所创建的产品角色对象。
(个人开发中的例子:计算器类)

工厂方法模式:
    1:抽象工厂角色:相比于简单工程模式,抽象了工厂角色。具体工厂必须角色必须实现或继承抽象工厂
    2:具体工厂角色:包含逻辑判断创建具体产品对象。
    3:抽象产品角色:产品角色的模型,具体产品角色的父类或者接口。
    4:具体产品角色:具体工厂角色创建的产品对象。
    ConcreteProduct1由ConcreteCreator1创建, ConcreteProduct2由ConcreteCreator2创建,每增加一个产品相对应的要为之创建一个创建产品的工厂。
    相比于简单工厂客户类增加一个具体产品就要修改工厂内部结构违反开闭—原则。
优点:工厂方法则可以避免该现象,Client维护一个Creator的引用,当新产品引入时只要重新设置Creator的引用。
    缺点:动态增加,类多,维护难度大。

(个人开发中的例子:BM的业务代理工厂,负责new出不同的业务代理实例)

抽象工厂模式: 组成和工厂方法模式相同。
产品族:位于不同产品等级结构中,功能相关联的产品组成的家族。空调位于不同的车系统中,但是不管什么类型的空调,他们的功能相同。
抽象工厂模式满足必须的条件:
    1:系统中有多个产品族,而系统一次只可能消费其中一族产品。
    2:同属于同一个产品族的产品一起使用时。
    3:除非非常确信抽象工厂由多个确定的产品族组成,才使用抽象工厂模式。当有一个产品族改变时,必须替换掉整个抽象工厂。
    从条件上很难理解所要表达的意思,从下图看很清晰, 相比于工厂方法模式,相当于组合了不同产品组抽象工厂角色,抽象工厂模式增加了抽象工厂角色创建对象的接口,两个接口创建不同的产品族产品。
抽象工厂模式层在实际应用开发过程中可以直接与客户类相融合。也就是说可以定义一个客户类然后继承多个产品族的接口(个人开发中的BMApp继承NewDomian接口和NewInterface接口)
factory.rar

本文纯属个人学习总结, 篇幅的大部分内容都来源于网络, 每个人的水平、层次、出发点不同,阅读者可能存在一定的误解,希望提出建议共同交流



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值