众所周知,阶级继承是“开放式”类型 - 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:是否有常见的抽象(类似于访客模式)处理向受歧视的联盟添加类型?
答案 0 :(得分:0)
如果我理解你的问题,我会争论桥模式。它允许您独立于其实现改变接口/抽象,从而产生结构上的灵活性。但是,我从来没有需要使用桥接模式。
希望有所帮助:D