本文所有案例代码
码云:https://gitee.com/helloworld6379/designPattern
Github:Github地址
设计模式概述
1 设计模式是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式不是代码,而是某类问题的通
用解决方案,设计模式(Design pattern)代表了最佳的实践。这些解决方案是众多软件开发人员经过相当长的
一段时间的试验和错误总结出来的。
2 设计模式的本质提高 软件的维护性,通用性和扩展性,并降低软件的复杂度。
3 设计模式并不局限于某种语言,java,php,c++ 都有设计模式.
设计模式类型
设计模式分为三种类型,共 23 种
1 创建型模式:单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式。
2 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
3 行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter 模式)、状态模式、策略模式、职责链模式(责任链模式)。
简单介绍
- 模板方法模式(Template Method Pattern),又叫模板模式(Template Pattern),在一个抽象类公开定义了执行它的方法的模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。
- 模板方法模式 定义一个操作中的算法的骨架,而将一些步骤延迟到子类中,使得子类可以不改变一 个算法的结构,就可以重定义该算法的某些特定步骤。
实现
/**
* @Description 定义人的一些基本行为
* @Author: LiuXing
* @Date: 2020/5/28 21:32
*/
public abstract class Person {
//模板方法daily ,模板方法做成final,不让子类去覆盖.
final void daily(){
wakeup();
breakfast();
work();
offwork();
sleep();
}
//抽象方法,让子类去实现
public abstract void wakeup();
public abstract void breakfast();
public abstract void work();
public abstract void offwork();
public abstract void sleep();
}
/**
* @Description 正常人
* @Author: LiuXing
* @Date: 2020/5/28 21:32
*/
public class Ordinary extends Person {
@Override
public void wakeup() {
System.out.println("早上七点醒来");
}
@Override
public void breakfast() {
System.out.println("吃点包子喝点粥。");
}
@Override
public void work() {
System.out.println("干干干干干干干干干干干干");
}
@Override
public void offwork() {
System.out.println("再加会班");
}
@Override
public void sleep() {
System.out.println("睡成死猪一样");
}
}
/**
* @Description 夜猫子
* @Author: LiuXing
* @Date: 2020/5/28 21:32
*/
public class OWL extends Person {
@Override
public void wakeup() {
System.out.println("睡成死猪一样");
}
@Override
public void breakfast() {
System.out.println("早餐是什么味道?");
}
@Override
public void work() {
System.out.println("摸鱼+划水+带薪拉屎");
}
@Override
public void offwork() {
System.out.println("溜了溜了");
}
@Override
public void sleep() {
System.out.println("多人运动。");
}
}
/**
* @Description 模板模式测试
* @Author: LiuXing
* @Date: 2020/5/28 21:32
*/
public class TemplateTest {
public static void main(String[] args) {
Person ordinary = new Ordinary();
ordinary.daily();
Person owl = new OWL();
owl.daily();
}
}
PS:工作中的实践:
在上家公司中,每个Service都要继承XXService
这里的XXService相当于文中的Person类,
里面有两个抽象方法checkData和dealData,checkData就是校验传进来的对象的一些基本属性是否赋值。dealData就是处理业务。
调用的时候,先调用checkData返回true再继续调用dealData。