mirror of
https://github.com/zhwei820/learn.lianglianglee.com.git
synced 2025-11-20 08:03:44 +08:00
fix img
This commit is contained in:
@@ -267,7 +267,7 @@ Henry 坐快速公交(经济绿色) 来参加聚餐!
|
||||
Ruby 打快车(快速方便) 来参加聚餐!
|
||||
</code></pre>
|
||||
<p>上面示例的类图如下:</p>
|
||||
<p><img src="assets/99aeddd0-7824-11e8-974f-33e8b8ec2777.jpg" alt="enter image description here" /></p>
|
||||
<p><img src="assets/99aeddd0-7824-11e8-974f-33e8b8ec2777.jpg" alt="png" /></p>
|
||||
<h3>从剧情中思考策略模式</h3>
|
||||
<p>上面的示例中我们可以选择不同的出行方式去参加聚餐,可以骑共享单车,也可以坐公共汽车,亦或是踩一辆平衡车;选用什么交通工具不重要,重要的是能够实现我们的目标——准时到达聚餐的地点,我们可以根据自己的实际情况进行选择和更换不同的出行方式。这里,选择不同的交通工具,就相当于选择了不同的出行策略;在程序中也有这样一种类似的模式——策略模式。</p>
|
||||
<h3>策略模式</h3>
|
||||
@@ -284,7 +284,7 @@ henry.attendTheDinner()
|
||||
<h3>策略模式的模型抽象</h3>
|
||||
<h4>类图</h4>
|
||||
<p>策略模式的类图表示如下:</p>
|
||||
<p><img src="assets/dc59ab60-7824-11e8-81a3-e1036ee16107.jpg" alt="enter image description here" /></p>
|
||||
<p><img src="assets/dc59ab60-7824-11e8-81a3-e1036ee16107.jpg" alt="png" /></p>
|
||||
<p>Context 是一个上下文环境类,负责提供对外的接口,与用户的交互,屏蔽上层对策略(算法)的直接访问,如示例中的 Classmate。Strategy 是策略(算法)的抽象类,定义统一的接口,如示例中的 IVehicle。StrategyA 和 StrategyB 是具体策略的实现类,如示例中 SharedBicycle、ExpressBus 等。</p>
|
||||
<p>**注意:**algorithm() 方法并不是说只用来定义算法,也可以是一种规则、一个运作或一种行为(如方面示例中的 running 指的是交通工具的运行方式)。一个 Strategy 也可以有多个方法(如一种算法是多个步骤组成的)。</p>
|
||||
<h4>模型说明</h4>
|
||||
@@ -384,7 +384,7 @@ Eric 23 years old, 62.0kg, 1.78m.
|
||||
Jack 31 years old, 74.5kg, 1.8m.
|
||||
</code></pre>
|
||||
<p>上面的代码可用类图表示如下:</p>
|
||||
<p><img src="assets/eee1eea0-7824-11e8-974f-33e8b8ec2777.jpg" alt="enter image description here" /></p>
|
||||
<p><img src="assets/eee1eea0-7824-11e8-974f-33e8b8ec2777.jpg" alt="png" /></p>
|
||||
<p>看到这,熟悉 Python 的读者肯定要吐槽了!Python 是一个简洁明了的语言,使用十几行代码就能解决的问题(如下面的实现代码),为什么要写上面这一大堆的东西。</p>
|
||||
<pre><code class="language-python">from operator import itemgetter,attrgetter
|
||||
def testPersonListInPython():
|
||||
|
||||
Reference in New Issue
Block a user