Oop 建议的设计模式-某种桥接器或适配器

Oop 建议的设计模式-某种桥接器或适配器,oop,design-patterns,Oop,Design Patterns,我需要了解在以下场景中使用的正确设计模式类型: 现有框架允许第三方开发人员创建模块,以提供我的系统所需的一小部分功能 这项功能涉及我的系统的一个子集,本质上非常简单:它确保在我的系统中的特定模型上有两个属性可用,例如“Customer”,这两个属性是getName和getEmailAddress 现在,第三方debelopers可以提供它们自己的实现,这些实现可能有非常复杂的生成这些值的过程,但我的系统只关心这两个属性必须可用的事实 如果您想让实现保持不透明,那么困难的部分是第三方模块代码如何将

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

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

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

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


如果您想让实现保持不透明,那么困难的部分是第三方模块代码如何将自己附加到客户模型上。我所说的“不透明”指的是二进制或其他不可访问的源代码形式的用户扩展使用正常的手段


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

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

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

如果是后者,请使用
class.forName(…).newInstance()
加载该类,并将结果强制转换到CustomerInfo提供程序接口

允许第三方开发人员创建的现有框架 模块,以提供 我的系统

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

public interface ICustomer{
   public String getName();
   public String getEmailAddress();
}