前言:什么叫设计模式?
设计是解决软件开发某些特定问题而提出的一些解决方案也可以理解成解决问题的一些思路。通过设计模式可以帮助我们增强代码的可重用性、可扩充性、 可维护性、灵活性好。我们使用设计模式最终的目的是实现代码的高内聚和低耦合。
## 观察者模式
一、定义
定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。策略模式模式使得算法可独立于使用它的客户而独立变化。(如:当有许多的if else 的时候,就可以考虑使用策略模式来处理)
二、优点:
(1)开闭原则
(2)避免使用多重条件转移语句,比如很多的if else
(3)提高算法的保密性和安全性;我们只需要知道策略名称和功能,而不需要知道内部实现细节;
三、缺点:
(1)客户端必须知道所有的策略类,并自行决定使用哪一个策略类;
(2)产生很多策略类
四、代码示例
使用场景:
以追妹纸为例,遇到不同的妹纸追求的套路(策略)是不一样的。有些喜欢吃饭、有些喜欢看电影、有些喜欢逛街。
Stragety(抽象策略类):抽象类或接口,提供具体策略类需要实现的接口。
ConcreteStragetyA、ConcreteStragetyB(具体策略类):具体的策略实现,封装了相关的算法实现。
Context(环境类):用来操作策略的上下文环境。
1 .创建抽象策略类:
public interface ChaseStragety {//追求策略
void chase();//抽象追求方法
}
2.创建具体的策略类:
public class ShoppingStrategy implements ChaseStragety {
@Override
public void chase() {
System.out.println("一起逛街咯~");
}
}
public class MoviesStrategy implements ChaseStragety {
@Override
public void chase() {
System.out.println("一起看电影咯~");
}
}
public class EattingStrategy implements ChaseStragety {
@Override
public void chase() {
System.out.println("一起吃饭咯~");
}
}
3.创建环境类
用来操作不同的策略,不同的妹纸使用不同的策略,随机应变:
public class Context {
private ChaseStragety chaseStragety;//定义抽象策略类
public Context(ChaseStragety chaseStragety) {//构造方法传递具体策略对象过来
this.chaseStragety = chaseStragety;
}
public void chase(){//执行具体策略对象的策略
chaseStragety.chase();
}
}
4.测试类
public void test(){
Context context;
System.out.println("遇到爱逛街的妹子:");
context=new Context(new ShoppingStrategy());
context.chase();
System.out.println("遇到爱看电影的妹子:");
context=new Context(new MoviesStrategy());
context.chase();
System.out.println("遇到吃货妹子:");
context=new Context(new EattingStrategy());
context.chase();
}
5.执行结果
遇到爱逛街的妹子:
一起逛街咯~
遇到爱看电影的妹子:
一起看电影咯~
遇到吃货妹子:
一起吃饭咯~
五、策略模式和工厂模式的区别:
策略模式属于行为型模式,而工厂模式属于创建型模式(工厂模式侧重于创建,而策略模式是使用已经创建好出来的对象)
参考:博客
有改动。