读书笔记之设计模式——策略模式,结合书本和网上的案例和自己的理解来记录一下策略模式
应用案例:1、诸葛亮的锦囊妙计,每一个锦囊就是一个策略。 2、旅行的出游方式,选择骑自行车、坐汽车,每一种旅行方式都是一个策略。 3、JAVA AWT 中的 LayoutManager。
下面将以旅行的出行方式来做说明:
1、首先:我们去旅行,根据路程的远近来选择不同的出游方式,例如,
出行方式
骑自行车
坐汽车
坐火车
2、设计原则:将变化的部分和不变的部分分离开。此案例中变得是出行方式
设计原则:针对接口编程而不是针对实现编程
设计原则:多用组合,少用继承
现在我们来编写变得出行策略接口,
interface Tripstrategy(){
void tripMode();//出行方式
}
3、编写出行接口的实现类
public class Bike implements Tripstrategy(){//自行车类,实现出行接口
public void tripMode( ){
System.out.println("自行车出行");
}
}
public class Car implements Tripstrategy(){//汽车类,实现出行接口
public void tripMode(){
System.out.println("坐汽车出行");
}
}
public class Train implements Tripstrategy(){//火车类,实现出行接口
public void tripMode(){
System.out.println("坐火车出行");
}
}
4、编写出行的人类
public class Person{
private Tripstrategy strategy;
public Person(Tripstrategy strategy){
this.strategy=strategy;
}
public void executeStrategy(){
this.strategy.tripMode();
}
public static void main(string[] args){
Person person=new Person(new Bike());
person.executeStrategy();
}
}
6、总结:
策略模式的优缺点
优点
-
策略类之间可以自由切换,由于策略类实现自同一个抽象,所以他们之间可以自由切换
-
易于扩展,增加一个新的策略对策略模式来说非常容易,基本上可以在不改变原有代码的基础上进行扩展
-
高内聚低耦合性
缺点
-
客户端必须知道所有的策略类,并自行决定使用哪一个策略类。
-
7、策略模式的应用场景:例如容错恢复机制
容错恢复机制是应用程序开发中非常常见的功能。那么什么是容错恢复呢?简单点说就是:程序运行的时候, -
正常情况下应该按照某种方式来做,如果按照某种方式来做发生错误的话,系统并不会崩溃,也不会就此不能继续向下运行了,
-
而是有容忍出错的能力,不但能容忍程序运行出现错误,还提供出现错误后的备用方案,也就是恢复机制,来代替正常执行的功能,
-
使程序继续向下运行。
-
举个实际点的例子吧,比如在一个系统中,所有对系统的操作都要有日志记录,而且这个日志还需要有管理界面,这种情况下通常会把日志记录在数据库里面,方便后续的管理,但是在记录日志到数据库的时候,可能会发生错误,比如暂时连不上数据库了,那就先记录在文件里面,然后在合适的时候把文件中的记录再转录到数据库中。
对于这样的功能的设计,就可以采用策略模式,把日志记录到数据库和日志记录到文件当作两种记录日志的策略,然后在运行期间根据需要进行动态的切换。
在这个例子的实现中,要示范由上下文来选择具体的策略算法,前面的例子都是由客户端选择好具体的算法,然后设置到上下文中。 -