首先贴一段代码:

package xiao;

import java.util.Scanner;

class CashSuper{
    private int num;
    private double price;
    public int getNum() {
        return num;
    }
    public void setNum(int num) {
        this.num = num;
    }
    public double getPrice() {
        return price;
    }
    public void setPrice(double price) {
        this.price = price;
    }
    public double acceptCash(double money){
        return money;
    }
}
class CashNormal extends CashSuper{
}
class CashRebate extends CashSuper{
    private double rebate;
    public CashRebate(double rebate){
        this.rebate = rebate;
    }
    public double getRebate() {
        return rebate;
    }
    public void setRebate(double rebate) {
        this.rebate = rebate;
    }
    public double acceptCash(double money){
        return money*rebate;
    }    
}
class CashReturn extends CashSuper{
    private double moneyCondition;
    private double moneyReturn;
    public CashReturn(double moneyCondition,double moneyReturn){
        this.moneyCondition = moneyCondition;
        this.moneyReturn = moneyReturn;
    }
    public double getMoneyCondition() {
        return moneyCondition;
    }
    public void setMoneyCondition(double moneyCondition) {
        this.moneyCondition = moneyCondition;
    }
    public double getMoneyReturn() {
        return moneyReturn;
    }
    public void setMoneyReturn(double moneyReturn) {
        this.moneyReturn = moneyReturn;
    }
    public double acceptCash(double money){
        if(money > moneyCondition){
            return money - Math.floor(money/moneyCondition)*moneyReturn;
        }else{
            return money;
        }
    }    
}
class CashFactory{
    public static CashSuper creatCash(String select){
        CashSuper cash = new CashSuper();
        Scanner in = new Scanner(System.in);
        switch(select){
        case"normal":
            cash = new CashNormal();
            break;
        case"rebate":
            System.out.print("please enter the rebate: ");
            double rebat = in.nextDouble();
            cash = new CashRebate(rebat);
            break;
        case"return":
            System.out.print("please enter the moneyCondition: ");
            double moneyCondition = in.nextDouble();
            System.out.print("please enter the moneyReturn: ");
            double moneyReturn = in.nextDouble();
            cash = new CashReturn(moneyCondition,moneyReturn);
            break;
        }
        in.close();
        return cash;
    }
}
class CashContext{
    CashSuper cs =null;
    Scanner in = new Scanner(System.in);
    public CashContext(String type){
        switch(type){
        case"normal":
            CashNormal cash0 = new CashNormal();
            cs = cash0;
            break;
        case"rebate":
            System.out.print("please enter the rebate: ");
            double rebat = in.nextDouble();
            CashRebate cash1 = new CashRebate(rebat);
            cs = cash1;
            break;
        case"return":
            System.out.print("please enter the moneyCondition: ");
            double moneyCondition = in.nextDouble();
            System.out.print("please enter the moneyReturn: ");
            double moneyReturn = in.nextDouble();
            CashReturn cash2 = new CashReturn(moneyCondition,moneyReturn);
            cs = cash2;
            break;
        }
    }
    public double GetResult(double money){
        return cs.acceptCash(money);
    }
}

public class TestDemo{
    public static void main(String[] args)throws Exception{
        Scanner in = new Scanner(System.in);
        System.out.print("please enter the price: ");
        double price = in.nextDouble();
        System.out.print("please enter the num: ");
        int num = in.nextInt();
        System.out.print("please enter the select: ");
        String select = in.next();
        CashContext csuper = new CashContext(select);
        System.out.println(csuper.GetResult(num*price));
        in.close();
    }
}

策略模式:一种定义一系列算法的方法。所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合。

策略模式是用来封装算法的,只要在分析过程中听到需要再不同时间应用不同的业务规则,就可以考虑。

Chapter 2.策略模式的更多相关文章

  1. C++ 之 策略模式

    1  会飞的鸭子 Duck 基类,包含两个成员函数 swim() 和 display():派生类 MallardDuck,RedheadDuck 和 RubberDuck,各自重写 display() ...

  2. Python设计模式: 最佳的"策略"模式实践代码

    Python设计模式: 最佳的"策略"模式实践代码 今天抽空看了下流畅的python,发现里面介绍了不少python自带的库的使用实例,用起来非常的优雅. 平时用Python来写爬 ...

  3. javascript设计模式:策略模式

    前言 策略模式有效利用组合.委托.多态等技术和思想,可以有效避免多重条件选择语句. 策略模式对开放-封闭原则提供了很好的支持,将算法封装在strategy中,使得他们易于切换.理解.扩展. 策略模式中 ...

  4. StrategyPattern (策略模式)

    /** * 策略模式 * @author TMAC-J * 根据环境的不同选择不同的策略,把策略用接口抽象出来 */ public class StrategyPattern { interface ...

  5. JAVA 设计模式之策略模式

    定义:定义一组算法,将每个算法都封装起来,并且使他们之间可以互换. 类型:行为类模式 策略模式是对算法的封装,把一系列的算法分别封装到对应的类中,并且这些类实现相同的接口,相互之间可以替换.在前面说过 ...

  6. Java设计模式之策略模式(Strategy)

    前言: 最近一直在学习基于okHttp网络请求,学习的过程中就想起了之前项目中有这么一个需求不同的接口要采用不同的加密方式,比如登录之前要采用RSA加密,登录之后要采用AES加密,当时是采用靠传递一个 ...

  7. 设计模式(一):“穿越火线”中的“策略模式”(Strategy Pattern)

    在前段时间呢陆陆续续的更新了一系列关于重构的文章.在重构我们既有的代码时,往往会用到设计模式.在之前重构系列的博客中,我们在重构时用到了“工厂模式”.“策略模式”.“状态模式”等.当然在重构时,有的地 ...

  8. 《Head First 设计模式》之策略模式

    作者:Grey 原文地址:http://www.cnblogs.com/greyzeng/p/5915202.html 模式名称 策略模式(Strategy Pattern) 需求 模拟鸭子游戏,游戏 ...

  9. 学C#之设计模式系列笔记(1)策略模式

    一.借鉴说明 1.<Head First Design Patterns>(中文名<深入浅出设计模式>) 2.维基百科,策略模式,https://zh.wikipedia.or ...

随机推荐

  1. ASP.NET MVC进阶之路:依赖注入(Di)和Ninject

    0X1 什么是依赖注入 依赖注入(Dependency Injection),是这样一个过程:某客户类只依赖于服务类的一个接口,而不依赖于具体服务类,所以客户类只定义一个注入点.在程序运行过程中,客户 ...

  2. HDU 1240 Asteroids!

    三维广搜 #include <cstdio> #include <iostream> #include <cstring> #include <queue&g ...

  3. C# Windows Sockets (Winsock) 接口 (转)

    在.Net中,System.Net.Sockets 命名空间为需要严密控制网络访问的开发人员提供了 Windows Sockets (Winsock) 接口的托管实现.System.Net 命名空间中 ...

  4. Flex4 设置combobox选项不可编辑

    近日做数据的增删改查,使用的flex4的ComboBox控件---> flex4中ComboBox其实就是TextInput的叠加 flex3中ComboBox其实就是Label的叠加 开始是使 ...

  5. UIMenuController在label中的使用

    要想在label中使用 必须是继承于label的分类 ////  MYlabel.m//  MenuController////  Created by 张明 on 16/3/8.//  Copyri ...

  6. 【PAT】1009. Product of Polynomials (25)

    题目链接:http://pat.zju.edu.cn/contests/pat-a-practise/1009 分析:简单题.相乘时指数相加,系数相乘即可,输出时按指数从高到低的顺序.注意点:多项式相 ...

  7. IOS中的自动布局

    Autolayout是一种“自动布局”技术,专门用来布局UI界面 Autolayout能很轻松地解决屏幕适配问题 Autolayout的两条核心概念:   >1 参照:通过参照其他控件或父控件来 ...

  8. Jquery构建Form表单Post提交数据的简单方法

    $.extend({ PostSubmitForm: function (url, args) { var body = $(document.body), form = $("<fo ...

  9. 根据选择项过滤GridView

    前台代码: <div> <asp:CheckBoxList ID="CheckBoxList1" runat="server" AutoPos ...

  10. innerhtml和innertext的用法以及区别

    例如: <div id="test"> <span style="color:red">test1</span> test2 ...