扩大歧视联盟的“设计模式”

时间:2012-10-10 23:55:25

标签: design-patterns discriminated-union

众所周知,阶级继承是“开放式”类型 - heirarchies和歧视联盟是“封闭式”类型 - heirarchies。但是,虽然添加新的子类很容易,但添加新的虚函数需要修改所有现有的类。同时,受歧视的工会可以轻松添加新功能。

             | inheritance | discriminated union
new type     | easy        | hard
new function | hard        | easy

OOP已经足够了,我们遇到了“为类型层次添加新方法”的难度,并且在“修改所有类”不是一个好选择的情况下,我们已经提出了像访问者模式,为现有类型添加新功能。

例如:

class Base       Base.f()    Base.g()
class A : Base   A.f()       A.g()
class B : Base   B.f()       B.g()

由于添加虚拟Base.h()很困难,我们使用访问者模式,因此可以封装未来的功能。 这基本上是模式匹配函数的基于继承的模拟!

class H : BaseVisitor { 
   visit(A)  { } 
   visit(B)  { }
}
// this looks really similar to:
let H something = 
    match something with 
    | A -> ..
    | B -> ..

TLDR:是否有常见的抽象(类似于访客模式)处理向受歧视的联盟添加类型?

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,我会争论桥模式。它允许您独立于其实现改变接口/抽象,从而产生结构上的灵活性。但是,我从来没有需要使用桥接模式。

希望有所帮助:D