哪种设计模式结合了接口、工厂和数据?

3

问题

我尝试阅读这个资源,了解常见Python设计模式的命名约定,但我找不到与我正在创建的类匹配的模式。

我能找到的最接近的是组合模式,但我觉得它并不符合我的用例。

关于这个类

我正在开发一个机器学习可解释性包。解释模型的一种方法是构建一个简单的替代模型,模仿复杂模型的行为。

实现这种方法的常见方式是使用SHAP算法,该算法需要对用于创建原始复杂模型的数据集进行采样。

如何采样取决于您构建surrogate模型的单行特征。因此,拥有一个Sampler对象非常有用,它存储背景数据集并将单行作为输入。

这给我带来了三个强相关的复杂对象和一个数据集。将它们存储在同一位置并通过简单的接口混淆它们之间的联系对我来说是有意义的。

然而,我认为这不是一个接口,因为方法不会随着对象的变化而改变。该类不会是抽象的,并且将保存所有重要数据。

我想在这个类中包含构建surrogate模型和Sampler的功能。因此,它部分地是一个工厂设计模式

问题

是否存在一个预定义的名称来描述这样的类?也许是BORG设计模式?或者在创建这样的东西之前,我应该重新考虑一下?


4
听起来是个非常复杂的想法。在采取这种方法之前,请确保您的实现需要它。 SOLID建议一个类应该只做一件事情。为什么你认为把所有这些组合成一个东西是必要的?这些部分如何相互作用? - duffymo
另一种方式对我来说感觉比较混乱。一系列强逻辑连接的函数和对象,但它们之间只有松散的联系。感觉它们需要一个集中的容器。 - Connor
1
你可能是对的。你的描述没有清晰地表明交互方式。我认为工厂可以轻松独立运作。客户是否需要了解所有这些类及其交互?公共接口暴露多少?越少越好。 - duffymo
抱歉,我试图保持它的概括性以使其普遍适用。我会更新问题的描述。 - Connor
4
模式是重构的目标。先让它能工作,然后再改进它。同时,这听起来像是策略模式建造者模式 - Peter Wood
1个回答

1

如果没有给出代码片段,很难建议使用哪些模式。

然而,让我快速概述一下可以应用的模式:

  • 如果您知道在构建对象之前应该如何构建对象,则可以使用抽象工厂和生成器模式。我的意思是,如果您想要构建计算机,那么您知道应该有CPU、HDD、显卡、内存。它们之间有微小的差异,在这里完美地描述了这些差异。 抽象工厂和生成器之间的区别是什么?

这给了我三个强相关的复杂对象和一个数据集

  • 这句话让我想到可以在这里使用装饰器模式的副作用。我的意思是,如果您想要构建强相关的对象并为它们添加一些行为,那么您可以尝试应用此模式

我的意思是,您可以像您想要的那样组合对象。 让我通过C#举个例子

var basicBike = new AluminiumBike();
BikeAccessories upgraded = new SportPackage(basicBike);
upgraded = new SecurityPackage(upgraded);

Console.WriteLine($"Bike: '{upgraded.GetDetails()}' 
    Cost: {upgraded.GetPrice()}");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接