二、策略模式(Strategy)

来源:互联网 发布:网络主播用语 编辑:程序博客网 时间:2024/05/21 09:55

一、概念

策略模式的用意是针对一组算法,将每一个算法封装到具有有共同接口的独立类中。从而使得他们之间可以相互替换。

策略模式使得算法可以在不影响客户端的情况下发生改变。

二、策略模式的结构


//抽象共同类

public abstract  class Stategy

{

public abstract void function();

}

//算法类1

public calss StategyA

{

public void function()

{

//A实现方法

}

}

//算法类2

public calss StategyB

{

public void function()

{

//B实现方法

}

}


//算法类3

public calss StategyC

{

public void function()

{

//C实现方法

}

}


//实现算法的调用类,和客户段进行交互。

public class Context

{

strategy stra;

public Context(strategy stray)

{

stra=stray;

}


public void func()

{

stra.function();

}

}

三、使用场景

我们知道每家公司在计算员工工资时,根据职位,级别等不同,对应的工资算法就不同,现在我们如果要设计一个计算工资的软件:

不采用‘策略模式’应该是这样实现的:

//技术工资算法

public class Techlogy

{

//技术员工资算法

public double GetMoney()

{

return TechlogyMoney;

}

}

//销售工资算法

public class SaleUser

{

//销售员工资算法

public double GetMoney()

{

return SaleMoney;

}

}


//客户段程序

public class program

{

public void main()

{

//工资

double money=0;

switch(Type)

{

case "技术":Techlogy th=new Techlogy();

 money=th. GetMoney();break;

case "销售":SaleUser sale=new SaleUser();

 money=sale. GetMoney();break;

}

}

}

//缺点,若要增加 财务的工资算法 ,除了增加算法类之外 还要改动 客户端程序,而且将所有的算法类都暴露给了客户端,违反了 开放-封闭原则。

用策略模式进行改造

//定义算法抽象类

public abstract clss GzSuanfa

{

//抽象工资计算方法

public abstract double GetMoney();

}


//技术工资算法

public class Techlogy:GzSuanfa

{

//技术员工资算法

public double GetMoney()

{

return TechlogyMoney;

}

}

//销售工资算法

public class SaleUser:GzSuanfa

{

//销售员工资算法

public double GetMoney()

{

return SaleMoney;

}

}


//策略模式的方法集合

public void ContextMoney

{

 GzSuanfa gzsf;

//这里用到了简单工厂模式

public ContextMoney(string type)

{

switch(Type)

{

case "技术":gzsf=newTechlogy ();

case "销售":gzsf=new(SaleUser(); 

}

}


public double GetGzRmb()

{

return gzsf.GetMoney();

}

}


//客户段程序

public class program

{

public void main()

{

//工资算法(策略模式)

ContextMoney cmy=new ContextMoney(type);

//工资

double money=cmy. GetMoney();;

}

}







0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕妇被猴子咬了怎么办 买的期房烂尾了怎么办 20岁脸上有皱纹怎么办 内眼角下有皱纹怎么办 gta5买了车以后怎么办 htc卡在开机画面怎么办 cf里名字占用了怎么办 烫伤起了大水泡怎么办 手干活磨起泡了怎么办 手上磨了个水泡怎么办 手指磨出水泡了怎么办 手上磨了个泡怎么办 脚上的水泡破了怎么办 脚上水泡破了怎么办 烫伤之后破皮了怎么办 皮肤被烫伤破皮怎么办 烫伤起泡皮掉了怎么办 被烫伤起大水泡怎么办 被烫伤起小水泡怎么办 脚走路磨起泡了怎么办 脚趾头磨了个泡怎么办 脚趾头起了大泡怎么办 脚上有脚气起水泡很痒怎么办 脚底有水泡很痒怎么办 脚底磨得起泡了怎么办 脚底有水泡很疼怎么办 脚底硬皮走路疼怎么办 上火鼻子上长脓包怎么办 鼻子上总是长脓包怎么办 孕妇脚上长水泡很痒怎么办 脚气有水泡很痒怎么办 脚又痒又脱皮怎么办 手指出水泡很痒怎么办 鼻子里上火长泡怎么办 鼻子又干又痒怎么办 眼皮长了小水泡怎么办 眼皮上长了个泡怎么办 眼皮上长了粉刺怎么办 上眼皮又肿又疼怎么办 眼皮长了个痘怎么办 手指上小水泡痒怎么办