概述
一般的,当我们在设计某个需求的时候总要考虑到两种角色的实现方式不同——即普通用户和管理员用户,但因为它们不少代码是可以重用的,我们不由的将两者纠缠其中增加了耦合,亦或者使将两者隔离开产生了大量的代码冗余。
为了解决这种问题,我们可以借用「模板方法模式」的思维进行设计。模板方法模式的定义即「解决设计一个系统知道了算法所需的关键步骤,且确定这些顺序,但其中实现方式不清楚」 。
整体
首先,我们抽象出一个例子。假设我们需要实现一个做饭的需求,那么我们每一次做饭的基本步骤是:
- 1.起火烧油
- 2.倒入蔬菜(肉)
- 3.撒上调料
- 4.大火收汁
写到这里你应该发现了,这些个流程我们是蛮熟悉的,可是具体放什么菜(肉)?具体放什么调料? 不得而知了吧。但步骤一和四可以被复用的。因此,我们可以借助模板方法模式的形式去解决这个问题。
代码
其实,这个实现方法很简单,我们只需要创建一个抽象类,然后把双方共用的方法直接实现,而其他非共用的方法则编写为抽象方法。
public abstract class Cook {
public final void start(){
burningOil();
putFood();
Seasoning();
over();
}
/**
* 起锅烧油
*/
public void burningOil(){
System.out.println("起锅烧油~");
}
/**
* 倒入蔬菜(肉)
*/
public abstract void putFood();
/**
* 撒上调料
*/
public abstract void Seasoning();
/**
* 大火收汁
*/
public void over(){
System.out.println("大火收汁~");
}
}
然后,我们再去实现一个「实现类」,我们要做的饭是「孜然(猪)肉」(啊啊啊我贼喜欢吃哈哈哈,但是最近减肥)。
public class ZiRanZhuRou extends Cook {
@Override
public void putFood() {
System.out.println("放入猪肉~");
}
@Override
public void Seasoning() {
System.out.println("撒上孜然~");
}
public static void main(String[] args) {
new ZiRanZhuRou().start();
}
}
只需要继承一下「做饭」的抽象类就好啦。
本页的评论功能已关闭