php实现设计模式之 策略模式
策略模式: 定 义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。是一种行为模式。 策略模式包含三种角色 1 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。 2 具体策略角色:包装了相关的算
策略模式:定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。是一种行为模式。
策略模式包含三种角色
1 抽象策略角色: 策略类,通常由一个接口或者抽象类实现。
2 具体策略角色:包装了相关的算法和行为。
3 环境角色:持有一个策略类的引用,最终给客户端调用。
举个例子:有多种排序的方法,我可以写一个排序类,每一种排序算法写一个方法,客户端调用时,知道每一种方法即可。但是新增一种算法时,或者某一种算法重写,必须修改这个算法类。当这个算法类很大时,变得难以维护了。
策略模式把对象本身(配置类)和算法类(具体算法类)区分开来。这样算法类的修改,新增,不关系到其他类的修改,只是用户可以自行替换算法。
UML类图如下
<?php /* * 策略模式:定义一系列算法,并且把每一个算法封装起来,并且使它们可以相互替换 * 策略模式使得算法可以独立于使用它的客户而变化 */ //抽象策略接口,完成某件事情 interface category{ public function dosomething(); } //具体算法类,实现具体的事情 class category_a implements category{ public function dosomething(){ echo 'do A'; } } class category_b implements category{ public function dosomething(){ echo 'do B'; } } class category_c implements category{ public function dosomething(){ echo 'do C'; } } //配置类,使用抽象策略接口来配置 class context{ public $cg; public function __construct(category $a){ $this->cg = $a; } public function dodo(){ return $this->cg->dosomething();//同一方法作用于不同类的对象,产生不同的结果,这在php中就是多态 } } //客户端调用,由客户自己决定使用哪种策略,即客户自行实例化算法类。区别于简单工厂模式 //简单工厂模式是对象的创建模式,客户端不创建对象,只给出参数,由工厂方法来决定创建哪一个实例 //也就是说,简单工厂模式客户端只传参数,策略模式客户端传算法实例 $m = new context(new category_b()); $m->dodo(); ?>
上面实现了策略模式。
现在我要增加一种算法,do D;我只需要新写一个类
class category_d implements category{ public function dosomething(){ echo 'do D'; } }
客户端调用,替换成d就可以了
$m = new context(new category_b());
区别于简单工厂模式(见简单工厂模式篇)。
策略模式缺点:
客户端必须知道所有的策略类,并自行决定使用哪一个策略类。这就意味着客户端必须理解这些算法的区别,以便适时选择恰当的算法类。换言之,策略模式只适用于客户端知道所有的算法或行为的情况。
当存在以下情况时使用Strategy模式
1)• 许多相关的类仅仅是行为有异。 “策略”提供了一种用多个行为中的一个行为来配置一个类的方法。即一个系统需要动态地在几种算法中选择一种。
2)• 需要使用一个算法的不同变体。例如,你可能会定义一些反映不同的空间 /时间权衡的算法。当这些变体实现为一个算法的类层次时 ,可以使用策略模式。
3)• 算法使用客户不应该知道的数据。可使用策略模式以避免暴露复杂的、与算法相关的数据结构。
4)• 一个类定义了多种行为 , 并且这些行为在这个类的操作中以多个条件语句的形式出现。将相关的条件分支移入它们各自的Strategy类中以代替这些条件语句。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

ファイルのアップロードを行うには、フォーム ヘルパーを使用します。ここではファイルアップロードの例を示します。

CakePHP は、PHP 用のオープンソース フレームワークです。これは、アプリケーションの開発、展開、保守をより簡単にすることを目的としています。 CakePHP は、強力かつ理解しやすい MVC のようなアーキテクチャに基づいています。モデル、ビュー、コントローラー

CakePHP でデータベースを操作するのは非常に簡単です。この章では、CRUD (作成、読み取り、更新、削除) 操作について理解します。
