我需要深入了解在以下场景中使用的正确类型的设计模式:
现有框架,允许第三方开发人员创建模块,以提供我的系统必需的一小部分功能。
这部分功能涉及我系统的一个子集,它本质上非常简单:它确保我系统中特定模型上有2个属性可用,比如说“Customer”,两个属性是getName和getEmailAddress。
现在,第三方debelopers可以提供他们自己的实现,这可能有非常复杂的生成这些值的过程,但我的系统只关心这两个属性必须可用的事实。
我认为困难的部分是第三方模块代码如何将自己附加到客户模型
答案 0 :(得分:1)
创建一个包含两个客户属性的类CustomerInfo
,以及一个包含此唯一方法的接口CustomerInfoProvider
:
CustomerInfo loadCustomerInfo();
让框架接受此接口的实例,用户将直接提供,或者通过在配置文件中配置实现此接口的具体类的名称。
如果是后者,请使用Class.forName(...).newInstance()
加载类,并将结果转换为CustomerInfoProvider接口。
答案 1 :(得分:1)
允许第三方开发人员创建的现有框架 模块提供所需的一小部分功能 我的系统。
这意味着您的系统与客户代码之间将签订合同。任何需要与您的系统交互的外部代码都需要履行该合同。在OO术语中,接口是契约,因此您需要的是客户端需要实现的接口。例如:
public interface ICustomer{
public String getName();
public String getEmailAddress();
}
答案 2 :(得分:0)
访问者,如果您希望保持实施不透明。 “不透明”是指二进制或用户无法以源代码形式访问,以使用常规方式扩展。
否则,根据情况指示或建议,选择聚合/组合,虚拟方法/抽象基类或模板方法。