码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-08-27 11:58:19      阅读:109      评论:0      收藏:0      [点我收藏+]

标签:自己   rate   代码复用   关键词   --   拓展   多态   []   设计   

策略设计模式的定义:

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

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

策略设计模式的代码:

 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.策略设计模式

标签:自己   rate   代码复用   关键词   --   拓展   多态   []   设计   

原文地址:http://www.cnblogs.com/StoneLuo/p/7439847.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!