zoukankan      html  css  js  c++  java
  • 2.设计模式-Abstract Factory 抽象工厂模式

     大神勿喷,不对的地方请指出来,学笔记而已。

    解决的问题:应对多系列对象构建的变化或多系列(例如:崎岖的山路和平坦的马路属于一个系列不断的变化的创建。

    使用场景:对象不变(比如有3个对象 "路, 房子, 湖" 这些不能有增加或者减少),系列经常变,并且比较多(”路“对象 包含崎岖的山路和平坦的马路等

     

     

    针对上图用代码表示:

        public abstract class AbstractProductA
        {
    
        }
    
        public abstract class AbstractProductB
        {
    
        }
    
        public abstract class AbatractFactory
        {
            public abstract AbstractProductA CreateAbstractProductA();
    
            public abstract AbstractProductB CreateAbstractProductB();
        }
    
        public class ConcreteAbstractProductA : AbstractProductA
        {
    
        }
    
        public class ConcreteAbstractProductB : AbstractProductB
        {
    
        }
    
        //实例1
        public class ConcreteFactroy1 : AbatractFactory
        {
            public override AbstractProductA CreateAbstractProductA()
            {
                return new ConcreteAbstractProductA();//ProductA1
            }
    
            public override AbstractProductB CreateAbstractProductB()
            {
                return new ConcreteAbstractProductB();//ProductB1
            }
        }
    
        //实例2
        public class ConcreteFactroy2 : AbatractFactory
        {
            public override AbstractProductA CreateAbstractProductA()
            {
                return new ConcreteAbstractProductA();//ProductA2
            }
    
            public override AbstractProductB CreateAbstractProductB()
            {
                return new ConcreteAbstractProductB();//ProductB2
            }
        }
    
        //Client
        public class ClientManager
        {
            public AbatractFactory m_abatractFactory;
    
            public ClientManager(AbatractFactory abatractFactory)
            {
                m_abatractFactory = abatractFactory;
            }
    
            public AbstractProductA abstractProductA;
            public AbstractProductB abstractProductB;
    
            public void BuildProduct()
            {
                abstractProductA = m_abatractFactory.CreateAbstractProductA();
    
                abstractProductB = m_abatractFactory.CreateAbstractProductB();
            }
        }
    
        public class Operator
        {
            //实例出不同的实例
            public void TestFactory()
            {
                ClientManager client1Manager = new ClientManager( new ConcreteFactroy1());
                client1Manager.BuildProduct();
    
                ClientManager client2Manager = new ClientManager(new ConcreteFactroy2());
                client2Manager.BuildProduct();
            }
        }

     

     

  • 相关阅读:
    Node入门--事件模块
    Node入门--1--module&require
    Node入门--1-->Hello World
    文件上传(StringMVC)
    StringMVC
    Spring基础
    手动添加日期到mysql数据库
    aspectj 注解
    HandlerMapping执行过程。。。
    在考试我打
  • 原文地址:https://www.cnblogs.com/NetBelieve/p/3599644.html
Copyright © 2011-2022 走看看