[第二十二只羊] 迷雾森林舞会XVI 策略模式 Strategy Pattern

天亮了 昨晚是平安夜

关於迷雾森林故事

甜水镇

洛神:10号玩家请继续发言
10号: 我跟5号的想法也蛮像的,其实我也没有立马站边9,我是说我先站边9,那时候到4号发言的时候我确实心里有小小挣扎,投票到底要不投还是要怎样,看大家的状态,但是他撞了嘛,所以我觉得以这样子的操作来说的话,因为刚第一晚杀非常久,一定是有人下指导棋,叫7号去跳狼王,这件事情,会下指导棋我觉得3号是蛮高机率,那他是打2号,然後8号顺着5号讲怀疑到我身上我也觉得是顺的,关於投票的部分我顺着9号讲,是因为你头异形票我觉得你就是狼。6号走感觉像是好人走,现在如果剩下两狼我觉得是3或8,我会投8,过。
洛神:请决定要放逐的对象,3 2 1 请投票
投3:2 5
投8:3 10
投10:8
洛神:3号 8号平票,进入PK环节,3号开始发言
待续..

动物园派对

今天先由设计模式领军
我们这边要套用策略模式
什麽是策略模式呢?

最基本的解释方式是将某一个行为(接口)通过不同的方法/算法实现,方便需要实现该接口对应行为
The basic idea is to delegate tasks to encapsulated algorithms which are interchangeable at runtime.

先举个小例子
比方说我们希望鸭鸭拥有不同的技能,包含呱呱叫飞起来
我们就可以透过策略模式这样实现

class Duck
{
    swim();
}

class MallardDuck : IFlyable
{
    fly();
}

class RedheadDuck : IFlyable, IQuackable
{
    fly();
    quack();
}


策略模式的一般思想是通过在它们之间放置一个抽象层来将对象及其不同的行为(也就是策略)彼此分开。

再举个完整一点的例子
我们有两个对象,方形盘或是六边形盘。这两个对像都是继承 BasicPlate 类的类,後者是一个抽像类。目标是为板物体提供彩色积木。积木的颜色将像徵这种情况下的策略。我们希望在运行时可以使用所有盘子和彩色积木的组合,但我们不确定哪种方法是最好的。
因此,我们正在研究两种可能的解决方案:继承母类别和策略模式。

传统物件导向如果要实作图中的方形盘或是六边形盘
最初的物件对象 (OO) 方法是为盘子和彩色积木的所有变体创建独立的类别。以这种方式创建的每个类都将扩展 方形盘或是六边形盘并指定它们的积木颜色。乍一看,这解决了目标,但这种方法也带来了一些问题。
首先,程序编译执行後无法更改积木的颜色。这不是一个有好的做法,因为我们可能希望在未来添加换颜色的功能。因此,具有在运行时更改对象策略的灵活性对我们来说很有价值。

其次,它创建了更多的类别为了实现不同形状或颜色的盘子,目前,类别的数量很少。但是,将来可能会添加更多的盘和彩色积木就会造成比较多重复出现的程序码

因此我们多加入一层抽象层让积木可以在这个类别里面变化颜色

这麽一来就可以透过抽象让要达成目标或是拥有技能的物件更加具有弹性

reference:

  1. Ruby Design Pattern: Strategy Method
  2. 《HeadFirst设计模式》读书笔记一:策略模式
  3. Strategy Design Pattern
  4. Strategy pattern
  5. Duck example strategy pattern - Head first design pattern
  6. 策略模式 Strategy Pattern

阿虎每日选币

$xvg

天黑请闭眼


<<:  [经典回顾]公务信箱遭骇客入侵事件纪录

>>:  Day 22: Behavioral patterns - Mediator

DAY7-EXCEL统计分析:统计学是什麽?

在我们学习统计学之前应该清楚理解何谓统计学,这样才能够学以致用,并有效利用excel等工具来帮助我们...

[Day??] 2021 iThome 铁人赛 - 颁奖典礼 @ 2022.01.08‧辅仁大学

前言 抱歉打扰了XD 但是我真的太想来分享,所以还是厚着脸皮(?)来po文了XD 我这次有参加铁人赛...

Day01 - 前言与Lab架构说明

前言 今年不搞自虐(之前都搞跟近期专案结合度比较低的主题) 结合最近一直在研究的Amazon ECS...

Day.6 线性资料

线性的资料储存方式一般有两种 array (阵列) list node (链结) 这两种差别到底在那...

[铁人12:Day 30] 「AI 的未来十年」摘要 6:逻辑推论及认知模型

逻辑推论 (Reasoning) 前面提过,时下流行的 DNN 模型的训练过程,是试图「记住」或「趋...