商场促销——策略模式

策略模式(Strategy):它定义了算法家族,分别封装起来,让他们之间可以相互替换,此模式让算法的变化,不会影响到使用算法的客户。

面向对象的编程并不是类越多越好类的划分是为了封装但分类的基础是抽象具有相同属性和功能的对象的抽象集合才是类”。打一折和打九折只是形式的不同,抽象分析出来,所有的打折算法都是一样的,所以打折算法应该是一类。

Strategy类,定义所有支持的算法的公共接口。

//抽象算法类
abstract class Strategy{
    //算法方法
    public abstract void AlgorithmInterface();
}

ConcreteStrategy封装了具体的算法或行为,继承与Strategy

//具体算法A
class ConcreteStrategyA extends Strategy{
    //算法A实现方法
    public void AlgorithmInterface(){
        //算法A实现
    }
}

//具体算法B
class ConcreteStrategyB extends Strategy{
    //算法B实现方法
    public void AlgorithmInterface(){
        //算法B实现
    }
}

//具体算法C
class ConcreteStrategyC extends Strategy{
    //算法C实现方法
    public void AlgorithmInterface(){
        //算法C实现
    }
}

Context,用一个ConcreteStrategy来配置维护一个对Strategy对象的引用。

//上下文
class Context{
    Strategy strategy;
    public Context(Strategy strategy){
        this.strategy = strategy;
    }
    //上下文接口
    public void ContextInterface(){
        strategy.AlgorithmInterface();
    }
}

客户端代码

static void Main(String[] args){
    Context context;

    context = new Context(new ConcreteStrategyA());
    context.ContextInterface();

    context = new Context(new ConcreteStrategyB());
    context.ContextInterface();

    context = new Context(new ConcreteStrategyC());
    context.ContextInterface;

}
时间: 2024-12-24 17:43:11

商场促销——策略模式的相关文章

第 2 章 商场促销——策略模式

背景:做一个商场收银软件 收费情形:正常收费.打八折.打七折.打五折 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少各种算法类与使用算法类之间的耦合. 策略模式的Strategy类参差为Context定义了一系列的可供重用的算法或行为.继承又助于析取出这些算法中的公共功能. 策略模式的优点是简化了单元测试,因为每个算法都有自己的类,可以通过自己的借口单独测试. 当不同的行为堆砌在一个类中时,就很难避免使用条

大话设计模式之策略模式

第二章:商场促销——策略模式 策略模式的定义: 策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,知识实现不同,他可以以相同的方式调用所有的算法,减少了各类算法类与使用算法类之间的耦合 策略模式的优点 : 1. 策略模式的Strategy 类层次为Context定义了一些列的可供重用的算法或行为.继承有助于析取这些算法中的公共功能 2.简化了单元测试,因为每个算法都要自己的类,可以通过自己的接口单独测试 当不同的行为堆砌在一个类中时,就很难避免使用条件语句来选择

深入浅出设计模式——策略模式(Strategy Pattern)

模式动机 完成一项任务,往往可以有多种不同的方式,每一种方式称为一个策略,我们可以根据环境或者条件的不同选择不同的策略来完成该项任务.在软件开发中也常常遇到类似的情况,实现某一个功能有多个途径,此时可以使用一种设计模式来使得系统可以灵活地选择解决途径,也能够方便地增加新的解决途径. 在软件系统中,有许多算法可以实现某一功能,如查找.排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的

设计模式之策略模式(Strategy)详解及代码示例

一.策略模式的定义 策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户.策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理. 二.策略模式优缺点 策略模式的主要优点如下. 多重条件语句不易维护,而使用策略模式可以避免使用多重条件转移语句. 符合开闭原则,可以在不修改原代码的情况下,灵活增加新算法. 算法使用和实现隔离分离,提高算法的保密性和

《大话设计模式》——读后感 (2)商场促销?——策略模式

 按照我的习惯,先看策略模式UML结构图: 从图中,我看到了Strategy类,还有具体的实现类,还有一个Context,感觉和简单工厂好像啊,只是名字不一样而已.此处,我还用接口. 什么是策略模式呢? 实现: 原文是针对商场促销进行各种各样的打折进行设计案例的,而大话设计模式中还提到: 等等,打折.返现等等一系列促销具体方式只是一些算法,而算法本身也是一种策略.那我在此就要偷懒了: Operation接口,OperationAdd.OperationDelete.OperationDIv.Op

二、策略模式-商场促销活动

以商场收银为例,理解并实践"策略模式". 简单商场促销活动描述:营业员提供商品单价.数量.商场目前的活动(满减.打折等),计算用户最终需要支付的金额. 一.面向过程的实现方式 1 package secondStrategy; 2 import java.text.DecimalFormat; 3 public class StrategyTest { 4 public static void main(String[] args) { 5 // 营业员提供信息 6 double to

大话设计模式第二章---商场促销简单工厂模式、策略模式 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

(三)设计模式之PHP项目应用(策略模式:商场收银系统)

1 策略模式简介 策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式让算法独立于使用它的客户而独立变化. 2 模式组成 1)抽象策略角色(Strategy): 策略类,通常由一个接口或者抽象类实现. 2)具体策略角色(ConcreteStrategy): 包装了相关的算法和行为. 3)环境角色(Context): 持有一个策略类的引用,最终给客户端调用. 3 模式核心思想 策略模式是一种定义一些列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是

对设计模式的总结之简单工厂与策略模式

前言 面向对象编程追求的本质-提高扩展性.可维护性.灵活性和复用性.合理利用面向对象6个原则,能够很好的达到要求.如何利用好就是至关重要的了,前人总结了23+个设计模式能够让初学者更容易学到其中的精髓,本文就说说我对本人对简单工厂模式.策略模式的见解. 简单工厂模式与策略模式 简单工厂模式 工作中,常常遇到需要做一个功能(鸭子),这个功能中含有可控个数的子操作功能(鸭子叫,鸭子跑,鸭子飞),而且子功能在不同的情况下处理方式又不相同(成年鸭子/小鸭子叫,成年鸭子/小鸭子跑,成年鸭子/小鸭子飞).我