行为型设计模式
在此简单介绍下策略模式和模版模式
策略模式
策略模式可以说开发过程中用到的比较多的设计模式
什么是策略模式?
类似于锦囊妙计,对外来说,这些精囊妙计长得完全一样
策略模式的组成?
* 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
* 具体策略角色:包装了相关的算法和行为。
* 环境角色:持有一个策略类的引用,最终给客户端调用。
应用场景:
1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。
2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。
3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。
public class PersonContext {
// 拥有一个出行策略引用
//封装好一个策略集合,实际开发中主要是使用枚举配合策略模式
private List<TravelStrategy> strategylist;
public PersonContext() {
this.strategylist = new ArrayList<>();
strategylist.add(new AirPlanelStrategy());
strategylist.add(new TrainStrategy());
strategylist.add(new BicycleStrategy());
}
public void travel(int type) {
// 根据具体策略类,执行对应的出行策略
for (TravelStrategy travelStrategy : strategylist) {
if (travelStrategy.isOK(type)) {
travelStrategy.travelWay();
break;
}
}
}
}
模版模式
父类封装好公共方法,具体特定方法子类实现
public abstract class GetTimeTemplate {
// 固定流程方法
public long getTime() {
// 获取起始时间
long t1 = System.currentTimeMillis();
// 模板方法
code();
// 获取结束时间
long t2 = System.currentTimeMillis();
return t2 - t1;
}
// 钩子方法
public abstract void code();
}
//子类实现该抽象类,实现code方法,使用了公共模板,获取开始时间和结束时间