OOP设计模式中的"客户"概念?

Trầ*_*inh 6 oop client design-patterns concept

我阅读了许多关于GoF的OOP设计模式的主题,但我不确定"客户端"的概念.那是什么?我们如何在我们的应用程序中实现它.谢谢!

Ray*_*yek 5

在 gof 书中,客户端是使用模式中的类的代码或类。

例如,从动机下的抽象工厂模式:

与客户的图

考虑一个支持多种外观标准的用户界面工具包,例如 Motif 和 Presentation Manager。不同的外观为用户界面“小部件”(如滚动条、窗口和按钮)定义了不同的外观和行为。为了跨外观标准可移植,应用程序不应针对特定外观对其小部件进行硬编码。在整个应用程序中实例化特定于外观的小部件类使得以后很难更改外观。

我们可以通过定义一个抽象的 WidgetFactory 类来解决这个问题,该类声明了一个用于创建每种基本类型的小部件的接口。每种小部件还有一个抽象类,具体的子类为特定的外观标准实现小部件。WidgetFactory 的接口有一个操作,它为每个抽象小部件类返回一个新的小部件对象。客户端调用这些操作来获取小部件实例,但客户端不知道他们正在使用的具体类。因此,客户保持独立于流行的外观和感觉。

每个外观标准都有一个 WidgetFactory 的具体子类。每个子类实现操作以创建适合外观的小部件。例如,MotifWidgetFactory 上的 CreateScrollBar 操作实例化并返回一个 Motif 滚动条,而 PMWidgetFactory 上的相应操作为 Presentation Manager 返回一个滚动条。客户端仅通过 WidgetFactory 接口创建小部件,并且不了解为特定外观实现小部件的类。换句话说,客户端只需提交由抽象类定义的接口,而不是特定的具体类。

WidgetFactory 还强制执行具体小部件类之间的依赖关系。Motif 滚动条应该与 Motif 按钮和 Motif 文本编辑器一起使用,并且作为使用 MotifWidgetFactory 的结果会自动强制执行该约束。