标签: creation-pattern

注册表模式Vs服务定位器模式与依赖注入容器

它们之间是否有任何区别,而不是按键设置和获取数组中的对象?

class Registry
{
private $container=array();
  public static function Set($name,$object){
    self::$container[$name]=$object;
  }
  public static function &Get($name){
  return self::$container[$name];
  }
}
Run Code Online (Sandbox Code Playgroud)

registry design-patterns dependency-injection service-locator creation-pattern

7
推荐指数
1
解决办法
3544
查看次数

C++抽象工厂应该为构造对象提供破坏方法吗?

考虑以下接口(使用哑指针,因为我们仍然在C++ 98中)

class WidgetMaker {
    virtual Widget* makeWidget() = 0;
};
Run Code Online (Sandbox Code Playgroud)

具有以下可能的实现

class SpecificWidgetMaker: public WidgetMaker {
    Widget* makeWidget() {
        return new SpecificWidget();
    }
};
Run Code Online (Sandbox Code Playgroud)

Widget是一些带有虚析构函数的基类,SpecificWidget扩展了它.我的同事们声称WidgetMaker界面应该包含以下方法

virtual void freeWidget(Widget* widget);
Run Code Online (Sandbox Code Playgroud)

理由是这样我们不会强制makeWidget实现使用标准的新分配,它们可以使用自定义池分配器,或者总是返回相同的全局实例,以防小部件无状态或其他.

我觉得这样的设计通常是一个坏主意 - 它使客户端代码变得复杂,违反了KISS和YAGNI,在未来20年内将转换(在我们的组织中不太可能)转换为unique_ptr更难.我应该相信自己的感受吗?当自由方法作为抽象工厂接口的一部分被证明是合理的时候是什么情况?

c++ oop c++98 creation-pattern

4
推荐指数
1
解决办法
351
查看次数