第二章 策略模式

策略模式封装了变化。

标准策略模式:

/**
 * 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 acceptCash(double money) {
        return money;
    }
}
/**
 * Created by hero on 16-3-29.
 */
public class CashRebate extends CashSuper {
    private double moneyRebate = 1d;

    public double getMoneyRebate() {
        return moneyRebate;
    }

    public void setMoneyRebate(double moneyRebate) {
        if (moneyRebate < 0) {
            throw new IllegalArgumentException("what‘s wrong with this supermarket?!!!");
        }
        this.moneyRebate = moneyRebate;
    }

    public CashRebate(double moneyRebate) {
        this.setMoneyRebate(moneyRebate);
    }

    @Override
    public double acceptCash(double money) {
        return getMoneyRebate() * money;
    }
}
/**
 * Created by hero on 16-3-29.
 */
public class CashContext {
    private CashSuper cashSuper = null;

    public CashContext(CashSuper cashSuper) {
        this.cashSuper = cashSuper;
    }

    public double getResult(double money) {
        return cashSuper.acceptCash(money);
    }
}
public class Main {

    public static void main(String[] args) {
        CashContext cashContext = null;
        cashContext = new CashContext(new CashNormal());
        System.out.println(cashContext.getResult(12));
        cashContext = new CashContext(new CashRebate(0.3));
        System.out.println(cashContext.getResult(12));
    }
}

策略与简单工厂结合:

简单工厂模式对类似“满300减200、满400减100”的变化进行有效封装,除非另外制定一套规则比如:“满减-400,100、满减-500,100”,在swich语句中只取‘-’之前的作case条件,其后跟参数,多个参数以

‘,’分割。

策略与简单工厂的结合使后端对前端的暴露降低了。算是集成了二者的优点吧。

时间: 2024-08-07 00:15:15

第二章 策略模式的相关文章

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

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

大话设计模式第二章---商场促销简单工厂模式、策略模式 PHP实现及对比

简单工厂模式: <?php abstract class Cash_super { abstract public function accept_cash(float $money); } class Cash_normal extends Cash_super { public function accept_cash(float $money) { return $money; } } class Cash_rebate extends Cash_super { private $_mon

设计模式第二站--策略模式

从简单工厂模式出发,现在到达第二站:策略模式.那么什么是策略模式,它作为设计模式的第二站和第一站又有怎样的联系或者区别,它的理解和学习能否让我们用到和联系到第一站?怎么个关联法? 别急!下面我们就一起探究,康忙,北鼻! 一.什么是策略模式(Stragety)?          按照书本上的定义来说,策略模式定义了算法家族,分别封装起来,让它们之间可以互相替换:此模式让算法的变化,不会影响到使用算法的用户. 既然是定义都比较抽象,那么就先通过它的结构图来认识一下这个神秘的事物. 也许还是有些抽象

大话设计模式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 abstr

大话设计模式 笔记2——策略模式

定义Context类,将简单工厂模式中,在客户端的判断转移到了后台context类中,定义运算的基类,该基类具有运算的抽象方法,扩展出多种子类后,分别对该抽象方法进行重写:后台根据前台的条件,判断并new出对应的对象后,将对象赋给一个基类对象,由基类对象调用对应的计算方法. Tips:在客户端中尽可能地消除判断等逻辑操作是很重要的让客户端认识更少的类任何需求的变更都是要成本的

大话设计模式第九章---原型模式PHP实现

首先,PHP对象clone参考资料: http://php.net/manual/en/language.oop5.cloning.php#object.clone Object Cloning¶ Creating a copy of an object with fully replicated properties is not always the wanted behavior. A good example of the need for copy constructors, is i

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

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

大话设计模式_简单工厂模式(Java代码)

简单的描述:一个父类.多个子类,实例化那个子类由一个单独的工厂类来进行 图片摘自大话设计模式: 运算类: 1 package com.longsheng.simpleFactory; 2 3 public class Calculate { 4 5 private double firstNum; 6 private double secondNum; 7 8 public double getFirstNum() { 9 return firstNum; 10 } 11 12 public v

大话设计模式之简单工厂模式&amp;工厂方法模式&amp;抽象工厂模式

创造类模式分为三种:简单工厂模式,工厂模式和抽象工厂模式. 定义: 简单工厂模式:用一个单独的类来做创造实例的过程. 工厂模式:一个用于创建对象的接口,让子类决定实例化哪一个类,讲一个类的实例化 延迟到其子类. 抽象工厂模式:为创建一组相关或相互依赖的对象的类,而不指定具体类. 结构图: 这是简单工厂的结构图,从图中就很好理解. 简单工厂的优点: 根据用户需要,new出需要的对象. 但是简单工厂弊端: 当新加入一个功能是,就要修改工厂.这个时候,就需要工厂模式了. 从图中我们可以看出: 工厂模式