C工厂模式Word下载.docx
- 文档编号:14869167
- 上传时间:2022-10-25
- 格式:DOCX
- 页数:11
- 大小:101.94KB
C工厂模式Word下载.docx
《C工厂模式Word下载.docx》由会员分享,可在线阅读,更多相关《C工厂模式Word下载.docx(11页珍藏版)》请在冰豆网上搜索。
那个操作移交一个具体的类,由它去负责依照咱们的条件创建具体类的实例,也确实是下面要说的“简单工厂模式”。
概念:
专门概念一个类来负责创建其他类的实例,被创建的实例通常都具有一起的父类或接口。
简单工厂模式又称为静态工厂方式(StaticFactoryMethod)模式,属于类的创建型模式,通常依照一个条件(参数)来返回不同的类的实例。
用意:
提供一个类,由它负责依照必然的条件创建某一具体类的实例
参与者:
工厂角色(Creator)
是简单工厂模式的核心,它负责实现创建所有具体产品类的实例。
工厂类可以被外界直接调用,创建所需的产品对象。
抽象产品角色(Product)
是所有具体产品角色的父类,它负责描述所有实例所共有的公共接口。
具体产品角色(ConcreteProduct)
继承自抽象产品角色,一般为多个,是简单工厂模式的创建目标。
工厂类返回的都是该角色的某一具体产品。
UML图:
现实生活中例子:
每次参加不同的聚会或与不同的人见面,可能穿的衣服是不一样的,比如,你今天上午要与你的一个新客户见面,你可能会对你的妻子说:
妻子,给拿件商务装(参数),我要去见我的一个客户,你妻子(工厂类)接到你的请求(商务装参数)后,从衣柜中掏出一件商务装(具体产品),交给你。
整个进程就完成了。
分析:
你可能依照不同的条件,要的衣服是不一样的,但要的衣服都是已经在你的衣柜中存在的。
而且,每件上衣它们都属于同一种抽象,即它们能够从一个抽象类或接口中继承,这此衣服各自都有必然特点,这些都是条件。
然后你要的时候,就能够够向你妻子说一种特点,她就会依照那个特点为你效劳了。
这确实是典型的简单工厂模式的应用。
抽象产品类代码
1
oLower())
11
{
12
case
business"
:
13
return
new
BusinessCoat();
14
fashion"
15
FashionCoat();
16
default
17
throw
Exception("
尚未你要的那种衣服"
);
18
}
19
20
21}
再看一下客户在挪用的时候的代码
将取得专门好的解决)
应用情景
工厂类负责创建的对象比较少
客户只明白传入了工厂类的参数,关于始何创建对象(逻辑)不关切
在中,咱们提到,工厂方式模式是的一个延伸,它属于Gof23中设计模式的创建型设计模式。
它解决的仍然是软件设计中与创建对象有关的问题。
它能够更好的处置客户的需求转变。
工厂方式模式(FactoryMethodPattern)
引入
咱们继续来讲"
的问题,咱们在中,将实例化对象的工作推延到了专门负责创建对象的工厂类中,如此,在咱们事前预知的情形下,能够依照咱们的需要动态创建产品类。
可是,咱们的预知是有限的,客户的转变可能是无穷的。
因此,就显现了问题,一旦客户的转变超越了咱们的预知,咱们就必需修改咱们的源代码了。
这是设计模式所不许诺的,如何办呢?
工厂方式模式正是解决此类问题的。
问题:
具体工厂类的创建工作不能满足我们的要求了,创建的工作变化了
哪里变化,封装哪里。
把具体工厂封装起来。
概念
工厂方式模式又称为工厂模式,也叫虚拟构造器(VirtualConstructor)模式或多态工厂模式(PolymorphicFactory),在工厂方式模式中,父类负责概念创建对象的公共接口,而子类那么负责生成具体的对象,如此做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪个类。
用意
概念一个用户创建对象的接口,让子类决定实例化哪个类,工厂方式模式使一个类的实例化延迟到其子类。
参与者
定义产品的接口
具体产品角色(ConcreteProduct)
实现接口Product的具体产品类
抽象工厂角色(Creator)
声明工厂方法(FactoryMethod),返回一个产品
真实的工厂(ConcreteCreator)
实现FactoryMethod工厂方法,由客户调用,返回一个产品的实例
工厂方式模式UML图
现实生活中的例子
为了方便大伙儿明白得,我仍然举穿衣服方面的一个例子。
那个例子与中的那个例子有些不同。
据说清朝有个皇帝穿衣非常的奢侈,每种衣服(具体产品类)由一宫女(具体工厂类)专门负责,如此一来,每增加一种衣服(具体产品类),就要多出一个宫女(具体工厂类),可是他们各负其责,互不阻碍。
皇帝之因此如此做,是因为针对穿衣服这件事来讲,可扩展性是超级强的()。
分析
实现的功能:
能够依照皇帝的要求,动态的创建(由宫女去拿)已存在的具体产品(衣服),若是皇帝的要求太苛刻,这种衣服尚未,只需要增加一个宫女,一个衣服就能够够知足他的要求了。
每一个宫女只负责一种衣服(高内聚),要增加一种衣服,关于以前的所有宫女与衣服来讲,都可不能受到阻碍(设计模式中所期望的)。
说到那个地址,是不是明白了工厂方式模式所能解决的问题及其应用了?
呵呵。
。
你必然在想,比简单工厂模式灵活性高吧。
抽象工厂角色代码
1namespace
FactoryMethod
2{
3
reateInstance("
FactoryMethod."
+
factoryName);
ICoat
coat
=
();
ET提供的反射能够依照类名来创建它的实例,超级方便
由反射想到的:
下面这一段内容不是打算要写的。
如果在具体工厂中,每次new的对象都是一个,而且这些类是继承自抽象产品接口的,那么我们用也可以实现动态的增加具体产品类。
这样来做,在简单工厂模式中最核心的部分----工厂类不要根据传来的条件去动态创建产品类,利用反射机制去创建。
把要实例化的类名放在应用程序配置文件中,呵呵。
这样利用.NET特有的反射就可以用简单工厂模式解决更多的问题了,工厂方法模式的一部分问题也是可以通过“这样的简单工厂模式”解决的,在需要增加具体产品类时,不用增加具体工厂,是不是简单一些呀。
下去试一下。
优势:
基于工厂角色和产品角色的多态性设计是工厂方式模式的关键。
它能够使工厂能够自主确信创建何种产品对象。
而且如何创建一个具体产品的细节完全封装在具体工厂内部,符合高内聚,低耦合。
在系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需修改客户端,也无需修改其他的具体工厂和具体产品,专门好的利用了封装和委托。
缺点:
在添加新产品时,需要编写新的具体产品类(其实这不算一个缺点,因为这是不可幸免的),要增加与之对应的具体工厂类。
应用情景:
类不明白自己要创建哪个对象时
类用它的子类来指定创建哪个对象
当类将创建对象的职责委托给多个帮忙子类中的某一个,而且你希望将哪个帮忙子类是代理者这一信息局部化的时候
工厂方式模式在HTTP通道中的应用,TerryLee在他的中写的超级好,推荐去看一下。
抽象工厂模式(AbstractFactoryPattern)
在前面介绍的两个创建型模式里面,咱们解决的都是有关"
的问题,用它们来幸免显式指定类创建对象。
我写的也超级简单易懂,相信看过的朋友们都应该对、的用意、所能解决的问题及适用情景有必然的了解了。
可是假设要达到灵活运用,何时用,如何用适合还不是看一篇文章就能够解决的问题。
呵呵..这需要你对OO的明白得程度,你的项目开发体会等等许多方面的积存。
一路尽力喔。
好了,咱们言归正传,通过对这两个模式的了解,我们掌握一种思想,就是在创建一个对象时,需要把容易发生变化的地方给封装起来,来控制变化(哪里变化,封装哪里),以适应客户的变动,项目的扩展。
但是,我们在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作,同时由于需求的变化,这“一系列相互依赖的对象”也要改变,如何应对这种变化呢?
如何像、一样绕过常规的"
,然后提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?
可能有人会说,你也可以将这些对象一个一个通过来解决呀?
但是,我们试想,既然是一系列相互依赖的对象,它们是有联系的,每个对象都这样解决,你又如何来保证他们的联系呢?
举一个例子:
Windows桌面主题,当你更换一个桌面主题的时候,系统的开始按钮、任务栏、菜单栏、工具栏等等都变了,而且是一起变的,他们的色调都还很一致,难道类似这样的问题,怎么来解决呢?
它的天敌就是抽象工厂模式。
提供一个创建一系列相关或彼此依托对象的接口,而无需指定它们具体的类。
参考者:
也确实是该模式中的各个类或对象之间的关系:
抽象工厂(AbstractFactory)
声明生成一系列抽象产品的方法
具体工厂(ConcreteFactory)
执行生成一系列抽象产品的方法,生成一系列具体的产品
抽象产品(AbstractProduct)
为这一系列的某一种产品声明接口
具体产品(Product)
定义具体工厂生成的具体产品的对象,实现产品接口
客户(Client)
我们的应用程序客户端(不要理解成人),使用抽象产品和抽象工厂生成对象。
抽象工厂模式UML图
抽象工厂模式在生活中的实例
咱们继续拿怎么穿衣服来讲明那个抽象工厂模式。
就拿你来说吧。
工作了,为了参加一些聚会,肯定有两套或多套衣服吧,比如说有商务装(成套,一系列具体产品)、时尚装(成套,一系列具体产品),乃相当于一个家庭来讲,可能有商务女装、商务男装、时尚女装、时尚男装,这些也都是成套的,即一系列具体产品。
咱们假设一种情形(现实中是不存在的,要不然,无法进入共产主义了,但有利于说明抽象工厂模式),在你的家中,某一个衣柜(具体工厂)只能寄存某一种如此的衣服(成套,一系列具体产品),每次拿这种成套的衣服时也自然要从那个衣柜中掏出了。
用OO的思想去明白得,所有的衣柜(具体工厂)都是衣柜类的(抽象工厂)某一个,而每一件成套的衣服又包括具体的上衣(某一具体产品),裤子(某一具体产品),这些具体的上衣其实也都是上衣(抽象产品),具体的裤子也都是裤子(另
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 工厂 模式