可爱的鸭子模型 - 若类型语言中的设计模式

网上源自 Python 的定义

鸭子类型的核心概念在于一个对象的有效语义,不是继承自特定的类或者实现特定的方法,而是

由当前的属性和方法集合决定的。听起来依旧很迷茫,简单的说:

“当看到一只鸟走起来像鸭子、游泳起来像鸭子、叫起来也像鸭子,那么这只鸟就可以被称为鸭子。”

在鸭子类型中,关注的不是对象的类型本身,而是它是如何使用的。

个人理解

不同类拥有需要的必须的属性和方法, 那么认为是相同的鸭子~

情境是酱紫滴:

假设一场战斗中有怪物,玩家,还有盗贼,
三种人物均可以移动, 但是只有怪物和玩家可以攻击, 只有玩家和盗贼可以拾取掉落物品

class Monster:
    def move(self):
        # do monster move
    def attack(self):
        # do monster attack

class Player:
    def move(self):
        # do player move
    def attack(self):
        # do palyer attack
    def collect(self):
        # do player collect

class Thief:
    def move(self):
        # do thief move
    def collect(self):
        # do thief collect

那么现在

鸭子模型1:
def battle(duck):
    duck.move()
    duck.attack()

鸭子模型2:
def collect(duck):
    duck.move()
    duck.collect()

鸭子模型 1 是囊括 Monster 和 Player 的 A 类鸭子, 鸭子模型 2 是囊括 Player 和 Thief 的 B 类鸭子.

这样的话就容易理解上面晦涩的定义了.

重定义

鸭子模型不是建立在传统的集成思路, 而是基于组件的思想, 拥有固定的组件(属性/方法), 那么就称之为鸭子.

Donate - Support to make this site better.
捐助 - 支持我让我做得更好.