zoukankan      html  css  js  c++  java
  • 【Unity3D与23种设计模式】工厂方法模式(Factory Method)

    GoF中定义:

    “定义一个可以产生对象的接口,但是让子类决定要产生哪一个类的对象。工厂方法模式让类的实例化程序延迟到子类中实施”

    当类的对象产生时,若出现下列情况:

    1.需要复杂的流程

    2.需要加载外部资源,如从网络、存储设备、数据库

    3.有对象上限

    4.可重复利用

    建议使用工厂方法模式来实现一个工厂类。

    public abstract class Product { }
    
    public class ConcreteProductA : Product {
        public ConcreteProductA() {
            Debug.Log("生成对象类A");
        }
    }
    
    public class ConcreteProductB : Product {
        public ConcreteProductB() {
            Debug.Log("生成对象类B");
        }
    }
    interface Creator_GenericMethod {
        Product FactoryMethod<T>() where T : Product,new();
    }
    
    public class ConcreteCreator_GenericMethod : Creator_GenericMethod {
        public ConcreteCreator_GenericMethod() {
            Debug.Log("产生工厂:ConcreteCreator_GenericMethod");
        }
    
        public Product FactoryMethod<T>() where T : Product,new() {
            return new T();
        }
    }
    //测试类
    public class FactoryMethodTest {
        Product theProduct = null;
    
        void UnitTest() {
            Creator_GenericMethod theCreatorGM = new ConcreteCreator_GenericMethod();
            theProduct = theCreatorGM.FactoryMethod<ConcreteProductA>();
            theProduct = theCreatorGM.FactoryMethod<ConcreteProductB>();
        }
    }
    //执行结果
    产生工厂:ConcreteCreator_MethodType
    生成对象类A
    生成对象类B

    工厂方法模式的优点是

    将类群组对线的产生流程整合与同一个类下实现

    并提供唯一的方法,让项目内的“对象产生流程”更加独立

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

  • 相关阅读:
    指针和引用的区别
    c++空指针 和 野指针
    strcpy源码实现方式
    函数的分文件编写
    哈夫曼编码实现
    错误:The selected wizard could not be started Plug-in com.genuitec.eclipse.j2ee.ui was unable to load class com.genuitec.eclipse.j2ee.ui.wizard.WebProjectWizard
    sql server,mysql 和navicat for mysql的区别
    MySQL 5.7
    sql server 2017
    Download
  • 原文地址:https://www.cnblogs.com/fws94/p/7218590.html
Copyright © 2011-2022 走看看