Java的策略模式
策略模式也是我们经常使用的模式,它的定义如下:将可变的部分从程序中抽象分离出来成为算法接口,在该部分下分别封装一系列算法实现并使它们可以相互替换。
举个例子,我们现在有三种支付方式:支付宝支付,微信支付,银行App支付。假设我们要做一个软件,每个软件都有各自对应的支付方式,在这种情况下,我们就可以把支付方式这个策略分离出来,就可以很方便的在写软件类时使用使用想使用的策略方式。
把策略做成一个接口,然后把软件做成抽象类,就可以通过继承来很方便的对各个具体软件类和具体策略类进行编写。实现代码如下:
PayStrategy.java
//支付策略接口
public interface PayStrategy {
void pay();
} WeiXin.java
public class WeiXin implements PayStrategy {
//微信支付类
@Override
public void pay() {
// TODO Auto-generated method stub
System.out.println("---请使用微信支付---");
} } Zhifubao.java
public class Zhifubao implements PayStrategy {
//支付宝支付类
@Override
public void pay() {
// TODO Auto-generated method stub
System.out.println("---请使用支付宝支付---"); } }
BanApp.java
public class BankApp implements PayStrategy {
//银行App支付类
@Override
public void pay() {
// TODO Auto-generated method stub
System.out.println("---请使用银行app支付---");
} }
再使用一个软件抽象类,和需要的具体软件类。
PaySoftware.java
//软件抽象类
public abstract class Paysoftware {
//使用组合的方式来实现策略模式
private PayStrategy strategy; public void setStrategy(PayStrategy strategy) {
this.strategy = strategy;
} public void payInterface() {
strategy.pay();
} //没有使用策略模式的方法
public abstract void sofwareStatement();
} SoftwareA.java
public class SoftwareA extends Paysoftware {
public SoftwareA() {
// TODO Auto-generated constructor stub
super();
super.setStrategy(new Zhifubao());
}
public void sofwareStatement() {
System.out.println("我是软件A");
} } SoftwareB.java
public class SoftWareB extends Paysoftware { public SoftWareB() {
// TODO Auto-generated constructor stub
super();
super.setStrategy(new BankApp());
}
public void sofwareStatement() {
System.out.println("我是软件B");
} }
再定义一个测试类
TestDrive.java
public class TestDrive { public static void main(String[] args) {
// TODO Auto-generated method stub
Paysoftware softwarea=new SoftwareA();
softwarea.sofwareStatement();
softwarea.payInterface(); } }
结果如下:
我是软件A
---请使用支付宝支付---
这样我们就实现了策略模式。
Java的策略模式的更多相关文章
- java设计模式 策略模式Strategy
本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...
- JAVA 设计模式 策略模式
用途 Title 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种行为型模式. 结构
- 我的Java设计模式-策略模式
今天给大家说说田忌赛马的故事.如有雷同,纯属巧合!话说在战国时期,群雄割据,硝烟四起,茶余饭后还是少不了娱乐活动的,其中赛马是最火爆的.一天,孙膑看到田忌像个死鸡似的就知道肯定赛马又输给了齐威王,立马 ...
- Java设计模式—策略模式
1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下: Define a family of algorithms,e ...
- Java设计模式-策略模式详解
前言 在软件领域中,设计模式作为一种经典的开发实践常常需要我们去深入的理解,而策略模式作为设计模式的一种,使用频率也是相对来说比较高的,在Java中,当我们学习TreeSet集合的时候,就采用了经典的 ...
- java使用策略模式代替if/else
平时在开发中避免不了使用大量的if else语句,但过多层的if else对于性能有很大的开销,类似如下代码 public class MainStart { public static void m ...
- Java 关于策略模式+简单工厂模式下的思考
导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...
- Java 设计模式--策略模式,枚举+工厂方法实现
如果项目中的一个页面跳转功能存在10个以上的if else判断,想要做一下整改 一.什么是策略模式 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,最终可以实现解决 ...
- java设计模式--策略模式
策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 本文地址:http:// ...
随机推荐
- 【转】C#模拟http 发送post或get请求
原文地址:http://www.cnblogs.com/xssxss/archive/2012/07/03/2574554.html 模拟POST Json public static string ...
- 《Python自动化运维之路》 业务服务监控(二)
文件内容差异对比方法 使用diffie模块实现文件内容差异对比.dmib作为 Python的标准库模块,无需安装,作用是对比文本之间的差异,且支持输出可读性比较强的HTML文档,与 Linux下的di ...
- oracle exp imp日常使用
http://www.cnblogs.com/ningvsban/archive/2012/12/22/2829009.html http://www.cnblogs.com/mq0036/archi ...
- Python相关在线文档手册地址
Python相关: 五星推荐:http://python.usyiyi.cn/ Python 2.7官方中文文档:http://doc.iplaypy.com/python2/ 英文: htt ...
- vue中请求本地的json数据
为什么要请求本地的数据?模拟后台的请求数据,验证页面的逻辑是否存在问题,抛开后台提前开发等. 常用的说来有:jq的方式 约等于 axios的方式,vuex状态管理的方式 个人认为最好用的就是jq的方式 ...
- @JSONField注解的使用
FastJson中的注解@JSONField,一般作用在get/set方法上面,常用的使用场景有下面三个: 修改和json字符串的字段映射[name] 格式化数据[format] 过滤掉不需要序列化的 ...
- 一对一Socket简单聊天的实现
今天终于调试通了Socket一对一的聊天,每次发送连接请求后,将用户名发送到Socket中去,然后将用户名和新建的socket存到map中,然后根据用户名来确定接收方是谁,以实现一对一的聊天功能. 上 ...
- 编写自己的SpringBoot-starter
前言 我们都知道可以使用SpringBoot快速的开发基于Spring框架的项目.由于围绕SpringBoot存在很多开箱即用的Starter依赖,使得我们在开发业务代码时能够非常方便的.不需要过多关 ...
- HYPER-V的安装和双机调试的配置(一)
在上一篇文章中,我们已经安装好了VS2017以及WDK,现在我们就需要创建双机调试的环境, 因为本人的工作环境问题,不能使用WMWARE进行虚拟机的安装,因此就针对HYPER-V这个的虚拟机来进行双机 ...
- dhcp服务器(一)
DHCP服务概述: 名称:DHCP -Dynamic Host Configuration Protocol动态主机配置协议. 功能:DHCP(Dynamic Host Configuration P ...