设计模式 - 装饰模式、原型模式、模板模式、享元模式

相似点

这几个从名字上都看出有复用的意思,
装饰模式:通过对A装饰获得B,B拥有A的功能;
原型模型:通过clone A获得B,B也有A的功能;
模板模式:B通过继承A,B拥有A的功能;
享元模式:其实享元模式不应该和其他三个在一起比较,因为其他三个倾向于复用,而享元倾向于共用;享元将和单例进行比较;
下面我们将分析装饰模式、原型模式、模板模式进行比较。

UML


装饰模式模板模式原型模式


装饰模式

当需要从一个原始类A衍生出类B时,类B不但有类A的功能,而且可能还会增加其他功能,在类A设计的时候可能根本没有想到会有类B。这个在UI中应该应用得最多,我们可以在原生Button的基础上重新设计出自己的Button,新设计的Button不但有原生Button的所有功能,而且可能我们还会设计的更漂亮。在这里类A和类B都可以生成对象,B is a A,但是类B在A基础上扩展了很多功能。


模板模式

模板模式和装饰模式很相似,也是类B继承于类A,只是类B不会对类A定义的功能进行扩展,而且一般情况下类A是抽象类,不能定义对象。
模板模式是非常常用的,如果你做了一段时间的面向对象编程,并且写过类继承的代码,那么你百分之八十写过模板的设计模式,只是写的时候不知道这个简单的写法竟然是一个设计模式。有没有曾经写过类似这样的继承结构,定义了一个基类,它有一些virtual函数又有一些nonevirtual函数,继承类肯定要对virtual函数进行重写,当然对nonevirtual函数不能重写,这就是模板模式。
模板模式是将一些固定的流程或者业务在基类中定义好(以nonevirtual存在,因为继承类也要使用这些方法),不固定的在继承类中去实现(当然这些是virtual方法),这样就达到了最大限度的重用代码,但是还有更重要的作用:
1. 基类定义好了业务流程,这个业务流程就是nonevirtual函数进行支撑的,因为nonevirtual函数的业务逻辑无法修改,继承类只需要根据自己的独特性质实现virtual函
数;


原型模式

原型模式虽然也是复用,但是与装饰和模板模式通过继承达到复用不一样,原型模式是复用数据。装饰模式和模板模式是代码的复用,而原型模式运行是创建的对象的数据复用。所以一般原型模式的类中一般都会有clone函数。


总结

模板模式:最常用,类A定义了接口,类B继承A,然后实现其中的接口;
装饰模式:用于继承并扩展,类A是已经设计好的某个类,类B通过继承A拥有了A的所有性质,然后又在基础上进行了功能扩展;
原型模式:它是运行阶段对对象数据的复用;
享元模式:它不是复用而是共用,它和单例是同类型的模式;

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值