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:// ...
随机推荐
- Spring IOC 容器源码分析 - 创建原始 bean 对象
1. 简介 本篇文章是上一篇文章(创建单例 bean 的过程)的延续.在上一篇文章中,我们从战略层面上领略了doCreateBean方法的全过程.本篇文章,我们就从战术的层面上,详细分析doCreat ...
- Linux 安装JavaEE环境之Tomcat安装笔记
1.先用xftp将tomcat的压缩包上传到 /opt/ 2.在/usr/local/下使用命令mkdir tomcat 创建tomcat目录 将apache-tomcat-7.0.70.tar.gz ...
- #loj3089 [BJOI2019]奥术神杖
卡精度好题 最关键的一步是几何平均数的\(ln\)等于所有数字取\(ln\)后的算术平均值 那么现在就变成了一个很裸的01分数规划问题,一个通用的思路就是二分答案 现在来考虑二分答案的底层怎么写 把所 ...
- API网关【gateway 】- 2
最近在公司进行API网关重写,公司内采用serverMesh进行服务注册,调用,这里结合之前学习对API网关服务进行简单的总结与分析. 由于采用了大量的nginx相关的东西,所以在此记录一下: 配置连 ...
- python -m SimpleHTTPServer 8080
启动一个简单的 web 服务器 python -m SimpleHTTPServer 8080
- SpringBoot入门之内嵌Tomcat配置
spring boot默认web程序启用tomcat内嵌容器tomcat,监听8080端口,servletPath默认为 / .需要用到的就是端口.上下文路径的修改,在spring boot中其修改方 ...
- postgresql-查看表大小
drop table tablesize create table tablesize( phone int) create table tablesize( phone text) create t ...
- HDFS概要
--HDFS-- Hadoop Distributed File System HDFS一个分布式,高容错,可线性扩展的文件系统 简介: Hadoop分布式文件系统(HDFS)是一种分布式文件系统,设 ...
- 使用.NetCore在Linux上写TCP listen 重启后无法绑定地址
拥抱.net core的过程中, 将公司的一套java项目改成了.net core 2.0版的. 里面的tcp服务被我用msdn的SocketAsyncEventArgs方式重写了, 然而在测试的过程 ...
- gitlab基本的命令
1) 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v 添加远程仓库:$ git ...