我的简单工厂模式设计模式02.docx
- 文档编号:27389683
- 上传时间:2023-06-30
- 格式:DOCX
- 页数:21
- 大小:40.56KB
我的简单工厂模式设计模式02.docx
《我的简单工厂模式设计模式02.docx》由会员分享,可在线阅读,更多相关《我的简单工厂模式设计模式02.docx(21页珍藏版)》请在冰豆网上搜索。
我的简单工厂模式设计模式02
1、定义
简单工厂模式(SimpleFactoryPattern)属于类的创建型模式,又叫静态工厂方法模式(StaticFactoryMethodPattern),但不属于23种GOF设计模式之一,是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
2、基本简介
简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。
该模式中包含的角色及其职责:
工厂(Creator)角色
简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。
工厂类的创建产品类的方法可以被外界直接调用,创建所需的产品对象。
抽象产品(Product)角色
简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(ConcreteProduct)角色
是简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例。
UML图(来自XX百科)
特点、:
1、只有一个工厂(具体的,没有抽象)
2、只生产一种产品(抽象的产品)
3、这种产品可以有多种具体产品类型(派生)
工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如Aa=newA()工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。
比如:
在控制台输入两个数还有要进行的是:
+、-、*、/中的哪一种运算,那么应该怎么写呢?
classProgram
{
staticvoidMain(string[]args)
{
Console.WriteLine("请输入第一个数字");
inta=int.Parse(Console.ReadLine());
Console.WriteLine("请输入第二个数字");
intb=int.Parse(Console.ReadLine());
Console.WriteLine("请输入运算符号");
stringop=Console.ReadLine();
intresult;
//////////////////////////////
Computercom=null;
com=SimpleFactory.LoadComputer(op);
com.NumberA=a;
com.NumberB=b;
result=com.Result;
//////////////////////////////
Console.WriteLine("{0}{1}{2}={3}",a,op,b,result);
}
}
publicstaticclassSimpleFactory
{
///
///简单的工厂的方法
///*封装了对象实例创建的复杂度
///
///
///
publicstaticComputerLoadComputer(stringop)
{
Computercom=null;
switch(op)
{
case"+":
com=newAddComputer();
break;
case"-":
com=newJianComputer();
break;
case"*":
com=newChenComputer();
break;
case"/":
com=newChuComputer();
break;
case"^":
com=newPowComputer();
break;
default:
com=newAddComputer();
break;
}
returncom;
}
}
///
///运算
///
publicabstractclassComputer
{
protectedint_NumberA;
publicintNumberA
{
get{return_NumberA;}
set{_NumberA=value;}
}
protectedint_NumberB;
publicintNumberB
{
get{return_NumberB;}
set{_NumberB=value;}
}
///
///子类必须完成的功能:
计算结果并返回结果
///
publicabstractintResult
{
get;
}
}
publicclassAddComputer:
Computer
{
publicoverrideintResult
{
get
{
returnbase._NumberA+base._NumberB;
}
}
}
publicclassJianComputer:
Computer
{
publicoverrideintResult
{
get
{
returnbase._NumberA-base._NumberB;
}
}
}
publicclassChenComputer:
Computer
{
publicoverrideintResult
{
get
{
returnbase._NumberA*base._NumberB;
}
}
}
publicclassChuComputer:
Computer
{
publicoverrideintResult
{
get
{
if(base._NumberB==0)
{
thrownewArgumentException("被除数不能为零");
}
returnbase._NumberA/base._NumberB;
}
}
}
publicclassPowComputer:
Computer
{
publicoverrideintResult
{
get
{
return(int)Math.Pow(base._NumberA,base._NumberB);
}
}
}
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
∙13
∙14
∙15
∙16
∙17
∙18
∙19
∙20
∙21
∙22
∙23
∙24
∙25
∙26
∙27
∙28
∙29
∙30
∙31
∙32
∙33
∙34
∙35
∙36
∙37
∙38
∙39
∙40
∙41
∙42
∙43
∙44
∙45
∙46
∙47
∙48
∙49
∙50
∙51
∙52
∙53
∙54
∙55
∙56
∙57
∙58
∙59
∙60
∙61
∙62
∙63
∙64
∙65
∙66
∙67
∙68
∙69
∙70
∙71
∙72
∙73
∙74
∙75
∙76
∙77
∙78
∙79
∙80
∙81
∙82
∙83
∙84
∙85
∙86
∙87
∙88
∙89
∙90
∙91
∙92
∙93
∙94
∙95
∙96
∙97
∙98
∙99
∙100
∙101
∙102
∙103
∙104
∙105
∙106
∙107
∙108
∙109
∙110
∙111
∙112
∙113
∙114
∙115
∙116
∙117
∙118
∙119
∙120
∙121
∙122
∙123
∙124
∙125
∙126
∙127
∙128
∙129
∙130
∙131
∙132
∙133
∙134
∙135
∙136
∙137
∙138
∙139
∙140
∙141
∙142
∙143
∙144
∙145
∙146
∙147
∙148
∙149
∙150
∙151
∙152
∙153
∙154
∙155
∙156
∙157
∙158
∙159
∙160
∙161
∙162
∙163
∙1
∙2
∙3
∙4
∙5
∙6
∙7
∙8
∙9
∙10
∙11
∙12
∙13
∙14
∙15
∙16
∙17
∙18
∙19
∙20
∙21
∙22
∙23
∙24
∙25
∙26
∙27
∙28
∙29
∙30
∙31
∙32
∙33
∙34
∙35
∙36
∙37
∙38
∙39
∙40
∙41
∙42
∙43
∙44
∙45
∙46
∙47
∙48
∙49
∙50
∙51
∙52
∙53
∙54
∙55
∙56
∙57
∙58
∙59
∙60
∙61
∙62
∙63
∙64
∙65
∙66
∙67
∙68
∙69
∙70
∙71
∙72
∙73
∙74
∙75
∙76
∙77
∙78
∙79
∙80
∙81
∙82
∙83
∙84
∙85
∙86
∙87
∙88
∙89
∙90
∙91
∙92
∙93
∙94
∙95
∙96
∙97
∙98
∙99
∙100
∙101
∙102
∙103
∙104
∙105
∙106
∙107
∙108
∙109
∙110
∙111
∙112
∙113
∙114
∙115
∙116
∙117
∙118
∙119
∙120
∙121
∙122
∙123
∙124
∙125
∙126
∙127
∙128
∙129
∙130
∙131
∙132
∙133
∙134
∙135
∙136
∙137
∙138
∙139
∙140
∙141
∙142
∙143
∙144
∙145
∙146
∙147
∙148
∙149
∙150
∙151
∙152
∙153
∙154
∙155
∙156
∙157
∙158
∙159
∙160
∙161
∙162
∙163
3、优缺点:
优点
工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。
而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。
缺点
由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。
当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;
这些缺点在工厂方法模式中得到了一定的克服。
使用场景
工厂类负责创建的对象比较少;
客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;
由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 简单 工厂 模式 设计 02