zoukankan      html  css  js  c++  java
  • 【Unity与23种设计模式】抽象工厂模式(Abstract Factory)

    GoF中定义:

    “提供一个能够建立整个类群组或有关联的对象,而不必指明它们的具体类。”

    意思就是

    根据不同的执行环境产生不同的抽象类子类

    抽象工厂模式经常在面试中会涉及到

    下面的例子为工厂1和工厂2

    两个工厂都可以生成产品A和B

    但是两个工厂工艺不同

    所以工厂1只能生产产品A1和B1

    工厂2只能生产产品A2和B2

    //可生成各抽象成品对象的操作
    public abstract class AbstractFactory{
        public abstract AbstractProductA CreateProductA();
        public abstract AbstractProductB CreateProductB();
    }
    
    //实现可构建具体成品对象的操作1
    public class ConcreteFactory1 : AbstractFactory {
        public ConcreteFactory1() { }
    
        public override AbstractProductA CreateProductA()
        {
            return new ProductA1();
        }
        public override AbstractProductB CreateProductB()
        {
            return new ProductB1();
        }
    }
    
    //实现可构建具体成品对象的操作2
    public class ConcreteFactory2 : AbstractFactory {
        public ConcreteFactory2() { }
    
        public override AbstractProductA CreateProductA()
        {
            return new ProductA2();
        }
        public override AbstractProductB CreateProductB()
        {
            return new ProductB2();
        }
    }
    //成品对象类型A接口
    public abstract class AbstractProductA { }
    
    //成品对象类型A1
    public class ProductA1 : AbstractProductA {
        public ProductA1() {
            Debug.Log("生成对象类型A1");
        }
    }
    
    //成品对象类型A2
    public class ProductA2 : AbstractProductA
    {
        public ProductA2()
        {
            Debug.Log("生成对象类型A1");
        }
    }
    
    //成品对象类型B接口
    public abstract class AbstractProductB { }
    
    //成品对象类型A1
    public class ProductB1 : AbstractProductB
    {
        public ProductB1()
        {
            Debug.Log("生成对象类型A1");
        }
    }
    
    //成品对象类型A2
    public class ProductB2 : AbstractProductB
    {
        public ProductB2()
        {
            Debug.Log("生成对象类型A1");
        }
    }
    //测试类
    public class TestAbstractFactory {
        void UnitTest() {
            AbstractFactory Factory = null;
    
            //工厂1
            Factory = new ConcreteFactory1();
            Factory.CreateProductA();
            Factory.CreateProductB();
    
            //工厂2
            Factory = new ConcreteFactory2();
            Factory.CreateProductA();
            Factory.CreateProductB();
        }
    }
    //测试结果
    //生成对象类型A1
    //生成对象类型B1
    //生成对象类型A2
    //生成对象类型B2

    文章整理自书籍《设计模式与游戏完美开发》 菜升达 著

  • 相关阅读:
    python的配置
    SSI服务端包含技术
    IDEA使用过程中常见小问题
    IDEA配置maven,jdk,编码
    不使用SwitchHosts修改C:WindowsSystem32driversetchosts文件
    webstorm打开一个门户工程流程
    安装nginx流程
    webstorm配置node.js
    Linux的inode与block
    使用vsftpd 搭建ftp服务
  • 原文地址:https://www.cnblogs.com/fws94/p/7490305.html
Copyright © 2011-2022 走看看