zoukankan      html  css  js  c++  java
  • 设计模式第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 YuEBaoStrategy("支付密码"));
            
            //花呗支付
            cart.pay(new HuaBeiStrategy("2月13号","支付密码"));
        }
    
    }

    三.策略设计模式应用

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

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

  • 相关阅读:
    001-Java®语言规范、Java平台标准版文档、JVM概述
    004-RIP、OSPF【路由选择协议】
    003-ARP地址解析协议
    0405-服务注册与发现-客户端负载均衡-Ribbon 同Eureka使用,Ribbon脱离Eureka使用
    0404-服务注册与发现-客户端负载均衡-两种自定义方式-Ribbon通过代码自定义配置、使用配置文件自定义Ribbon Client
    网页嵌入swf代码
    解决html5 video不能播放 能播放声音不能播放视频
    代码高亮插件SyntaxHighlighter
    透明度
    web图片轮播实现
  • 原文地址:https://www.cnblogs.com/quxiangxiangtiange/p/10285465.html
Copyright © 2011-2022 走看看