设计模式学习(4)

14、抽象工厂模式

抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。


AbstractFactory(抽象工厂)

     抽象类,规定了该工厂可以生产的产品类,由子类实现具体产品类的工厂方法;

ConcreteFactoryA(具体工厂)

    继承自抽象工厂,实现抽象工厂提供的工厂方法以产生特定的产品;

ConcreteFactoryB(具体工厂)

   同ConcreteFactoryA;

AbstractProduct(抽象产品)

   抽象类,用于规定该类产品生产的具体步骤;

Product1(具体产品)

  继承自抽象产品,实现具体生产步骤;

Product2(具体产品)

  同Product1;

Client(应用场景)

  内部包含了抽象工厂的引用,在构造函数中将传入具体的工厂;

  内部包含了抽象产品类的引用,用于工厂生产具体产品的引用;

总结:抽象工厂模式与工厂模式都是用来创建对象的,但二者也有区别,工厂模式用来创建一类产品,只有一个工厂方法,子类通过实现该工厂方法决定生产的具体产品,而且通过对比类图可以发现,工厂方法将client部分省略,直接在父类里包含了产品抽象类,子类通过继承实现,也就是有多少种产品就有多少个子类;抽象工厂模式用来创建几类产品,有多个工厂方法来对应产生这些产品,子类也通过继承实现具体产品的生产,但抽象工厂里没有抽象产品类,抽象工厂最终要被包含在client中当做一个变量使用,也就是通过组合的方式实现产品的生产。

15、桥梁模式

桥梁模式将抽象与实现部分分离,使他们都可以独立变化。


Abstraction(抽象部分)

    抽象类,构造函数会出入一个Implementor的引用;

    含有一个operation()方法,其内部会调用Implementor的operationImp()方法来实现特定的功能;

RefineAbstraction(抽象部分子类)

    继承自Abstraction;

Implementor(实现部分)

    抽象类,含有operationImp()方法;

ConcreteImp(实现部分子类)

   继承自Implementor,实现了operationImp()方法;

总结:桥梁模式实现了桥梁两端的自由扩展,也就是定义里抽象与实现的分离后可以独立扩展。感觉桥梁模式是策略模式的扩展,策略模式只能有一端可以自由变化,而桥梁模式可以两端都自由变化。就像策略模式中举的例子一样,赵云可以怀揣各种锦囊去保护刘备过江东,这里锦囊可以无限扩展,那赵云可不可以扩展呢?比如正好那几天赵云病倒了,要派张飞去可不可以呢?可以!其实派谁去都是作为刘备的保镖去的,所以诸葛亮抽象出个保镖的身份,要做保镖只需走的时候携带锦囊并且会打开看就可以。所以张飞培训了一会,知道怎么打开锦囊,又在衣服上缝了个口袋,这样走的时候就可以揣上各种锦囊,是不是和赵云一样拉风!这里保镖就是Abstraction,锦囊是Implementor,赵云和张飞就是RefineAbstraction,各种锦囊就是ConcreteImp。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值