[设计模式03]-抽象工厂

来源:互联网 发布:淘宝商品资质是什么 编辑:程序博客网 时间:2024/05/16 16:59

      上一个章节简单工厂模式中,如果增加产品C,那么则需要修改工厂类的逻辑代码。如果这种情形发生在现实中,我们的解决方案是,增加产品C,增加生产产品C的工厂就可以了。修改工厂类的逻辑显然是不合理的。如果按照单一职责的原则,工厂应该只负责相应产品的生产,而不应该根据类别生产产品,换句话说就是工厂应该职责单一化,按照这种思路,我们针对每一种产品建立工厂。我们再在具体工厂的基础上抽象出一个类出来,这样就能够实现增加产品时,只需要增加相应的工厂,不需要改动工厂类代码。

      抽象工厂在简单工程的基础上,进一步解决了扩展时需要修改工厂类逻辑代码的问题。解决方式是工厂职责明确化,再抽提工厂类。

ProductFactory

namespace SimpleFactory{    public abstract class ProductFactory    {        public abstract Product CreateProduct();    }}

ProductAFactory

namespace SimpleFactory{    public class ProductAFactory : ProductFactory    {        public override Product CreateProduct()        {            return new ProductA();        }    }}

ProductBFactory

namespace SimpleFactory{    public class ProductBFactory : ProductFactory    {        public override Product CreateProduct()        {            return new ProductB();        }    }}

调用者:

ProductFactory factory = null;factory = new ProductAFactory();factory.CreateProduct();factory = new ProductBFactory();factory.CreateProduct();Console.ReadKey();


其他代码不动,这样如果增加产品,我们只需要增加相应工厂,

这个已经能够满足SOLID原则的单一职责原则和对扩展开放,对修改封闭的原则。

ProductA

public class ProductA:Product{   public ProductA()   {       Console.WriteLine("ProductA created.");   }}

ProductB类似

抽象工厂模式将逻辑划分为产品层, 工厂层,抽象工厂层。这里我们得出一条结论:

if...else.switch这样的分支判断都是可以通过设计模式来分解的。


 

0 0