`

足智多谋的策略模式(Strategy Pattern)

阅读更多

夏天来了,深圳的大小梅沙必将是人满为患,大家在游泳时还是要注意安全地。那如果真人有溺水了怎么办?有人会打120,有人会做人工呼吸(必须得是个美女才行),有人会用拳头叩击心前区急救。他们的做法都是对的,只是不同情况,不同的人会有不同的策略!既然这样,那就用策略模式来模拟下,类图如下:


由图可以看出,策略模式非常简单,直接上代码:

 

<?php
interface IStrategy{
	public function operator();
}

class Call120 implements IStrategy{
	public function operator(){
		echo "拨打120!\n";
	}
}

class Breath implements IStrategy{
	public function operator(){
		echo "做人工呼吸!\n";
	}
}

class Rap implements IStrategy{
	public function operator(){
		echo "用拳头叩击心前区!\n";
	}
}

class Rescue{
	private $strategy;
	public function __construct($strategy){
		$this->strategy = $strategy;
	}
	public function operator(){
		$this->strategy->operator();
	}
}

echo "有人落水了!\n";
$rescue = new Rescue(new Call120());
$rescue->operator();
$rescue = new Rescue(new Breath());
$rescue->operator();
$rescue = new Rescue(new Rap());
$rescue->operator();

?>
运行结果:
有人落水了!
拨打120!
做人工呼吸!
用拳头叩击心前区!
[Finished in 0.1s]

 

 

 

策略模式的定义

也叫政策模式,定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。

策略模式使用的就是面向对象的继承和多态机制,由三个角色构成

1、Rescue封装角色

也叫上下文角色,起承上启下的封装作用,屏蔽高层模块对策略、算法的直接访问、封装可能存在的变化。

2、Strategy抽象策略角色

策略、算法家族的抽象,通过为接口,定义每个策略或算法必须具有的方法和属性。

3、ConcreteStrategy具体策略角色

实现抽象策略中的操作,该类含有具体的算法。

 

 

策略模式的优点

1、算法可以自由切换

这是策略模式本身定义的,只要实现抽象策略,它就成为策略家族的一个成员,通过封装角色对其进行封装,保证对外提供“可自由切换”的策略。

2、避免使用多重条件判断

多重条件语句不易维护,而且出错的概率大大增加。

3、扩展性良好

在现有的系统中增加一个策略太容易了,只要实现接口就可以了,其他都不用修改,类似于一个可反复拆卸的插件,这大大地符合了OCP原则。

 

 

策略模式的缺点

1、策略类数量增多

每一个策略都是一个类,重用的可能性很小,类数量很多。

2、所有的策略类都需要对外暴露

上层模块必须知道有哪些策略,然后才能决定使用哪一个策略,这与迪米特法则是相违背的。不过可以使用其他模式来修正这个缺陷,如工厂模式、代理模式事享元模式。

 

 

 

策略模式的使用场景

1、多个类只有在算法或行为上稍有不同的场景

2、算法需要自由切换的场景

3、需要屏蔽算法规则的场景

 

 

策略模式的扩展

在JAVA中,利用其本身的枚举类型可以将策略模式扩展为策略枚举模式,目前PHP尚不支持。

 

 

如果系统中的一个策略家族的具体策略数量超过4个,则需要考虑使用混合模式,解决策略类膨胀和对外暴露的问题,否则日后的系统维护就会成为一个烫手山芊,谁都不想接。


 

  • 大小: 6.1 KB
3
4
分享到:
评论

相关推荐

    足智多谋造句(精选100句).docx

    1. 在历史故事中,诸葛亮被誉为足智多谋的代表,他的事迹如火烧赤壁、草船借箭等展现了他卓越的军事策略和智谋。他的智谋不仅体现在战争中,还体现在治国理政上,如安居乐业的“隆中对”策略。 2. 在人际交往中,...

    足智多谋的策士智慧(1).docx

    7. 策略与智慧:《足智多谋的策士智慧》这本书旨在将古代的智慧应用于现代社会,通过对《六韬》和《三略》的解读,为现代人提供处世和管理的指导。 总结来说,这些知识点强调了中国古代智者对领导力、人际关系、...

    2--[足智多谋的法师].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码

    2--[足智多谋的法师].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码2--[足智多谋的法师].zip源码scratch2.0 3.0编程项目源文件源码案例素材源代码2--[足智多谋的法师].zip源码scratch2.0 3.0编程项目...

    scratch2源码足智多谋的法师

    scratch2源码足智多谋的法师本资源系百度网盘分享地址

    足智多谋的法师-少儿编程scratch项目源代码文件案例素材.zip

    《足智多谋的法师-少儿编程Scratch项目源代码文件案例素材》是一个专为儿童设计的编程学习资源,旨在通过趣味游戏的方式引导孩子们接触和理解编程基础。在这个项目中,孩子们将扮演“足智多谋的法师”,利用Scratch...

    scratch编程项目源代码文件案例素材-[足智多谋的法师].zip

    本压缩包“scratch编程项目源代码文件案例素材-[足智多谋的法师].zip”包含了一个基于Scratch的完整游戏项目,名为“足智多谋的法师”,它是一个很好的少儿趣味编程示例,适合初学者学习和探索。 在"足智多谋的法师...

    足智多谋:Kotlin的Android资源绑定

    "足智多谋:Kotlin的Android资源绑定"这个主题聚焦于如何高效地利用Kotlin与Android资源进行交互,提升开发效率和代码可读性。下面将详细探讨相关知识点。 1. **Android资源** Android应用中的资源包括字符串、...

    hapi-mongoose-resource:用于 hapi 框架的足智多谋的猫鼬对象

    用于 hapi 框架的足智多谋的猫鼬对象 轻松为您的猫鼬模型创建处理程序 自动为您的处理程序生成路由 充分利用 api 响应的引用 安装 新产品经理 $ npm install hapi-mongoose-handler 克隆到项目中 $ cd /path/to/...

    最新人教版五年级语文下册第六单元《田忌赛马》教案-.pdf

    3. **教学重点**:理解两次赛马时,田忌的马出场顺序变化如何导致比赛结果的逆转,从而展示孙膑的足智多谋。 4. **教学难点**:分析田忌如何在孙膑的建议下,通过调整马匹出场顺序,实现从失败到胜利的转变,让学生...

    最新人教版五年级语文下册《田忌赛马》第二课时教案-.pdf

    这里体现了孙膑的足智多谋,也揭示了观察、分析问题和科学思维的重要性。 教学难点在于解释为什么仅调换马的出场顺序就能改变比赛结果。这是因为赛马比赛的胜负取决于马匹的相对实力和出场顺序的策略。在第二次比赛...

    16《田忌赛马》课后作业(含答案)-五下语部编版.pdf

    例如,孙膑胸有成竹地说“一定能让您赢”,展现了他对于策略的信心和足智多谋的性格特点。 2. **关联词语的使用**:学生要学会根据上下文语境选择合适的关联词填空,例如“而且”、“因此”、“无论”、“虽然”、...

    五年级语文下册 9.2田忌赛马教案2 长春版-长春版小学五年级下册语文教案.doc

    2. **人物性格与智慧**:孙膑作为著名军事家,展现出深思熟虑、足智多谋的特点,他的策略改变了比赛结果,展示了智慧的力量。同时,田忌的谦虚接受建议也值得学习。 3. **教学目标**:使学生理解故事背后的道理,...

    mudskipper:hapi 的一个足智多谋的路由器插件

    ##弹涂鱼这是 Hapi 的一个资源丰富的路由插件。 给定一个描述可用资源的对象,将为资源上定义的每个方法创建一个路由。 例如: var Hapi = require ( 'hapi' ) ;var resources = { users : { index : function ( ...

    新人教统编版五四制四年级上册语文 26课 西门豹治邺 课时练.docx

    这一部分要求学生理解西门豹的策略,并评价他的性格特点,如足智多谋、讲究策略、相信科学,同时摒弃迷信。 综合来看,这份课时练习旨在帮助学生深入理解《西门豹治邺》这篇课文,提高他们的语言运用能力,培养批判...

    新人教统编版五四制五年级下册语文 16课 田忌赛马 课时练.docx

    - 孙膑:足智多谋,善于观察,能提出创新策略。 - 田忌:信任朋友,敢于尝试,具有冒险精神。 - 齐威王:虽然在比赛中落败,但体现出王者的风范,知人善任。 6. **故事情节**: - 孙膑建议田忌改变赛马顺序,...

    (备战中考)中考语文 课外文言文专练 仲尼相鲁

    - **晏子**在这篇文章中被塑造为一个深思熟虑、足智多谋的政治家。他敏锐地洞察了孔子与鲁国之间的关系,并提出了巧妙的策略来应对孔子可能带来的威胁,显示了他的政治智慧和外交手腕。 4. **历史背景**: - 孔子...

    部编版五年级语文下册期末考试题及答案(完美版.docx

    4. **阅读理解**:短文《空城计》展示了历史故事中的智谋策略,要求学生理解故事内容,找出成语含义,分析人物行为,如"以卵击石"、"危在旦夕"、"足智多谋"等,同时对诸葛亮摆出空城计成功的原因进行分析。...

    2021年教师招聘考试题库《教育理论综合知识》必考点带答案解析_193.docx

    17. **思维敏捷性**:“足智多谋,随机应变”体现了思维的灵活性和敏捷性。 18. **问题解决策略**:尝试策略是指通过尝试所有可能的解决方案来解决问题。 19. **遗传与成熟**:格塞尔的实验表明,遗传因素决定了...

    小学语文成语大全举无遗算成语解释

    它的意思是提出的计谋或策略没有失算的地方,形容一个人足智多谋,策划周密,决策无误。 在实际应用中,"举无遗算"常用来赞誉那些具有深思熟虑、智谋高超的人。例如,在历史故事中,某位人物被形容为“运筹帷幄、举...

    孙膑练习题及答案精选.doc

    4. 人物性格分析:孙膑被描绘为足智多谋、自信且有卓越军事才能的人,而庞涓则被刻画为嫉妒心强、傲慢的人物,两人的性格对比突显了孙膑的智谋。 5. 司马迁和《史记》:介绍了司马迁及其著作《史记》的重要地位,...

Global site tag (gtag.js) - Google Analytics