设计模式-Template Method模式

什么是模板模式?

一般写程序时,经常会出现很多不同的业务代码其中某些具体实现不同,但是还是有很多逻辑或者其他一些实现相同。
如果我们仅仅只是复制粘贴这些共同部分,那么一旦发现这些代码有问题,就要回头检查所有使用了这些代码的部分。
正确的处理方式是,抽取出所有代码的共同部分,将这些共同部分放到同一个抽象类中,将实现不同的具体方法声明为抽象方法,让子类自己去实现自己的细节。
在这里插入图片描述

举个栗子

我们要打印字符和字符串,每个都是打印5遍,但是开始和结束部分的特殊符号不同。
那么我们就应该将 开始、打印、结束,这3个具体实现不同的方法在模板方法中声明为抽象方法,让子类自己去实现自己的细节实现。
然后将这些共同部分:先打印开始符号,在打印5遍字符/字符串,最后打印结束特殊符在抽象父类中实现。
子类继承父类时就不需要再重写父类这个已经实现的共同方法了。
在Main函数里面,我们用父类来声明子类,这样在调用子类方法的时候,子类自己实现的方法则使用子类自己实现的,子类没有重写的父类已经实现的方法则直接调用父类已经实现的方法。

在这里插入图片描述

里氏替换原则

这个原则在继承里面非常重要,所以一定要理解,一定要记住。
里氏替换原则(The Liskov Substitution Principle,LSP):无论在父类类型的变量中保存哪个子类的实例,程序都可以正常工作。
LSP并非仅限于模板模式,是通用的继承原则。

类的层次和抽象类- 父类对子类的要求

子类角度理解:

  • 在子类中可以使用父类中定义的方法
  • 可以通过在子类中增加的方法实现新的功能
  • 在子类中重写父类的方法可以改变程序的行为

父类角度理解:

  • 期待子类去实现抽象方法
  • 要求子类实现抽象方法

也就是说,子类具有实现在父类中所声明的抽象方法的责任。这种责任被称为“子类责任”。

猜你喜欢

转载自blog.csdn.net/qq_23128065/article/details/90545004