本文实例讲述了Java经典设计模式之策略模式。分享给大家供大家参考,具体如下:

策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
策略模式一般由下面三部分组成:
1. 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
2. 具体策略角色:包装了相关的算法和行为。
3. 环境角色:持有某一个策略类的引用,客户端调用。
策略模式设计原则:
1. 把程序中需要变化的部分抽离出来,独立于不变的部分
2. 面向接口编程,而不是面向实现编程,多作组合 ,少用继承。(组合 :在类中增加一个私有域,引用另外一个已经有的类的实例,通过调用实例的方法从而获得新的功能)
应用举例,以银行为例,可能有点不恰当
比如我们应用要接入银行支付功能。我们都知道,银行都有支付功能,随着技术的发展,银行具有了开通网络支付的功能。现在我们遇到的问题是,我们要增加支付的银行,但是有的银行还没有开通网络银行,有的已经开通了,而且也要把原有接入 的银行添加上网络银行功能(如果已经开通的话)。
//银行基类,为了适应变化,增加了网络支付处理的策略处理接口BankStrategy
public abstract class Bank {
private BankStrategy mBankStrategy;
public void setmStrategy(BankStrategy mStrategy) {
this.mBankStrategy = mStrategy;
}
public void payMoney() {
System.out.println("我具有支付功能");// 所有银行共同的特征
}
public abstract void serviceStyle();// 但每个银行有不同的服务方法(比的就是服务),具体的子类实现
public void netBank(){//开通网上银行
mBankStrategy.netPay();
}
}
//———-银行策略接口———————————
public interface BankStrategy {
void netPay();// 添加网络支付功能
}
//————–增加开通网络支付的策略实现类————
public class CanNetBank implements BankStrategy {
@Override
public void netPay() {
System.out.println("我已经开通网络支付功能");
}
}
//————–也有不开通网络支付的银行—————
public class NoNetBank implements BankStrategy {
@Override
public void netPay() {
System.out.println("我不开通网络银行,咋的!");
}
}
//——-地球银行:现在开通网络支付——————
public class EarthBank extends Bank {
public EarthBank(){
super();
super.setmStrategy(new CanNetBank());//这里就实现了网络支付
}
@Override
public void serviceStyle() {
System.out.println("我的服务在事个地球上是最好的!");
}
}
//——–太阳银行,说离我们太远了,不开通网络银行——————-
public class SunBank extends Bank {
public SunBank(){
super();
super.setmStrategy(new NoNetBank());//这里就不开通了(当然可不调用 ,只是告诉下实现方法)
}
@Override
public void serviceStyle() {
System.out.println("我的服务像金子一样发光!");
}
}
//———测试类———————————–
public class Test {
public static void main(String[] args) {
System.out.println("———测试———–");
Bank duck=null;
duck=new EarthBank();
duck.serviceStyle();
duck.payMoney();
duck.netBank();
System.out.println("———测试———–");
duck=new SunBank();
duck.serviceStyle();
duck.payMoney();
duck.netBank();
}
}
结果打印
策略模式的优点:
1、 提供了管理相关的算法策略类,恰当使用继承可以把公共的代码转移到父类里面,避免重复的代码,使得架构也更加灵活。
2、 提供了可以替换继承关系的办法(组合)。继承也可以处理多种算法或行为,但算法或行为的环境类就可能会有一些子类,每一个子类提供一个不同的算法或行为。这样一来算法或行为的使用者就和算法或行为本身混在一起。使得动态改变算法变得复杂甚至不可行,也不符合开闭原则。
3、 相对于继承代码更好地得到复用,同时可以避免使用多重条件转移语句。
策略模式的缺点:
1、客户代码需要了解个策略实现的细节,只适用于客户端知道所有的算法或行为的情况。
2、 策略模式造成很多的策略类,每个具体策略类都会产生一个新类,增加了对象的数目。
更多java相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
# Java
# 设计模式
# 策略模式
# Java设计模式之策略模式原理与用法实例详解
# Java设计模式之策略模式定义与用法详解
# 23种设计模式(11)java策略模式
# java设计模式学习之策略模式
# Java设计模式之策略模式_动力节点Java学院整理
# Java设计模式之策略模式详解
# 对比Java设计模式编程中的状态模式和策略模式
# 详解Java设计模式编程中的策略模式
# Java设计模式之策略模式(Strategy模式)介绍
# Java通俗易懂系列设计模式之策略模式
# 子类
# 客户端
# 增加了
# 操作技巧
# 也不
# 都有
# 还没有
# 也有
# 我不
# 相关内容
# 还可以
# 就不
# 开通了
# 适用于
# 感兴趣
# 要把
# 数据结构
# 给大家
# 并将
# 问题是
相关文章:
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
家庭建站与云服务器建站,如何选择更优?
常州自助建站费用包含哪些项目?
制作网站的模板软件,网站怎么建设?
网站专业制作公司有哪些,做一个公司网站要多少钱?
Python如何创建带属性的XML节点
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
专业公司网站制作公司,用什么语言做企业网站比较好?
网站制作新手教程,新手建设一个网站需要注意些什么?
c# await 一个已经完成的Task会发生什么
北京企业网站设计制作公司,北京铁路集团官方网站?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
零服务器AI建站解决方案:快速部署与云端平台低成本实践
如何在企业微信快速生成手机电脑官网?
如何在阿里云ECS服务器部署织梦CMS网站?
linux top下的 minerd 木马清除方法
宁波免费建站如何选择可靠模板与平台?
如何配置支付宝与微信支付功能?
网站建设制作、微信公众号,公明人民医院怎么在网上预约?
如何选择高效稳定的ISP建站解决方案?
七夕网站制作视频,七夕大促活动怎么报名?
清除minerd进程的简单方法
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
定制建站方案优化指南:企业官网开发与建站费用解析
制作电商网页,电商供应链怎么做?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
,制作一个手机app网站要多少钱?
如何选购建站域名与空间?自助平台全解析
建站之星后台管理:高效配置与模板优化提升用户体验
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何快速选择适合个人网站的云服务器配置?
保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?
如何用5美元大硬盘VPS安全高效搭建个人网站?
建站之星价格显示格式升级,你的预算足够吗?
在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?
大连网站设计制作招聘信息,大连投诉网站有哪些?
建站之星手机一键生成:多端自适应+小程序开发快速建站指南
C#如何使用XPathNavigator高效查询XML
北京网站制作的公司有哪些,北京白云观官方网站?
宝塔新建站点报错如何解决?
高防服务器租用如何选择配置与防御等级?
如何高效利用200m空间完成建站?
寿县云建站:智能SEO优化与多行业模板快速上线指南
移民网站制作流程,怎么看加拿大移民官网?
如何通过网站建站时间优化SEO与用户体验?
宝塔面板如何快速创建新站点?
*服务器网站为何频现安全漏洞?
如何挑选最适合建站的高性能VPS主机?
如何在腾讯云服务器快速搭建个人网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。