目的
使用动态属性,并在保持类型安全的同时实现非类型化语言的灵活性。
解释
抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全,并将不同类的属性分离为一组接口。
真实世界例子
考虑由多个部分组成的汽车。 但是,我们不知道特定汽车是否真的拥有所有零件,或者仅仅是零件中的一部分。 我们的汽车是动态而且非常灵活的。
通俗的说
抽象文档模式允许在对象不知道的情况下将属性附加到对象。
使用动态属性,并在保持类型安全的同时实现非类型化语言的灵活性。
抽象文档模式使您能够处理其他非静态属性。 此模式使用特征的概念来实现类型安全,并将不同类的属性分离为一组接口。
真实世界例子
考虑由多个部分组成的汽车。 但是,我们不知道特定汽车是否真的拥有所有零件,或者仅仅是零件中的一部分。 我们的汽车是动态而且非常灵活的。
通俗的说
抽象文档模式允许在对象不知道的情况下将属性附加到对象。
允许将新功能添加到现有的类层次结构中,而不会影响这些层次结构,也不会有四人帮访客模式中那样循环依赖的问题。
真实世界例子
我们有一个调制解调器类的层次结构。 需要使用基于过滤条件的外部算法(是Unix或DOS兼容的调制解调器)来访问此层次结构中的调制解调器。
通俗地说
非循环访问者允许将功能添加到现有的类层次结构中,而无需修改层次结构
WikiWikiWeb 上说
Curiously Recurring Template Pattern,CRTP,奇异递归模板模式
递归类型绑定,递归泛型
允许派生组件从与派生类型兼容的基本组件继承某些功能。
真实世界的例子
对于正在策划赛事的综合格斗推广活动来说,确保在相同重量级的运动员之间组织比赛至关重要。这样可以防止体型明显不同的拳手之间的不匹配,例如重量级拳手与雏量级拳手的对决。
用通俗的话来讲
包装器
动态的为对象附加额外的职责。装饰器为子类提供了灵活的替代方案,以扩展功能。
真实世界例子
附近的山丘上住着一个愤怒的巨魔。通常它是徒手的,但有时它有武器。为了武装巨魔不必创建新的巨魔,而是用合适的武器动态的装饰它。
通俗的说
装饰者模式让你可以在运行时通过把对象包装进一个装饰类对象中来动态的改变一个对象的行为。
维基百科说
使用分离的构建器和工厂接口来定义一个不可变内容的工厂。
工厂套件模式适用于与以下场景:
虚拟构造器
为创建一个对象定义一个接口,但是让子类决定实例化哪个类。工厂方法允许类将实例化延迟到子类。
真实世界例子
铁匠生产武器。精灵需要精灵武器,而兽人需要兽人武器。根据客户来召唤正确类型的铁匠。
通俗的说
它为类提供了一种把实例化的逻辑委托给子类的方式。
维基百科上说