策略模式也是我们经常使用的模式,它的定义如下:将可变的部分从程序中抽象分离出来成为算法接口,在该部分下分别封装一系列算法实现并使它们可以相互替换。

  举个例子,我们现在有三种支付方式:支付宝支付,微信支付,银行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的策略模式的更多相关文章

  1. java设计模式 策略模式Strategy

    本章讲述java设计模式中,策略模式相关的知识点. 1.策略模式定义 策略模式,又叫算法簇模式,就是定义了不同的算法族,并且之间可以互相替换,此模式让算法的变化独立于使用算法的客户.策略模式属于对象的 ...

  2. JAVA 设计模式 策略模式

    用途 Title 它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种行为型模式. 结构

  3. 我的Java设计模式-策略模式

    今天给大家说说田忌赛马的故事.如有雷同,纯属巧合!话说在战国时期,群雄割据,硝烟四起,茶余饭后还是少不了娱乐活动的,其中赛马是最火爆的.一天,孙膑看到田忌像个死鸡似的就知道肯定赛马又输给了齐威王,立马 ...

  4. Java设计模式—策略模式

    1.策略模式(Strategy Pattern)是一种比较简单的模式,也叫做政策模式(PolicyPattern). 定义如下:     Define a family of algorithms,e ...

  5. Java设计模式-策略模式详解

    前言 在软件领域中,设计模式作为一种经典的开发实践常常需要我们去深入的理解,而策略模式作为设计模式的一种,使用频率也是相对来说比较高的,在Java中,当我们学习TreeSet集合的时候,就采用了经典的 ...

  6. java使用策略模式代替if/else

    平时在开发中避免不了使用大量的if else语句,但过多层的if else对于性能有很大的开销,类似如下代码 public class MainStart { public static void m ...

  7. Java 关于策略模式+简单工厂模式下的思考

    导读 最近在做公司一个消息网关的服务,包括:短信.微信.邮件等,所有请求通过一个入口,方便接口的管理(记录日志.接口限流白名单啥的).如何写这个接口呢,还有为了以后扩展,对接过短信.微信.公众号的童鞋 ...

  8. Java 设计模式--策略模式,枚举+工厂方法实现

    如果项目中的一个页面跳转功能存在10个以上的if else判断,想要做一下整改 一.什么是策略模式 策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理,最终可以实现解决 ...

  9. java设计模式--策略模式

    策略模式属于对象的行为模式.其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换.策略模式使得算法可以在不影响到客户端的情况下发生变化. 本文地址:http:// ...

随机推荐

  1. “全栈2019”Java多线程第三十二章:显式锁Lock等待唤醒机制详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  2. Bs4 BeautifulSoup取值

    原文网址:https://blog.csdn.net/u010244522/article/details/79627073 从网页获取HTML数据后,获取对应标签.属性的值 取值方法主要有以下几种: ...

  3. Apache-通过CGI执行脚本

    1.配置服务器,开启注释 vim /etc/httpd/conf/httpd.conf 292 # (You will also need to add "ExecCGI" to ...

  4. [学习笔记]BSGS

    \(\%\%\% Fading\) 早就会了,我最近才理解,当时颓废太多忘学了 1.[SDOI2013]随机数生成器 当天正好在学数列,回来发现用必修五的知识就没了-- 不过特判好烦啊. \(Code ...

  5. 用代码来细说Csrf漏洞危害以及防御

    开头: 废话不多说,直接进主题. 0x01 CSRF介绍:CSRF(Cross-site request forgery)跨站请求伪造,也被称为“One Click Attack”或者Session ...

  6. zookeeper的安装与配置(单机和集群)

    单机模式: 1.首先去官网下载zookeeper的包 zookeeper-3.4.10.tar.gz 2.用FTP上传到服务器或者Linux虚拟机的/usr/local目录下 3.解压文件tar -z ...

  7. mybatis四大接口之 ResultSetHandler

    1. 继承结构 2. ResultSetHandler public interface ResultSetHandler { // 将Statement执行后产生的结果集(可能有多个结果集)映射为结 ...

  8. iOS开发-实现相机app的方法[转载自官方]

    This brief code example to illustrates how you can capture video and convert the frames you get to U ...

  9. CI框架入门笔记

    当前(2019-03-22)CodeIgniter 框架的最新版本是 3.1.5,于2017年6月发布,距今快两年了也没有更新,这与 Laravel 的更新速度相比差距太大了.因为确实,它是一个很古老 ...

  10. IntelliJ IDEA中Debug的使用技巧

    当运行结果跟我们设想的不一致时,我们就可以用debug进行代码调试,下面是我在日常开发中对debug的一些小结 (一)基本介绍 本篇文章是基于IntelliJ IDEA2018.3.2版本,Debug ...