软件设计模式-模板方法设计模式
这个作业属于哪个课程 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/gdgy/2021Softwarecodedevelopmenttechnology/homework/11833 |
这个作业的目标 | 了解设计原则和设计模式 |
- 参考资料
- 郑阿奇《软件秘笈:设计模式那点事》
1设计模式六原则
- 接口隔离原则:用户不需要实现他不需要的接口
- 里氏代换原则:子类应该能完成父类支持的所有行为
- 最小知道原则:对象间的依赖越少越好
- 依赖倒置原则:程序设计不应该依赖实现而依赖其抽象
- 单一职责原则:每一个类最好只完成一项职责
- 开闭原则:程序对拓展开放,而对修改封闭
2设计模式汇总
- 创建型模式:
- 抽象工厂
- 生成器
- 工厂方法
- 原型
- 单例
- 结构型模式:
- 适配器
- 桥接
- 组合
- 装饰
- 外观
- 享元
- 代理
- 行为型模式:
- 责任链
- 命令
- 解释器
- 迭代器
- 中介者
- 备忘录
- 观察者
- 状态
- 策略
- 模板方法
- 访问者
3模板方法设计模式介绍
在父类的一个方法中定义一个总体算法的骨架(模板方法),而将某一些一些步骤延迟到子类中,因为不同的子类实现细节不同。模板方法使得子类可以在不改变算法结构的情况下, 重新定义算法中的某些步骤。
抽象父类负责定义操作中的业务骨架,而把某些具体的实现步骤延迟到子类中去实现。
在JavaWeb中:HttpServlet类中,也遵循这一命名规则,如doGet(),doPost()等方法。
抽象父类至少提供的方法:
- 模板方法:一种通用的处理方式,即模板(总体算法的骨架);模版方法作为模版样式不准子类覆写:用final修饰,不让子类覆盖.
- 抽象方法:一种具体的业务功能实现,由子类完成;使用protected修饰.
注意:
抽象父类提供的模版方法只是定义了一个通用算法,其实现必须依赖子类的辅助。
4模板方法设计模式应用实例
4.1例子一
4.2例子二
准备去学校所要做的工作(prepareGotoSchool)为例,假设需要分三步:穿衣服(dressUp),吃早饭(eatBreakfast),带上东西(takeThings)。学生和老师要做得具体事情肯定有所区别。
抽象类AbstractClass
public abstract class AbstractPerson{
//抽象类定义整个流程骨架
public void prepareGotoSchool(){
dressUp();
eatBreakfast();
takeThings();
} //以下是不同子类根据自身特性完成的具体步骤
protected abstract void dressUp();
protected abstract void eatBreakfast();
protected abstract void takeThings();
}
具体类ConcreteClass
public class Student extends AbstractPerson{
@Override
protected void dressUp() {
System.out.println(“穿校服");
}
@Override
protected void eatBreakfast() {
System.out.println(“吃妈妈做好的早饭");
} @Override
protected void takeThings() {
System.out.println(“背书包,带上家庭作业和红领巾");
}}
public class Teacher extends AbstractPerson{
@Override
protected void dressUp() {
System.out.println(“穿工作服");
}
@Override
protected void eatBreakfast() {
System.out.println(“做早饭,照顾孩子吃早饭");
}
@Override
protected void takeThings() {
System.out.println(“带上昨晚准备的考卷");
}
}
public class Client {
public static void main(String[] args) {
Student student = new Student()
student.prepareGotoSchool();
Teacher teacher = new Teacher()
teacher.prepareGotoSchool();
}
}
4.3总结
-
优点
- 模板方法模式通过把不变的行为搬移到超类,去除了子类中的重复代码。
- 子类实现算法的某些细节,有助于算法的扩展。
- 通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则”。
-
缺点
- 每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
-
适用场景
- 在某些类的算法中,用了相同的方法,造成代码的重复。
- 控制子类扩展,子类必须遵守算法规则。