博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Unity与23种设计模式】抽象工厂模式(Abstract Factory)
阅读量:2214 次
发布时间:2019-05-07

本文共 1881 字,大约阅读时间需要 6 分钟。

 

GoF中定义:

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

 

意思就是

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

 

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

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

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

但是两个工厂工艺不同

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

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

//可生成各抽象成品对象的操作public abstract class AbstractFactory{    public abstract AbstractProductA CreateProductA();    public abstract AbstractProductB CreateProductB();}//实现可构建具体成品对象的操作1public class ConcreteFactory1 : AbstractFactory {    public ConcreteFactory1() { }    public override AbstractProductA CreateProductA()    {        return new ProductA1();    }    public override AbstractProductB CreateProductB()    {        return new ProductB1();    }}//实现可构建具体成品对象的操作2public class ConcreteFactory2 : AbstractFactory {    public ConcreteFactory2() { }    public override AbstractProductA CreateProductA()    {        return new ProductA2();    }    public override AbstractProductB CreateProductB()    {        return new ProductB2();    }}
//成品对象类型A接口public abstract class AbstractProductA { }//成品对象类型A1public class ProductA1 : AbstractProductA {    public ProductA1() {        Debug.Log("生成对象类型A1");    }}//成品对象类型A2public class ProductA2 : AbstractProductA{    public ProductA2()    {        Debug.Log("生成对象类型A1");    }}//成品对象类型B接口public abstract class AbstractProductB { }//成品对象类型A1public class ProductB1 : AbstractProductB{    public ProductB1()    {        Debug.Log("生成对象类型A1");    }}//成品对象类型A2public 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

 

 

 

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

转载地址:http://uvgyb.baihongyu.com/

你可能感兴趣的文章
深入理解JVM虚拟机9:JVM监控工具与诊断实践
查看>>
深入理解JVM虚拟机10:JVM常用参数以及调优实践
查看>>
深入理解JVM虚拟机12:JVM性能管理神器VisualVM介绍与实战
查看>>
深入理解JVM虚拟机13:再谈四种引用及GC实践
查看>>
Spring源码剖析1:Spring概述
查看>>
Spring源码剖析2:初探Spring IOC核心流程
查看>>
Spring源码剖析5:JDK和cglib动态代理原理详解
查看>>
Spring源码剖析6:Spring AOP概述
查看>>
Spring源码剖析7:AOP实现原理详解
查看>>
Spring源码剖析8:Spring事务概述
查看>>
Spring源码剖析9:Spring事务源码剖析
查看>>
重新学习Mysql数据库1:无废话MySQL入门
查看>>
探索Redis设计与实现2:Redis内部数据结构详解——dict
查看>>
探索Redis设计与实现3:Redis内部数据结构详解——sds
查看>>
探索Redis设计与实现4:Redis内部数据结构详解——ziplist
查看>>
探索Redis设计与实现6:Redis内部数据结构详解——skiplist
查看>>
探索Redis设计与实现5:Redis内部数据结构详解——quicklist
查看>>
探索Redis设计与实现8:连接底层与表面的数据结构robj
查看>>
探索Redis设计与实现7:Redis内部数据结构详解——intset
查看>>
探索Redis设计与实现9:数据库redisDb与键过期删除策略
查看>>