捐赠 | 广告 | 注册 | 发布 | 上传 | 关于我们    
  粤ICP备10103342号-1 DELPHI盒子 | 盒子文章 | 盒子问答悬赏 | 最新更新 | 盒子检索 | 下载中心 | 高级搜索    
  精品专区 | 繁體中文 | 奖励公告栏 | 直通车账号登陆 | 关闭GOOGLE广告 | 临时留言    
盒子资源分类
全部展开 - 全部合拢
动物设计模式之——策略模式
关键字:动物设计模式之——策略模式
来 自:原创
平 台:Win2K/2003/NT/XP 下载所需:0 火柴
深浅度:初级 完成时间:2014/2/11
发布者:ozhy1 (奖励50火柴) 发布时间:2014/2/20
编辑器:Delphi7 语  种:简体中文
分 类:对象 下载浏览:79/4879
加入到我的收藏
下载错误报错
登陆以后才能下载
 用户名:
 密 码:
自动登陆(30天有效)
图片如果打不开,说明流量不够了,请稍候下载……
1,什么是策略模式?
策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户。
 
2,策略模式有什么好处?
     策略模式的好处在于你可以动态的改变对象的行为。
 
3,设计原则
  
     设计原则是把一个类中经常改变或者将来可能改变的部分提取出来,作为一个接口(c++z中可以用虚类),然后在类中包含这个对象的实例,这样类的实例在运行时就可以随意调用实现了这个接口的类的行为。下面是一个例子。 

      策略模式属于对象行为型模式,主要针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响 到客户端的情况下发生变化。通常,策略模式适用于当一个应用程序需要实现一种特定的服务或者功能,而且该程序有多种实现方式时使用。
 
4 ,策略模式中有三个对象:
(1)       环境对象:该类中实现了对抽象策略中定义的接口或者抽象类的引用。
(2)       抽象策略对象:它可由接口或抽象类来实现。
(3)       具体策略对象:它封装了实现同不功能的不同算法。
利用策略模式构建应用程序,可以根据用户配置等内容,选择不同有算法来实现应用程序的功能。具体的选择有环境对象来完成。采用这种方式可以避免由于使用条件语句而带来的代码混乱,提高应用程序的灵活性与条理性。
 
5我认为策略模式是众多模式中最常用,最常见的一种模式。

一句话说,针对同一命令(或行为),不同的策略做不同的动作。 (个人总结 难免疏漏 海涵)

举例来说,一个接口有两个实现:(java代码)
interface RunBehavior {
  public void performRun();
}

class Run implements RunBehavior {
  public void performRun() { System.out.println(" I can run!"); }
}

class JumpAsRun implements RunBehavior {
  public void performRun() { System.out.println("I cannot run, but I can jump!"); }
}

解释一下这段简单的程序
跑是一种行为(接口)
正常的动物都可以跑(class Run)
麻雀是不能跑的,它只能跳(class JumpAsRun)

这样的话,其实我们有了一个行为的请求,那就是跑,然后我们有两个策略供选择。

那么如何调用呢?
class Anmial {
  RunBehavior runBehavior;
  public void run() {
    this.runBehavior.performRun();
  }
  
  public void setRunBehavior(RunBehavior runBehavior) {
    this.runBehavior = runBehavior;
  }
}

下面真正开始调用:

public class TestStrategy{

  public static void main(String args[]) {
    RunBehavior rb1 = new Run();
    Animal tiger = new Animal();
    tiger.setRunBehavior(rb1);
    tiger.run();
    
    RunBehavior rb2 = new JumpAsRun();
    Animal bird = new Animal();
    bird.setRunBehavior(rb2);
    bird.run();
    
    // 上面的老虎和鸟分别用了一个策略,下面让老虎用鸟的策略
    // 看看会发生什么
    tiger.setRunBehavior(rb2);
    tiger.run();
    // 其实策略模式的重点就在这儿,给对象传入什么样的策略,执行什么样的动作。
  }
}
Google
 
本站原创作品,未经作者许可,严禁任何方式转载;转载作品,如果侵犯了您的权益,请联系我们
龙脉加密锁 15元起 Grid++Report 报表 申请支付@网
 相关文章
没有相关文章
相关评论
共有评论0条
我要发表评论 查看全部评论
 
  DELPHI盒子版权所有 技术支持:深圳市麟瑞科技有限公司 1999-2024 V4.01 粤ICP备10103342号-1 更新RSS列表