策略模式总结

以诸葛亮给赵云(伴郎)三个锦囊妙计为例:
先看类图(先画类图的习惯非常重要,以后得慢慢养成这个习惯):

           策略模式总结


//首先定义一个策略接口
public interface IStrategy {
//每个锦囊妙计都是一个可执行的算法
public void operate();
}

//实现第一个妙计
public class FirstIdea implements IStrategy{
public void operate(){
System.out.println("找乔国老帮忙,让吴国太给孙权施加压力");
}
}

//实现第二个妙计
public class SecondIdea implements IStrategy {
public void operate(){
System.out.println("求吴国太开个绿灯,放行!");
}
}

//实现第三个妙计
public class ThirdIdea implements IStrategy {
public void operate(){
System.out.println("孙夫人断后,挡住追兵");
}
}

//三个妙计有了,现在该实现锦囊了,锦囊里面装个妙计
public class Tips{
private IStrategy iStrategy;
//构造函数,看要使用哪个妙计
public  Tips( IStrategy iStrategy){
this. iStrategy=  iStrategy;
}

//使用妙计出招
public void operate() {
iStrategy.operate();
}
}

//现在该赵云出场了,一次使用三个锦囊妙计
public class ZhaoYun{
public static void main(String[] args) {

Tips tips;

//刚刚到吴国的时候拆第一个
System.out.println("-----------刚刚到吴国的时候拆第一个-------------");
tips = new Tips(newFirstIdea()); //拿到妙计
tips.operate(); //拆开执行
System.out.println("\n\n\n\n\n\n\n\n");

//刘备乐不思蜀了,拆第二个了
System.out.println("-----------刘备乐不思蜀了,拆第二个了-------------");
tips = new Tips(new SecondIdea());
tips.operate(); //执行了第二个锦囊了
System.out.println("\n\n\n\n\n\n\n\n");

//孙权的小兵追了,咋办?拆第三个
System.out.println("-----------孙权的小兵追了,咋办?拆第三个-------------");
tips = new Tips(new ThirdIdea());
tips.operate(); //孙夫人退兵
System.out.println("\n\n\n\n\n\n\n\n");
}
}
策略模式的好处就是: 体现了高内聚低耦合的特性。
还有一个就是扩展性就是: OCP(Open-Closedprinciple:开-闭原则)原则,策略类可以继续增加下去,只要修改Tips.java就可以了。
OCP原则认为:一个软件应该对扩展开放,对修改关闭。 这是由大师BertrandMeyer提出,英文原文是: Softwareentities should be open for extension,but closed formodification.

要达到OCP,关键是抽象化,可以定义一个或多个接口 或抽象类,规定所有具体类必须实现的方法作为抽象层,这个抽象预见了你的系统或模块将来的扩展,因此在任何扩展情况下都不会改变。这就使得系统的抽象层不需要修改,从而满足了OCP中对修改关闭的原则。但是由于有具体实现的类可以扩展来改变系统的行为,所以系统的设计是开放的,满足了OCP中扩展的要求。

你可能感兴趣的:(Java设计模式总结)