设计模式1.策略设计模式

Posted 菜鸟更要虚心学习

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式1.策略设计模式相关的知识,希望对你有一定的参考价值。

策略设计模式的定义:

策略设计模式是把每一个算法封装到具有共同接口的独立类中,具体算法之间可以相互替换或者变化,这种变化不会影响客户端。

关键词:【算法封装】 【共同接口】 【自由替换】

策略设计模式的代码:

 1     public interface IStrategy { //共同接口
 2         public void doSomething();
 3     } 
 4     class ConcreteStrategyA implements IStrategy { //具体策略A(算法)
 5         public void doSomething() { //重写父类接口,实现自己的算法
 6             System.out.println("具体策略A");
 7         }
 8     }
 9     class ConcreteStrategyB implements IStrategy { //具体策略B(算法)
10         public void doSomething() {  //重写父类接口,实现自己的算法
11             System.out.println("具体策略B");
12         }
13     }
14     class Context { //环境,拥有抽象策略引用
15         private IStrategy strategy;
16 
17         public Context(IStrategy strategy){ //构造函数的参数是父类接口的引用,一会儿会指向子类对象
18             this.strategy = strategy;
19         }
20 
21         public void execute(){
22             strategy.doSomething(); //一会调用子类自己的方法(算法)
23         }
24     }
25 
26     public class Client {
27         public static void main(String[] args){
28             Context context;
29             System.out.println("-----执行策略A-----");
30             context = new Context(new ConcreteStrategyA()); //这里就是多态,即策略设计模式的应用接口啦
31             context.execute();
32 
33             System.out.println("-----执行策略B-----");
34             context = new Context(new ConcreteStrategyB());
35             context.execute();
36         }
37     }

策略设计模式的三个角色:

1. 环境context :拥有has-a 抽象策略的引用,对算法的二次封装

2. 抽象策略strategy: 是所有具体策略的父类接口,当各个实现类存在一定重复的逻辑时,可以使用抽象类,避免这种重复。

3. 具体策略: 封装了具体的算法或者行为,算法之间可以自由替换,也可以自由拓展,而不影响用户。

策略设计模式的优点:

1. 代码复用:可以把重复的算法放入抽象策略类,避免代码的重复。

2. 灵活性、扩展性: 把所有算法分离出来,自由修改、添加。

策略设计模式的缺点:

1. 开发困难:策略过多会带来开发上的麻烦。

2. 客户需要了解算法:客户必须知道每一个算法策略的具体功能,并自行决定调用哪一个算法策略。

策略设计模式的本质:

多态,即根据传入对象决定调用哪种算法,前提是用户要知道有哪些算法,以及算法的具体功能。

以上是关于设计模式1.策略设计模式的主要内容,如果未能解决你的问题,请参考以下文章

Redis实现分布式锁(设计模式应用实战)

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

代码片-策略模式+工厂模式

设计模式策略模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )