如何在实践中避免/重构坏单身?

Dan*_*ski 5 oop design-patterns

仔细阅读有关单身人士的事实(代码气味,而不是模式)我想知道:

我怎样才能重构我的代码以摆脱它们?

尽管几乎每个人都认为坏单身是坏的,但是,我找不到任何关于如何更换它们的实用建议.无论是非常微不足道还是非常艰难.

有一些方法我可以想到,但所有这些似乎都极大地膨胀了我的代码.

例如,假设我有一个"全局" AppConfig类,其中包含有关产品的许可证信息并描述用户可用的功能.

我能想到的是:

  • 为包含AppConfig实例的每个项目类创建一个公共基类.(不好意思:对于已经有基类的情况,例如表格,这是不可能的)
  • 使用setAppConfig方法创建通用接口.
  • 创建一个AppConfigFactory可以创建AppConfig实例的全局(BAD:仅将问题转移到另一个类)
  • 将实例作为参数传递给需要它的每个方法.(坏:代码膨胀)
  • ...

我能做什么?

编辑:澄清:我在我的代码中发现了一个不好的单例.现在我想重构我的代码以删除它.我正在寻求关于如何实现这一目标的提示和一般想法.

180*_*ION 6

使用依赖注入和控制反转框架 - 这可能需要大量重构.然后,使用构造函数或属性依赖,请求"单例" - 理想情况下,你不要求整个事情,因为根据Demeter的原则,它应该只询问它真正需要的东西(在你的情况下是许可证)信息).

我试图区分Singleton(反模式伪装全局变量)和singleton(意味着你只需要其中一个).在程序开始时(或在工厂中)创建一个真正的单例并传递给需要它的对象.