[原创] java设计模式之——策略模式_Android, Python及开发编程讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Android, Python及开发编程讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 11922 | 回复: 0   主题: [原创] java设计模式之——策略模式        下一篇 
    本主题由 522080330 于 2013-1-23 16:15:11 置为精华
522080330
注册用户
等级:少校
经验:1478
发帖:79
精华:20
注册:2013-1-18
状态:离线
发送短消息息给522080330 加好友    发送短消息息给522080330 发消息
发表于: IP:您无权察看 2013-1-22 12:52:02 | [全部帖] [楼主帖] 楼主



1. 什么是策略模式?
策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 
2. 策略模式有什么好处?
策略模式的好处在于你可以动态的改变对象的行为。
3. 设计原则
设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口( c++z中可以用虚类,然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。
下面是一个例子。
策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。
通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。
4 . 策略模式中有三个对象:
环境对象:该类中实现了对抽象策略中定义的接口或
者抽象类的引用。
抽象策略对象:它可由接口或抽象类来实现。
具体策略对象:它封装了实现同不功能的不同算法。
利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。

TheInterface.java
package strategyPattern;
//抽象策略
public interface TheInterface {
      // 策略方法
      public abstract double add();
}
Strategy1.java
package strategyPattern;
//具体策略
public class Strategy1 implements TheInterface {
      @Override
      public double add() {
            System.out.println(this.getClass().getName() + "的加法运算");
            return 0;
      }
}
Strategy2.java
package strategyPattern;
//具体策略
public class Strategy2 implements TheInterface {
      @Override
      public double add() {
            System.out.println(this.getClass().getName() + "的加法运算");
            return 0;
      }
}
Context .java
package strategyPattern;
//环境角色类
public class Context {
      private TheInterface strategy;
      public Context(TheInterface strategy) {
            this.strategy = strategy;
      }
      // 策略方法
      public double add() {
            this.strategy.add();
            return 0;
      }
}
Test.java
package strategyPattern;
public class Test {
      public static void main(String[] args) {
            Context context = new Context(new Strategy1());
            context.add();// 执行算法1
            context = new Context(new Strategy2());
            context.add();// 执行算法2
      }
}


运行结果 :
strategyPattern.Strategy1的加法运算
strategyPattern.Strategy2的加法运算




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论