简单工厂模式

来源:互联网 发布:ubuntu snmp配置 编辑:程序博客网 时间:2024/06/01 09:31
上两天看了大话设计模式这本书。由于看的太快。今天看完了,合上书,一想,什么都没留下。想想还是写下来可能理解的会比较透彻。
按照我对这本书的理解进行写吧,和书上的差不多,只是自己对书的理解
以计算器来讲解简单工厂模式:
封装:
写一个计算器,可以和面向对象无关,就可以写出来。但是为了和面向对象扯上关系。同时也为了增加代码的质量(至于什么质量,下面会提到),我们要思考下,我们能否让和控制台无关的程序分离出来,这里面也就是用到了面向对象的封装性。同时可以增加代码的复用性(这就提高了代码的质量,可以在别的地方用).思考后,操作是和控制台无关的。所以可以定义一个操作类Operation,里面写一个GetResult(doublenumberA,double numberB,stringoperation)函数,在主函数中调用这个函数,并传入相应的参数就OK了。
紧耦合和松耦合:
通过分析,上面的代码存在一定的缺陷,比如要增加一个开方的运算,则需要对有加减乘除操作的代码中加入开方操作。这样耦合度太大。这样说,体现不出这样的缺陷在哪。举个例子:假如你要为一个公司的薪资管理系统做维护,原来只有技术人员(月薪),市场销售人员(底薪+提成),经理(年薪+股份)三种运算算法,现在要增加兼职工作人员(时薪),如果按照上面的写法,就必须把包含原三中算法的运算都给你,让你修改,如果你对工资不满意,那你岂不是想改哪个就改哪个。
此时就用到了继承,也就是定义一个运算类Operation,得到运算数据numberA和numberB,并且定义一个虚函数GetResult(),在操作类中实现,在定义加减乘除四个类。但是这四个类分别怎么用呢?这就是我们下面要讲的简单工厂模式(也就是定义一个操作工厂,对他们进行操作,是不是很形象)。
简单工厂模式:
class OperationFactory
{
static Operation createOperate(char operate)
{
Operatin oper;
switch(operate)
{
case '+':
  oper = new OperationAdd();
break;
.....
}
}
}

客户端代码:
Operation  oper;
oper = OperationFactory.createOperate(+);//加操作
oper.numberA =25;
oper.numberA = 29;
double result =oper.GetResult();

btw:以上代码并没有编译和运行,只是说一下思想,思想有了,用什么语言都是浮云。谢谢
0 0