大话设计模式java版本 第二章 策略模式

package strategy;

//嵌入策略
public class CashContext {
    private Cash cs;

    public CashContext(Cash cs) {
        super();
        this.cs = cs;
    }

    public double getResult(double money){
        return cs.acceptCash(money);
    }

}
package strategy;

public interface Cash {
    public abstract double acceptCash(double money);
}
package strategy;
/*
 * 正常收费
 */
public class CashNormal implements Cash{

    @Override
    public double acceptCash(double money) {

        return money;
    }

}
package strategy;
/*
 * 打折策略
 */
public class CashRebate implements Cash{
    private double moneyRebate;

    public CashRebate() {
        super();
    }

    public CashRebate(double moneyRebate) {
        super();
        this.moneyRebate = moneyRebate;
    }

    public double getMoneyRebate() {
        return moneyRebate;
    }

    public void setMoneyRebate(double moneyRebate) {
        this.moneyRebate = moneyRebate;
    }

    @Override
    public double acceptCash(double money) {
            return money*moneyRebate;
    }

}
package strategy;
/*
 * 返利收费策略
 */

public class CashReturn implements Cash {
    private double moneyCondition;
    private double moneyReturn;

    public CashReturn() {
        super();
    }

    public CashReturn(double moneyCondition, double moneyReturn) {
        super();
        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;
    }

    @Override
    public double acceptCash(double money) {
        if(money>=moneyCondition){
            return money-(int)(money/moneyCondition)*moneyReturn;
        }
        return money;
    }

}

测试类:

package strategy;

import java.util.Scanner;

/*
 * 测试代码
 */
public class test {
    public static void main(String[] args) {
        CashContext cc=null;
        double moneyRebate=0;
        double money=0;
        Scanner sc= new Scanner(System.in);
        System.out.println("请输入折扣类型");
        String type = sc.next();
        switch (type) {
        case "正常收费":
            cc=new CashContext(new CashNormal());
            break;

        case "打折":
            System.out.println("请输入打折比例");
            moneyRebate=sc.nextDouble();
            cc=new CashContext(new CashRebate(moneyRebate));
            break;

        case "返利":
            cc=new CashContext(new CashReturn(500, 50));
            break;
        }
        System.out.println("请输入金额");
        money = sc.nextDouble();
        System.out.println(cc.getResult(money));
    }
}
时间: 2024-10-11 21:33:57

大话设计模式java版本 第二章 策略模式的相关文章

设计模式之第8章-策略模式(Java实现)

设计模式之第8章-策略模式(Java实现) “年前大酬宾了啊,现在理发冲500送300,冲1000送500了.鱼哥赶紧充钱啊,理发这事基本一个月一回,挺实惠的啊.不过话说那个理发店的老板好傻啊,冲1000才送500,不如冲两次500,这样可以送600呢.”“这只能说明你不是很笨,但是也算不上聪明.”“啊?难道我想错了?”“这是一种策略,策略,懂?他如果是冲1000送700的话你是不是很大的可能性冲500?而不是1000,但是如果这样的话,在“聪明人”,对,没错,就是你这样的人来说,冲两次500表

《大话设计模式》 --- 第二章 策略模式

面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类. 策略模式:定义了算法,分别封装,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. 策略模式是一种定义一系列算法的方法,从概念上看,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合. 策略模式中普通算法的策略类为环境定义了一系列可供重用的算法或行为.继承有助于析出出这些算法中的公共功能.

第二章 策略模式

策略模式封装了变化. 标准策略模式: /** * Created by hero on 16-3-29. */ public abstract class CashSuper { public abstract double acceptCash(double money); } /** * Created by hero on 16-3-29. */ public class CashNormal extends CashSuper{ @Override public double accep

《大话设计模式》c++实现 之策略模式

一.UML图   二.概念 策略模式:他定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户.   三.优点 (1)策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,他可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类之间的耦合. (2)策略模式的Strategy类曾是为Context定义了一些列的可供重用的算法或行为.集成有助于析取出这些算法中的公共功能. (3)策略模式简化了单元测试,因为

大话设计模式第十六章--状态模式

<?php abstract class State { abstract public function handle(Context $context); } class Concrete_state_A extends State { public function handle(Context $context) { echo "NOW IS IN STATE_A <br/>"; $context->state = new Concrete_state_

大话设计模式第十二章---外观模式PHP实现

<?php class Sub_system_one { public function method_one() { echo "subsystem one method one<br/>"; } } class Sub_system_two { public function method_two() { echo "subsystem one method two<br/>"; } } class Sub_system_three

设计模式之第20章-访问者模式(Java实现)

设计模式之第20章-访问者模式(Java实现) “嘿,你脸好红啊.”“精神焕发.”“怎么又黄了?”“怕冷,涂的,涂的,蜡.”“身上还有酒味,露馅了吧,原来是喝酒喝的啊.”“嘿嘿,让,让你发现了,今天来几个朋友,然后就小聚一下,小饮,几杯啦.”“小日子过得不错嘛.”“那是自然,要不然,再去喝两杯.”“别介,我还有要事要做呢,鱼哥你别坑我.”“什么,什么要紧事,能比的上,喝酒啊”.“走,陪我,陪我喝两杯去.”(作者已被拉走.)访问者登场. 访问者模式之自我介绍 累的死俺的杰特们(ladies and

设计模式之第3章-模板方法模式(Java实现)

设计模式之第3章-模板方法模式(Java实现) "那个,上次由于我老婆要给我做饭,所以就没有说完就走掉了...这个那个".这次和以前一样,先来开场福利(工厂方法模式已被作者踹下场).由美女抽象工厂介绍一下适用场景~大家欢迎 抽象工厂之应用场景 一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你要强调一系列相关的产品对象的设计以便进行联合使用时. 当你提供一个产品类库,而只想显示它们的接口而不是实现时. “人家要讲的就这么多了,接下来还是让今

设计模式之第11章-建造者模式(Java实现)

设计模式之第11章-建造者模式(Java实现) “那个餐厅我也是醉了...”“怎么了?”“上菜顺序啊,竟然先上甜品,然后是冷饮,再然后才是菜什么的,无语死了.”“这个顺序也有人这么点的啊.不过很少就是了,正常来说如果是中餐的话,都是先凉菜再热菜,然后是汤,最后是一些甜品什么的.西餐呐,先有头盘,用来开胃的,然后是汤(感觉好怪的说),再然后是副菜.主菜.蔬菜类.甜品.饮料来着.然后法国嘛就是blablabla...”(作者已被众人拖走.“让我说完啊,就剩几个国家了~啊~~”).咳咳,题归正转.你问