php设计模式系列:策略模式(代码片段)

hb01846 hb01846     2022-12-14     394

关键词:

策略模式

策略模式作为一种软件设计模式,指对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。
组成

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

实现
结构图
技术图片

步骤

    定义抽象角色类(定义好各个实现的共同抽象方法)
    定义具体策略类(具体实现父类的共同方法)
    定义环境角色类(接收保存实例,统一执行策略类接口方法)

PHP代码实现

 1 <?php
 2 //抽象策略模式
 3 interface Strategy
 4 
 5     public function AlgorithmInterface();
 6 
 7 
 8 //具体策略模式
 9 class ConcreteStrategyA implements Strategy
10 
11     public function AlgorithmInterface()
12         var_dump(‘A实现‘);
13     
14 
15 class ConcreteStrategyB implements Strategy
16 
17     public function AlgorithmInterface()
18         var_dump(‘B实现‘);
19     
20 
21 class ConcreteStrategyC implements Strategy
22 
23     public function AlgorithmInterface()
24         var_dump(‘C实现‘);
25     
26 
27 
28 //环境角色类
29 class Context
30 
31     public function __construct($strategy)
32         $this->strategy=$strategy;
33     
34     public function contextInterface()
35         $this->strategy->AlgorithmInterface();
36     
37 
38 $a=new Context(new ConcreteStrategyA());
39 $a->contextInterface();


运行结果

string(7) "A实现"

设计模式系列2策略模式(代码片段)

什么是策略模式策略是对算法的封装,是一种形为模式,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式和简单工厂很相似,确有不同,策略是一种行为模式,而简... 查看详情

前端也要学系列:设计模式之策略模式(代码片段)

做前端开发已经好几年了,对设计模式一直没有深入学习总结过。随着架构相关的工作越来越多,越来越能感觉到设计模式成为了我前进道路上的一个阻碍。所以从今天开始深入学习和总结经典的设计模式以及面向对象的几大原... 查看详情

策略模式(代码片段)

策略模式标签:设计模式初识策略模式定义定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。结构和说明Strategy:策略接口,用来约束一系列具体的策略算法。C... 查看详情

策略模式(代码片段)

策略模式标签:设计模式配套源码github地址初识策略模式定义定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。结构和说明Strategy:策略接口,用来约束一系列... 查看详情

设计模式之策略模式(行为型)(代码片段)

一、模式定义策略模式:定义一系列算法,然后将每一个算法封装起来,并将它们可以互相替换。也就是将一系列算法封装到一系列策略类里面。策略模式是一种对象行为型模式。策略模式符合“开闭原则“StrategyPattern:Defineafami... 查看详情

策略模式(代码片段)

...摘抄自:2018黑马程序最新面试题汇总策略模式定义了一系列算法,并将每个算法封装起来,使他们可以相互替换,且算法的变化不会影响到使用算法的客户。需要设计一个接口,为一系列实现类提供统一的方法,多个实现类实... 查看详情

设计模式之策略模式(代码片段)

策略模式是一种定义一系列算法的方法,从概念上来看,所有这些算法完成的都是相同的工作,只是实现不同,它可以以相同的方式调用不同的算法,减少了各种算法类与使用算法类之间的耦合。1|策略模式定义策略模式是一种... 查看详情

设计模式-策略模式(代码片段)

策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把使用算法的责任和算法的... 查看详情

javascript设计模式之策略模式(代码片段)

...一个个封装起来。将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来。策略模式的实现并不复杂,关键是如何从策略模式的实现 查看详情

设计模式-策略模式(代码片段)

...以相互替换。 将不变的部分和变化的部分隔开是每个设计模式的主题。策略模式的目的就是将算法的实现和算法的使用分离开来。 策略模式包含三个角色:  Context:环境类  Strategy:抽象策略类  ConcreteStrategy:... 查看详情

设计模式系列2策略模式(代码片段)

什么是策略模式策略是对算法的封装,是一种形为模式,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式和简单工厂很相似,确有不同,策略是一种行为模式,而简... 查看详情

大话设计模式之策略模式读后感(代码片段)

策略模式:定义了算法家族,分别封装起来,让他们呢之间可以互相的替换,此模式让算法的变化不会影响到使用算法的客户。UML类图:解读:策略模式是定义一系列的算法,从概念上来讲,这些算法完成的工作都是一样的,只... 查看详情

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

一、策略模式的定义  策略(Strategy)模式的定义:该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。策略模式属于对象行为模式,它通过对算法进行封装,把... 查看详情

策略模式(代码片段)

定义一系列算法,将每一个算法封装起来,并让他们可以相互替换。 1、定义一个抽象策略类/***定义一个购买球的策略类*@authorTim**/publicinterfaceBallpublicdoubleprice(doubleprice);ViewCode 2、定义二种具体的策略类/***足球的购买价... 查看详情

策略模式的案例(代码片段)

...0c;一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context对象。策略对象改变context对象的执行算法。介绍... 查看详情

策略模式(代码片段)

策略模式是指定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。也就是说这些算法所完成的功能一样,对外的接口一样,只是各自实现上存在差异。用策略模式... 查看详情

行为型设计模式-策略模式详解(代码片段)

基本介绍策略模式(StrategyPattern):定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立于使用它的客户而变化,是一种对象行为型模式。模式结构Context(环境角色):持有抽象策略角色的... 查看详情

策略模式(代码片段)

...态在一个对象的多种行为进行切换的场景。意图:定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换,以避免在多种算法相似的场景下,使用过多的if...else所带来的复杂和难以维护注意:当一个系统的策略多于... 查看详情