设计模式之PHP项目应用——策略模式设计商场收银系统

1 策略模式简介

    策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。
    

2 模式组成

    1)抽象策略角色(Strategy):
            策略类,通常由一个接口或者抽象类实现。
    
    2)具体策略角色(ConcreteStrategy):
           包装了相关的算法和行为。
    
    3)环境角色(Context):
          持有一个策略类的引用,最终给客户端调用。
    

3 模式核心思想

    策略模式是一种定义一些列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用所有的算法,减少了各种算法类与使用算法类的耦合。命令模式的算法是相互独立的,每个命令做的工作是不同的。而策略模式却是在做同一种工作。

 

4 模式架构图

 

5 程序架构

1) 抽象策略(Strategy)

 

 

// 定义接口,定义了要实现的策略算法
interface IStrategy{
    // 算法方法
    public function doFunction();
}

 

 

 

 

 

2) 具体策略(ConcreteStrategy)

 

// 具体A策略
class ConcreteStrategyA implements IStrategy{

    public function doFunction(){
        echo '算法A实现';
    }
}

// 具体B策略
class ConcreteStrategyB implements IStrategy{

    public function doFunction(){
        echo '算法B实现';
    }
}

// 具体C策略
class ConcreteStrategyC implements IStrategy{

    public function doFunction(){
        echo '算法C实现';
    }
}

 

 

 

 

 

3)环境类(Context)

 

// 环境类,维护一个Strategy应用
class Context{
    // 策略
    private $_strategy = null;

    public function __construct(IStrategy $strategy){
        $this->_strategy = $strategy;
    }

    public function doWork(){
        return $this->_strategy->doFunction();
    }
}

 

 

 

 

 

4)客户端(Client)

 

// 客户端类
class Client{

    public function main($data){
        // A策略
        $context = new Context(new ConcreteStrategyA());
        $context->doWork();
        
        // B策略
        $context = new Context(new ConcreteStrategyB());
        $context->doWork();
        
        // C策略
  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值