设计模式 - 模板
模板方法模式:定义了一个操作中的算法骨架,将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 2、 模板方法模式是通过把不变行为搬到超类,去除子类中的重复代码来体现它的优势,当不变的和可变的行为在方法的子类实现中混合在一起的时候,不变的行为就会在子类中重复出现。我们通过模板方法模式把这些行为搬移到单一(基类中)的地方,这样就帮助子类摆脱重复的不变行为的纠缠。
demo如下:
首先我们先新建一个模板类Templet,定义算法的骨架:
Templet.h
Templet.cpp
其次,我们再新建两个继承自Templet的两个子类,并实现父类中的几个虚函数:
TestTempletWithA.h
TestTempletWithA.cpp
TestTempletWithB.h
TestTempletWithB.cpp
这俩个子类都继承了父类的几个虚函数,但俩个子类中实现虚函数功能不同,调用时用多态,具体看main函数:
在这里我用的demo非常简单,但是设计模式最重要的是思想,下面我们看策略模式:
1—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
2—具体策略角色:包装了相关的算法和行为。
3—环境角色:持有一个策略类的引用,最终给客户端调用。
4−策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
我们写一个demo来实现两个数的加,减,乘,除
首先我们新建一个抽象接口类Strategy:
Strategy.h
两个数相加类:
TestStrategyWithAdd.h
TestStrategyWithAdd.cpp
两个数相减类:
TestStrategyWithSub.h
TestStrategyWithSub.cpp
两个数相乘类:
TestStrategyWithMul.h
TestStrategyWithMul.cpp
两个数相除类:
TestStrategyWithDiv.h
TestStrategyWithDiv.cpp
我们用4个子类分别将抽象类具体化,于是我们还要写一个管理这4个子类的管理类Manager:
Manager.h
Manager.cpp
在这个管理类中我们可以看到,依然是用了多态
最后我们看一下main函数
我们看到,在使用时只需要与管理类直接交互。