决策者得选择(Strategy)

原创 2003年07月15日 17:12:00

 

我们似乎总是在为选择这个词苦恼.当我们选择生活得时候就放弃了激情.

当我们选择程序员得时候就放弃了时间.这一切都是在动态得抉择得.并

非有命运决定.而是在动态得自身来决定.好了现在考虑一个比较现实得

问题.假设.如果你有个临时会议.却无法确定什么时候要去.因为是临时

决定得.就无法决定.如果现在得时间是5:00--6:00那么你必须要去参加.否则

你依然可以留在公司办公.且开会和办公都需要整理文件那么这就是无法

确定得因素.也许会说可以用if作判断.那么如果是一个很复杂得情况.

并且考虑多个组件对象见得协调那么很显然单纯If很难承担这样得责任.

所以必须使用面向对象得模式.由于决策是在动态决定得.所以无法得到一个

比较确切得解决之道.所以考虑抽象类.和晚期绑定是很现实得事情.那么

我们来考虑责任和责任人之间得关系.责任是解决方案和决策者本身得选取.

而解决方案由很多条.显然无法提前决定.必须由一个抽象对象来完成不变得.

而由其派生对象决定策略.而决策者负责得是决策得选取.它也同样得动态得

选取策略.那么分析之后来模拟该规则


//指定策略
public abstract class MeetingCase{
    //无论何种解决方案都必须得整理文集
    public void PlanFile(){
         Console.WriteLine("整理文件");
    }
    public abstract void selectCase();
}

public class OnMeeting : MeetingCase{

   override  public  void selectCase(){
         PlanFile();
         Console.WriteLine("去开会");
   }
}

public class NoMeeting : MeetingCase{

   override  public   void selectCase(){
          PlanFile();
          Console.WriteLine("留在公司办公");
   }
}


//策略的决策

public interface ISelectCase{
        MeetingCase mc{get;};
        void ExecuteCase();
        void ChangeCase(MeetingCase NewCase);
}


public class MeetingSelect{
      private MeetingCase Mc=null;
     
      public MeetingCase mc{
           get{return Mc;}
       }
   
      public  void ExecuteCase(){
           Mc.selectCase();
      }
     
      public  void ChangeCase(MeetingCase NewCase){
              this.Mc=NewCase;
      }
}

public class Client
    {
        public static int Main(string[] args)
  { 
   ISelectCase ms=new MeetingSelect();
                        MeetingCase om=new OnMeeting();
                        MeetingCase nm=new NoMeeting();

                       
                        if(DateTime.Now.Hour==5){
                               ms.changeCase(om);
                               ms.ExecuteCase();
                        }
                        else{
                               ms.changeCase(nm);
                               ms.ExecuteCase();
                        }
            return 0;
        }
    }
}

这样就可以把决策权留到晚期在决定.

决策者的几种决策风格

按获取数据的方式可把人分为:感知型(S)  和直觉型(N)  感知型的人喜欢与特定问题有关的硬数据。直觉型的人则喜欢描写可能性的整体信息。 按处理数据的方式可把人分为思考型(T)  和感觉型(F)思考...
  • newhappy2008
  • newhappy2008
  • 2006年11月18日 20:56
  • 3102

Test Strategy VS Test Plan

a.Test strategy is master testplan.It will talk about the Budget,Timelines,objective.b.What is the t...
  • Kevin_Lee08
  • Kevin_Lee08
  • 2011年06月07日 13:36
  • 1027

设计模式学习笔记--Strategy、State

最近在看设计模式的,防止遗忘,总结一下,如有不足还望指正! 策略模式:(strategy)定义算法家族,分别封装起来,让他们之间可以相互替换。此模式可以让算法的变化,不影响使用算法的用户。 类图如下:...
  • smartboy_01
  • smartboy_01
  • 2014年12月30日 22:32
  • 554

node.js开发错误——Error: Connection strategy not found

express 4.x 使用connect-mongo@1.3.2版本的 运行node bin/www时控制台出现: Error: Connection strategy not found ...
  • fd214333890
  • fd214333890
  • 2016年12月04日 22:23
  • 1861

浅谈JAVA设计模式之——策略模式(Strategy)

一、概述 定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。 二、适用性 1.许多相关的类仅仅是行为有异。“策略”提供了一种用多个行为中的一个行为...
  • l1028386804
  • l1028386804
  • 2015年05月09日 14:02
  • 1893

Strategy策略模式和State/Bridge模式的区别

Strategy策略模式 如果系统中某个类的某一行为存在多种实现方式,而且这些实现方式可以互换时使用策略模式。 如果系统中某个类的对象存在多种状态,不同状态下行为有差异,而且这些状态之间可以发生转换...
  • Blues1021
  • Blues1021
  • 2015年09月12日 00:26
  • 999

@GeneratedValue

一、JPA通用策略生成器  通过annotation来映射hibernate实体的,基于annotation的hibernate主键标识为@Id,  其生成规则由@GeneratedValue设定...
  • sz_bdqn
  • sz_bdqn
  • 2013年09月20日 21:11
  • 3305

设计模式之策略(Strategy)模式

Strategy模式是一种行为型设计模式,它将算法一个个封装起来,在某一时刻能够互换地使用其中的一个算法。从概念上看,所有这些算法完成的都是相同的工作,只是实现不同而已。动机在开发中,我们常常会遇到概...
  • lihao21
  • lihao21
  • 2015年08月26日 19:51
  • 2183

设计模式 - 策略模式(Strategy Pattern) 详解

策略模式(Strategy Pattern) 详解 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26577879 本文版...
  • u012515223
  • u012515223
  • 2014年05月22日 13:31
  • 2915

Maven私服搭建问题总结

发现maven不能从私服下载jar包。 打开私服发现还需要配置一下东西。 问题1: 解决central runting 状态不成功的方法 repositories->central->routing ...
  • ATYZ123
  • ATYZ123
  • 2017年03月10日 23:37
  • 1417
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:决策者得选择(Strategy)
举报原因:
原因补充:

(最多只允许输入30个字)