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();
            }
        }

     

     

  • 相关阅读:
    使用exe4j将java项目打成exe执行程序
    使用exe4j将java项目打成exe执行程序
    使用exe4j将java项目打成exe执行程序
    使用exe4j将java项目打成exe执行程序
    Java 数组 之 二维数组
    Java 数组 之 二维数组
    自定义右键菜单,禁用浏览器自带的右键菜单[右键菜单实现--Demo]
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
  • 原文地址:https://www.cnblogs.com/NetBelieve/p/3599644.html
Copyright © 2011-2022 走看看