0

我需要对在以下场景中使用的正确设计模式类型有所了解:

现有框架将允许第 3 方开发人员创建模块以提供我的系统所需的一小部分功能。

该功能涉及我系统的一个子集,它本质上非常简单:它确保在我的系统中的特定模型上有两个属性可用,例如清酒“客户”,这两个属性是 getName 和 getEmailAddress。

现在,第 3 方 debelopers 可以提供他们自己的实现,这可能具有生成这些值的非常复杂的过程,但我的系统只关心这两个属性必须可用的事实。

我猜困难的部分是第 3 方模块代码如何将自己附加到客户模型

4

3 回答 3

1

创建一个CustomerInfo包含两个客户属性的类和一个CustomerInfoProvider包含此唯一方法的接口:

CustomerInfo loadCustomerInfo();

让框架接受该接口的一个实例,用户将直接提供该实例,或者通过在配置文件中配置实现该接口的具体类的名称。

如果是后者,则使用 加载类Class.forName(...).newInstance(),并将结果转换为 CustomerInfoProvider 接口。

于 2012-12-10T20:24:34.800 回答
1

现有框架将允许第 3 方开发人员创建模块以提供我的系统所需的一小部分功能。

这意味着您的系统和您的客户的代码之间会有一个合同。任何需要与您的系统交互的外部代码都需要履行该合同。在 OO 术语中,接口是契约,因此您需要的是客户需要实现的接口。例子:

public interface ICustomer{
   public String getName();
   public String getEmailAddress();
}
于 2012-12-10T20:27:20.533 回答
0

访客,如果您想让您的实现不透明。“不透明”是指二进制或用户无法以源代码形式访问以使用正常方式进行扩展。

否则,根据情况要求或建议选择聚合/组合、虚拟方法/抽象基类或模板方法。

于 2012-12-10T20:21:38.793 回答