抽象工厂与句柄身体成语

时间:2015-02-12 21:45:42

标签: design-patterns factory object-oriented-analysis pimpl-idiom

我有一个隐藏在句柄体成语背后的抽象工厂模式,如下所示:

 FactoryHandle <>--------------- AbstractFactory 
  {+ createCommonThing() }            /|\    {+ createCommonThing() }
                                       |
                                       | <<inherits>>
                            ------------------------
                            |                      |
                  ConcreteFactory1             ConcreteFactory2
                  {                            {
                   + createCommonThing()        + createCommonThing()
                   + createFactory1Thing()      + createFactory2Thing()  
                  }                            }

这里 FactoryHandle 在构造时注入 ConcreteFactory (正文)。它只能公开 createCommonThing()方法,因为它可以是抽象基础工厂类中唯一存在而不违反Liskov Substitutability原则的方法。

我的问题是:如何干净地公开Concrete Factory特定方法,例如 createFactory1Thing createFactory2Thing

我是否应该有一个单独的句柄类,例如 Factory1SpecificHandle ,它由 ConcreteFactory1 组成,并且只公开factory1特定的方法,如 createFactory1Thing() ?为 Factory2SpecificHandle 做同样的事情?因此,如果仅使用常用方法,则客户端使用 FactoryHandle ;如果要使用特定方法,则使用 Factory1SpecificHandle 。这有点像一个糟糕的设计。

Factory1SpecificHandle <>------------------ConcreteFactory1
{+ createFactory1Thing()}                  {
                                            + createCommonThing()
                                            + createFactory1Thing()
                                           }

你认为这里干净的设计是什么意思?如果问题不清楚,请告诉我,我可以进一步详细说明。感谢。

1 个答案:

答案 0 :(得分:1)

由于没有通用接口,我认为分离工厂更清晰(参见下面的UML图)。

每个界面(AbstractFactory1AbstractFActory2) 定义了公共和特定的创建操作。

客户端使用这些接口。没有必要通过处理程序引用具体的类。

控制(限制)对工厂对象,代理的访问  (可以使用类似于Handle Body模式)(参见http://w3sdesign.com处的代理)。

enter image description here