• linkin大话设计模式--策略模式


    linkin大话设计模式--策略模式

    Strategy [ˈstrætədʒi]  

    策略模式用于封装系列的算法,这些算法通常被封装在一个称为Context的类中,客户端程序可以自由的选择任何一种算法,或者让Context来为客户端提供一个最佳的算法。说白了,使用策略模式就是为了支持算法的自由切换。

    策略模式是对算法的包装,是吧使用算法的责任和算法本身分割开来,委派给不同的对象管理。
    策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。

    一句话来形容:准备一组算法,并将每一个算法封装起来,使得他们可以互换。

    策略模式涉及到三个角色:
    环境角色:持有一个Strategy类(策略类)的引用
    抽象策略角色:策略类,通常由一个接口或者抽象类实现
    具体策略角色:包装了相关的算法和行为



    代码如下:
    //显示客户端 根据不同的策略选择 会有不能的实现算法来处理逻辑
    public class Strategy {
        private DiscountStrategy strategy;
    
        public void setStrategy(DiscountStrategy strategy) {
            this.strategy = strategy;
        }
        
        public double getDiscountPrice(double price){
            if(null == strategy){
                strategy = new VipDiscount();
            }
            return this.strategy.getDiscount(price);
        }
        
        public static void main(String[] args) {
            //这里的策略就可以在客户端随意修改和增加 
            //这里的客户端代码和不同的策略类耦合,我们可以考虑使用配置文件在指定Strategy到底使用哪种策略实现类 这样子其实就是hibernate的dialect...
            Strategy strategy = new Strategy();
            System.out.println(strategy.getDiscountPrice(100));
            strategy.setStrategy(new OldDiscount());
            System.out.println(strategy.getDiscountPrice(100));
            strategy.setStrategy(new NewDiscount());
            System.out.println(strategy.getDiscountPrice(100));
        }
    
    }
    
    //算法的接口
    interface DiscountStrategy{
        public double getDiscount(double price);
    }
    
    //下面几个是算法接口的实现 要是增加一个算法就增加一个实现就好 还是比较方便的
    class VipDiscount implements DiscountStrategy{
    
        @Override
        public double getDiscount(double price) {
            System.out.println("VIP折扣...");
            return price*0.5;
        }
        
    }
    
    class OldDiscount implements DiscountStrategy{
    
        @Override
        public double getDiscount(double price) {
            System.out.println("老顾客折扣...");
            return price*0.7;
        }
        
    }
    
    class NewDiscount implements DiscountStrategy{
    
        @Override
        public double getDiscount(double price) {
            System.out.println("新顾客折扣...");
            return price*0.9;
        }
        
    }





























  • 相关阅读:
    DbUtils类基本使用
    【struts2】ActionContext与ServletActionContext
    Eclipse 菜单---Eclipse教程第04课
    Eclipse 窗口说明---Eclipse教程第03课
    Eclipse 修改字符集---Eclipse教程第02课
    Java 开发环境配置
    Eclipse 安装(Neon 版本2016年)---Eclipse教程第01课
    eclipse中link方式安装插件
    linux 源码安装mysql 5.5
    shell执行mysql命令
  • 原文地址:https://www.cnblogs.com/LinkinPark/p/5233188.html
Copyright © 2020-2023  润新知