设计模式学习之Factory模式

最近开始做C++方面的项目,虽然对于普通的编码和C++的开发没有什么问题,但是感觉在设计方面还是比较欠缺,所以找了本设计模式的书开始学习,随手记下来,大家也可以学习下。

引用:设计模式之于面向对象系统的设计和开发的作用就如同数据结构之于面向过程开发的作用一般,面向对象系统的分析和设计实际上追求的就两点:一是高内聚,二是低耦合。这也是软件设计所追求的,因此无论是OO中的封装、多态、继承,还是设计模式的原则和实例都是为这个目标努力的。在面向对象的设计和开发中,我们会用到封装、多态、继承、面向接口编程、优先使用组合而不是继承、将抽象和实现分离的思想等,在设计模式中也能看到这些的影子,特别是组合(委托)和继承的差异带来系统在耦合性上的差别,在设计模式中会涉及。

在面向对象系统设计中经常遇到以下两个问题:1.为了提高内聚和松耦合,经常会遇到抽象出公共接口以形成抽象基类或者接口,可以通过声明指向基类的指针来指向实际的子类达到多态,在N多子类时,不得不在用到子类的地方编写诸如new XXX的代码,带来了2个问题,1是客户程序员必须知道实际子类的名称,2是程序的扩展性和维护性变得越来越困难;2.父类中并不知道具体要实例化哪一个具体的子类;这样就引出了Factory模式的2个最重要的功能:

1、定义创建对象的接口,封装了对象的创建;

2、使得具体化类的工作延迟到子类中。

通常使用Factory模式来解决上面的2个问题,在第一个问题中,我们经常就是声明一个创建对象的接口,并封装了对象的创建过程;Factory这里类似于一个真正意义上的工厂;第二个问题中,需要提供一个对象创建对象的接口,并在子类中提供其具体实现;

这种情况在系统研发中经常用到,但这并不是Factory模式的最大威力;Factory模式不单是提供了创建对象的接口其,其最重要的是延迟了子类的实例化;

上图中的Factory并不是只是为了封装对象的创建,而是要把对象的创建放到子类中实现;Factory中只是提供了对象创建的接口,其实现将放在Factory的子类ConcreteFactory中进行。

Factory模式同时带来2个问题:

1.如果每一个具体的ConcreteProduct类的实例化提供一个函数体,那么可能不得不在系统中添加一个方法来处理新建的ConcreteProduct,这样Factory的接口就无法封闭;当然我们可以通过创建一个Factory的子类通过多态来实现,但是也是以新建类为代价的;

2.在实现中通过参数化工厂方法,即给FactoryMethod()传递一个参数用于决定创建哪个具体的Product;

可以看出Factory对于对象的创建给予开发人员提供了良好的实现策略,但是Factory模式仅仅局限于一类类,如果需要为不同的类提供一个对象创建接口,那就需要用到AbstractFactory模式了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风行踩火轮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值