我们似乎总是在为选择这个词苦恼.当我们选择生活得时候就放弃了激情.
当我们选择程序员得时候就放弃了时间.这一切都是在动态得抉择得.并
非有命运决定.而是在动态得自身来决定.好了现在考虑一个比较现实得
问题.假设.如果你有个临时会议.却无法确定什么时候要去.因为是临时
决定得.就无法决定.如果现在得时间是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; } } }
这样就可以把决策权留到晚期在决定.

|