- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
3.策略模式
★策略模式中体现了两个非常基本的面向对象设计的原则:
--封装变化的概念
--编程中使用接口,而不是对接口的实现
★面向接口的编程,实现类之间的弱耦合
★策略模式的定义
--定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
--策略模式使这些算法在客户端调用它们的时候能够互不影响变化。
★策略模式的组成
--抽象策略角色:策略类,通常由一个接口或者抽象类实现
--具体角色:包装了相关的算法和行为。
--环境角色:持有一个策略类的引用,最终给客户端调用。
★策略模式的实现:
--策略模式的用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。
--策略模式使得算法可以在不影响到客户端的情况下发生变化。使用策略模式可以把行为和环境分割开来。
--环境类负责维持和查询行为类,各种算法则在具体策略中提供。由于算法和环境独立开来,算法的修改都不会影响环境和客户端。
★策略模式的缺点
1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类
2.造成很多的策略类。
★解决方案—采用工厂方法。
抽象策略角色
public interface AbstractStrategy
{
public int calculate(int a , int b);
}
具体角色
public class AddStrategy implements AbstractStrategy
{
public int calculate(int a, int b)
{
return a + b;
}
}
public class DevideStrategy implements AbstractStrategy
{
public int calculate(int a, int b)
{
return a / b ;
}
}
public class MutipleStrategy implements AbstractStrategy
{
public int calculate(int a, int b)
{
return a * b;
}
}
public class SubtractStrategy implements AbstractStrategy
{
public int calculate(int a, int b)
{
return a - b;
}
}
环境角色
public class Enviorment
{
private AbstractStrategy strategy;
public Enviorment(AbstractStrategy strategy)
{
this.strategy = strategy;
}
public AbstractStrategy getStrategy()
{
return strategy;
}
public void setStrategy(AbstractStrategy strategy)
{
this.strategy = strategy;
}
public int calculate(int a , int b)
{
return strategy.calculate(a, b);
}
}
★应用举例:
有这样一个类
public class Person
{
private int id;
private String name;
private int age;
} 使用一个集合来保存它的多个对象,要求对这个集合进行排序,排序规则如下:
可以按Id,name, age进行升序或降序排列,当name 或age相同时,要求按id的升序进行排序。
★具体实现过程
Person类
public class Person
{
private int id;
private String name;
private int age;
public Person(int id , String name, int age)
{
this.id = id;
= name;
this.age = age;
}
public int getId()
{
return id;
}
public void setId(int id)
{
this.id = id;
}
public String getName()
{
return name;
}
public void setName(String name)
{
= name;
}
public int g
您可能关注的文档
- 东沟新合小学牛津6B英语Unit5检测试题.doc
- 搅拌站场地施工方案.doc
- 细胞中的糖类和脂质_.ppt
- 作文评改PPT.ppt
- EDID培训-P2.ppt
- 控烟法规介绍.doc
- 营养师三级技能【计算题型大全】之第五章.doc
- 第2-3节稀疏矩阵.ppt
- 第8讲函数的值域.doc
- 付村镇中心小学创建“平安校园”工作总结.doc
- 金融产品2024年投资策略报告:积极适应市场风格,行为金融+机器学习新发现.pdf
- 交运物流2024年度投资策略:转型十字路,峰回路又转(2023120317).pdf
- 建材行业2024年投资策略报告:板块持续磨底,重点关注需求侧复苏.pdf
- 宏观2024年投资策略报告:复苏之路.pdf
- 光储氢2024年投资策略报告:复苏在春季,需求的非线性增长曙光初现.pdf
- 公用环保2024年投资策略报告:电改持续推进,火电盈利稳定性有望进一步提升.pdf
- 房地产2024年投资策略报告:聚焦三大工程,静待需求修复.pdf
- 保险2024年投资策略报告:资产负债匹配穿越利率周期.pdf
- 政策研究2024年宏观政策与经济形势展望:共识与分歧.pdf
- 有色金属行业2024年投资策略报告:新旧需求共振&工业原料受限,构筑有色大海星辰.pdf
文档评论(0)