简单工厂VS工厂方法

设计模式

通过学习《大话设计模式》和《GOF》可以总结出设计模式是一套在面向对象编程中被反复使用、多数人熟悉的代码设计经验的总结。通过使用设计模式可重用代码,保证代码的可靠性和可移植性。设计模式是面向对象编程的基石,合理的使用设计模式对开发人员的代码编写起着重要作用。

简单工厂

简单工厂类:对于工厂一词,应该很熟悉,工厂主要负责生产各种具体产品.作为客户端,我们只需要告诉工厂,我们具体想要哪种产品就可以了.工厂类通过我们所给信息,进行动态选择生产.但是工厂和其他运算子类的耦合性过高,这不是我们想要的.

运算类:运算类作为各种子类的父类出现,它拥有所有子类的属性和方法.当需要添加子类,只需要添加子类就可以,这样遵循了扩展开放原则,但在工厂类中由于使用多选择结构,会导致对工厂类进行修改,这样就违背了"修改关闭"原则

子类:子类主要负责自己内部实现的具体细节,由此可以体现出"高内聚"

多态的体现:面向对象的三大机制,不得不提的是多态机制,下面通过代码让我们具体来看"多态"在简单工厂中的应用,相信看到代码,很多人都会有所领悟多态在自己的面向对象编码中经常使用,但是多态的机制是建立在抽象中实现的

classOperationFactory

{

public static OperationcreateOperation(string operate)

{

Operation oper = null;

switch (operate)

{

case"+":

oper = newOperationAdd();//oper是父类,但可以根据客户端传来的参数,动态选择生成子类(加)

break;

case"-":

oper = newOperationSub();//oper是父类,但可以根据客户端传来的参数,动态选择生成子类(减)

break;

case"*":

oper = newOperationMul();//oper是父类,但可以根据客户端传来的参数,动态选择生成子类(乘)

break;

case "/":

oper = newOperationDiv(); //oper是父类,但可以根据客户端传来的参数,动态选择生成子类(除)

break;

}

return oper;

}

}

工厂方法模式

工厂方法模式定义:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个雷的实例化延迟到其子类.

工厂类:此时这个工厂类也像运算类作为一个父类出现(或者是接口),它拥有子类公共的方法,而它的职责与简单工厂担当的职责所以不同,因为它是父类,其下可以扩展多个子类.

工厂子类:每个工厂子类,负责生产自己的产品(加法类/减法类…)这里,仅负责生产,而生产的细节还是由具体子类内部去实现,也就是说无论你是父类工厂还是子类工厂,永远负责生产对象的责任.

运算类与运算子类功能与简单工厂中一样

简单工厂PK工厂方法

在简单工厂中已经提到了简单工厂有几个缺点1.工厂类负责过多的生产(与具体子类耦合性过高) 2.当添加运算子类的时候需要修改工厂类,违背了"修改关闭原则" 出于这种需求,伟大的人类对简单工厂进行改造,出现了工厂方法,工厂方法将简单工厂中的工厂类升级为工厂父类,然后由各种具体工厂子类去集成父类,避免了添加子类时出现的修改工厂类父类,也就是说符合了"扩展开放"原则,而每一个具体工厂只负责自己相关产品的生产这样也符合了"单一职责",而简单工厂中的多态体现提炼到了客户端

这是工厂方法中的工厂类和工厂子类的具体代码

//工厂接口

interface IFactory

{

Operation CreateOperation();

}

//加法工厂

class AddFactory::IFactory

{

public Operation CreateOperation()

{

return new OperationAdd();

}

}

//减法工厂

//乘法工厂

//除法工厂

下面是客户端代码

class Client

{

static void Main(string[] args)

{

IFactory factory =new AddFactory(); //由客户端来决定实例化哪个具体工厂

Operation oper =factory.CreateOperation(); //运算类父类来接受工厂子类的返回值

oper.numberA = 1;

oper.numberB = 2;

oper.GetResult();

}

}

PS:从学习设计模式的角度来说,我只是学会了怎样使用上面介绍的两种设计模式,也就是说仅局限于对“以封装好的设计模式学习应用阶段”对真正领悟设计模式的内涵还欠缺很多,希望路过的朋友脚下留情!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值