博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2.设计模式-Abstract Factory 抽象工厂模式
阅读量:4561 次
发布时间:2019-06-08

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

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

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

使用场景:对象不变(比如有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();        }    }

 

 

 

 

 

转载于:https://www.cnblogs.com/NetBelieve/p/3599644.html

你可能感兴趣的文章
团体程序设计天梯赛-练习集L1-002. 打印沙漏
查看>>
笔试面试题总结
查看>>
新认识:SDF数据库
查看>>
【译】在Asp.Net中操作PDF - iTextSharp - 利用列进行排版(转)
查看>>
利用qt打开一张图片并转成灰度矩阵
查看>>
Mysql基础
查看>>
(转)JavaScript正则表达式符号详解
查看>>
python 中的 try/except/else/finally语句
查看>>
你真的理解devDependencies和dependencies区别吗?
查看>>
const与指针的运用
查看>>
[BZOJ2730][HNOI2012]矿场搭建 点双 割点
查看>>
深夜的讨论——关于团队分工,以及我想到了一些关于国企的事情
查看>>
多校第4场1012
查看>>
年终总结,我为什么离开舒适区?
查看>>
BZOJ2143 飞飞侠 & [校内NOIP2018模拟20181026] 最强大脑
查看>>
Linux/Mac 挂载远程服务器目录到本地
查看>>
1,实现在线答题 2,答题结束后可以判断对错 3,并将错题的结果保存起来。...
查看>>
JS中原始值和引用值的储存方式
查看>>
初学C#的简单编程题合集(更新)
查看>>
Linux学习闲谈(一)——Shell基本操作与命令
查看>>