zoukankan      html  css  js  c++  java
  • 设计模式C#实现(五)——抽象工厂模式

    抽象工厂模式

    意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。

    UML类图:

    场景:抽象村商店想销售Pizza和Hamburg等多种商品,而在美国店和中国店要出售本土化的口味

    工厂接口定声明了要创建的产品接口

     interface Factory
        {
            AbstractHamburg createHamburg();
            AbstractPizza createPizza();
        }

    具体的工厂创建具体产品

     class USAFactory : Factory
        {
            public AbstractHamburg createHamburg()
            {
                return new USAHamburg();
            }
             public AbstractPizza createPizza()
            {
                return new USAPizza();
            }
        }

    抽象产品

     interface AbstractPizza
        {
              string getName();
        }
      interface AbstractHamburg
        {
              string getName();
        }

    各地的具体产品的一个例子

    class USAHamburg : AbstractHamburg
        {
             public string getName()
            {
                return "USAHamburg";
            }
        }
    class USAPizza : AbstractPizza
        {
            public  string getName()
            {
                return "USAPizza";
            }
        }

    商店

      class Store
        {
            public AbstractHamburg hamburg;
            public AbstractPizza pizza;
            public Store(Factory factory)
            {
                hamburg = factory.createHamburg();
                pizza = factory.createPizza();
            }
            public void sellPizza(){
                Console.WriteLine("Sell a "+pizza.getName());
            }
            public void sellHamburg()
            {
                Console.WriteLine("Sell a " + hamburg.getName());
            }
        }

    运行

    static void Main(string[] args)

    {
      Factory factory = new USAFactory();
      Store store = new Store();
      store.sellPizza(factory);
      store.sellHamburg(factory);
      factory = new CNFactory();
      store.sellPizza(factory);
      store.sellHamburg(factory);
      Console.ReadKey();
    }

    
    

    运行结果

     效果:

    1.分离了具体类    客户Store提供抽象接口操作实例,它不知道具体操作的是什么类(低耦合?)

    2.易于改变系列    将USAFactory换成CNFactory就转换成生成另一个系列的产品(一秒换装)

    3.有利于产品的一致性  一系列产品都是CN或者USA的(民族主义必备

    4.难以支撑新种类的产品  Store想卖薯条就要修改抽象Factory和所有具体Factory(违反开闭原则?)

  • 相关阅读:
    【Python爬虫】:模拟登录QQ空间
    Docker
    Git
    DevOps
    DevOps
    gRPC 简介
    tcpdump的使用
    Raft
    go-micro 简介
    Node
  • 原文地址:https://www.cnblogs.com/castdream/p/4809310.html
Copyright © 2011-2022 走看看