设计模式第16篇:策略设计模式

Posted quxiangxiangtiange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式第16篇:策略设计模式相关的知识,希望对你有一定的参考价值。

一.策略设计模式介绍

     在软件开发中常常遇到这种情况,实现某一个功能有多种算法或者策略,我们可以根据应用场景的不同选择不同的算法或者策略来完成该功能。比如定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换,使得算法可独立于使用它的客户而变化,这就是策略模式。

二.策略设计模式代码用例

  这里以一个支付的例子来说明。网上购物时,当在购物车中结算时都会有多种支付选择,比如余额宝、花呗、银行卡等多种支付方式,这里就可以选择策略模式。

  1.首先定义一个支付策略接口

interface PaymentStrategy {
         
    public void pay(int amount);
}

  2.支付策略实现类

  这里写余额宝、花呗两个支付策略为例

class YuEBaoStrategy implements PaymentStrategy {

    private String password;
    
    public YuEBaoStrategy(String password){
        this.name=password;
    }
    @Override
    public void pay(int amount) {
        System.out.println(amount +" 余额宝支付");
    }

}

class HuaBeiStrategy implements PaymentStrategy {

    private String expiryDate;
    private String password;
    
    public PaypalStrategy(String expiryDate, String password){
        this.expiryDate=expiryDate;
        this.password=password;
    }
    
    @Override
    public void pay(int amount) {
        System.out.println(amount + " 花呗支付,还款截止日期:下月"+expiryDate);
    }

}

  3.定义商品类

class Item {

    private String name;
    private int price;
    
    public Item(String name, int cost){
        this.name=name;
        this.price=cost;
    }

    public String getName() {
        return name;
    }

    public int getPrice() {
        return price;
    }
    
}

  4.定义一个购物车

import java.util.ArrayList;
import java.util.List;

 class ShoppingCart {

    //List of items
    List<Item> items;
    
    public ShoppingCart(){
        this.items=new ArrayList<Item>();
    }
    
    public void addItem(Item item){
        this.items.add(item);
    }
    
    public void removeItem(Item item){
        this.items.remove(item);
    }
    
    public int calculateTotal(){
        int sum = 0;
        for(Item item : items){
            sum += item.getPrice();
        }
        return sum;
    }
    
    public void pay(PaymentStrategy paymentMethod){
        int amount = calculateTotal();
        paymentMethod.pay(amount);
    }
}

  5.测试类

public class ShoppingCartTest {

    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();
        
        Item item1 = new Item("vivox23",2699);
        Item item2 = new Item("oppo FindX",3999);
        
        cart.addItem(item1);
        cart.addItem(item2);
        
        //余额宝支付
        cart.pay(new PaypalStrategy("支付密码"));
        
        //花呗支付
        cart.pay(new CreditCardStrategy("2月13号","支付密码"));
    }

}

三.策略设计模式应用

  当针对特定的任务选用特定的算法时应该考虑策略设计模式。

  jdk中用到该模式的方法:Collections.sort(),Arrays.sort().

 

以上是关于设计模式第16篇:策略设计模式的主要内容,如果未能解决你的问题,请参考以下文章

第一梦 策略模式

策略模式-设计模式

从零开始学习Java设计模式 | 行为型模式篇:策略模式

从零开始学习Java设计模式 | 行为型模式篇:策略模式

高焕堂:Android的API设计(应用篇)_创建App的对象

Java进阶篇缓存底层设计(LRULFUFIFOCache)