zoukankan      html  css  js  c++  java
  • 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
    ---请使用支付宝支付---

      这样我们就实现了策略模式。

  • 相关阅读:
    VS2015 update3 安装 asp.net core 失败
    connection timeout 和command timeout
    安装.NET Core
    xamarin 学习笔记02- IOS Simulator for windows 安装
    xamarin 学习笔记01-环境配置
    BotFramework学习-02
    BotFramework学习-01
    正则表达式
    获取指定字节长度的字符串
    pdf生成器
  • 原文地址:https://www.cnblogs.com/mugglean/p/8920846.html
Copyright © 2011-2022 走看看