zoukankan      html  css  js  c++  java
  • 策略模式(Strategy)简介

    一、策略模式(Strategy)简介

    策略模式是行为模式.

    行为模式:规定了各个对象应该具备的职责以及对象间的通信模式,它很好的规范了对象间调用和数据传递方式

    策略模式适合于算法经常变化的情况

    算法的变化不会影响到使用算法的客户,算法可以独立于使用它的客户所变化

    二、简单例子

    普通客户,会员,VIP会员购买商品价格不一样

     抽象类

    package strategy;
    /*
     * 计算商品价格的抽象类
     */
    public abstract class Account {
    
    abstract public double getPrice(int amount,double d);
        
    }

    普通

    package strategy;
    /**
     * 普通客户商品价格计算
     */
    public class CommonAccount extends Account {
    
        @Override
        public double getPrice(int amount, double price) {
    
            return amount*price;
        }
    
    }

    会员

    package strategy;
    /**
     * 普通会员商品价格计算打9折
     */
    public class InsiderAccount extends Account {
    
        @Override
        public double getPrice(int amount, double price) {
            return amount*price*9/10;
        }
    
    }

    VIP

    package strategy;
    /**
     * VIP会员商品价格计算打8折
     */
    public class VipAccount extends Account {
    
        @Override
        public double getPrice(int amount, double price) {
        
            return amount*price*8/10;
        }
    
    }

    上下文类

    package strategy;
    /**
     * 此类用于维护策略类的引用
     */
    public class Context {
        //引用
        private Account account;
        //初始化
        public Context(Account account){
            this.account=account;
        }
        //调用计算方法
        public double doAccount(int amount, double d){
            return account.getPrice(amount, d);
        }
        
    }

    测试类

    package strategy;
    /**
     * 此策略模式测试类
     */
    public class Test {
    
        public static void main(String[] args) {
            // 声明商品
            String name = "DVD";
            int amount = 2;
            double price = 50;
            double sum = 0;
            // 声明对象
            // 普通客户
            Context context = new Context(new CommonAccount());
            sum = context.doAccount(amount, price);
            System.out.println("普通客户:没有折扣,购买的商品名称:    " + name + "       数量:   "
                    + amount + "      单价:" + price + "      应付金额:" + sum);
            // 普通会员
            context = new Context(new InsiderAccount());
            sum = context.doAccount(amount, price);
            System.out.println("普通会员:9折优惠,购买的商品名称:    " + name + "       数量:   "
                    + amount + "      单价:" + price + "      应付金额:" + sum);
            // VIP
            context = new Context(new VipAccount());
            sum = context.doAccount(amount, price);
    System.out.println(
    "VIP客户:8折优惠,购买的商品名称: " + name + " 数量: " + amount + " 单价:" + price + " 应付金额:" + sum); } }

    结果:

    普通客户:没有折扣,购买的商品名称:    DVD       数量:   2      单价:50.0      应付金额:100.0
    普通会员:9折优惠,购买的商品名称:    DVD       数量:   2      单价:50.0      应付金额:90.0
    VIP客户:8折优惠,购买的商品名称:    DVD       数量:   2      单价:50.0      应付金额:80.0
  • 相关阅读:
    yourphp常用标签
    如何访问他人电脑上的共享文件夹
    Win7如何分享局域网并设置共享文件夹账户和密码
    CLR Via CSharp读书笔记(21):自动内存管理(垃圾回收)
    《Java编程思想》之I/O系统
    WebCore::Node Dump
    java中的IO整理(3)数据操作流合并流压缩流输入输出重定向 老秋的日志 网易博客
    WebKit 分析–for android Braincol 博客园
    JavaScript EE,第 2 部分: 用 Ajax 调用远程 JavaScript 函数
    java中System重定向输出流
  • 原文地址:https://www.cnblogs.com/liunanjava/p/4352537.html
Copyright © 2011-2022 走看看