【问题标题】:C++ Evil Getter Setter against Factory/Builder design patternC++ Evil Getter Setter 反对 Factory/Builder 设计模式
【发布时间】:2021-05-14 16:42:54
【问题描述】:

我正在尝试学习设计模式规范(如重构大师),但我有一些问题要理解如何将糟糕设计的想法与需要“脱离构造函数”的公共 getter/setter 和工厂/生成器合并" 变量设置器。

以本文回复article to Design pattern为例

正如你所理解的,每个对象都需要很多信息,添加部分应该设置所需的信息,但要做到这一点,它需要在构造函数之外访问我的变量。

帮我弄清楚我错过了什么。

--- 编辑 更准确地说,假设我有 2 个类: CombatObject

在这种情况下,getter/setter 不是一个糟糕的设计(或者是吗?)

【问题讨论】:

  • 工厂用于根据标准生成不同种类的子类。 getter/setter 用于更改对象数据成员的状态。恕我直言,一个不能替代另一个。
  • 你也可以实现克隆模式。工厂将生成一艘船。 Ship 的 clone 方法可以创建重复的船;那么你就可以改变那些克隆了。
  • 在我看来,getter 和 setter 通常是个坏主意。更喜欢有对对象做事的方法,而不是从对象中获取数据,操作它,然后设置结果。如果你有一个 public 设置器,它只设置成员的值,你已经有效地创建了成员 public。一个好的 setter 会做一些事情,比如通过测试和拒绝无效值来保护​​类。
  • @user4581301:拥有一个简单的公共 getter/setter 比将成员公开有一个优势。如果我今天在我的课堂上安装了 getter 和 setter,而其他人开始编写使用它们的代码,我可以在明天修改它们——以及成员本身——。如果我今天让每个人都可以公开访问会员本身,我会很高兴收回它。
  • 是的,你也可以在上面挂断点。我应该把这个评论措辞更好一点。

标签: c++ design-patterns getter-setter


【解决方案1】:

好的,我认为 cmets 是正确的,我看到解决方案的方式如下:

没有 Setter,与对象交互的唯一方法是使用有目的的函数。 例如,修改 HP,添加一个 DoDamage 函数,如果船被毁,该函数将返回 false,并且会在内部修改 hp(可能还有损坏等)

Getter 可以是公共的,但当然只能是“const &”

克隆方法是未来发展的好主意(原型模式)

【讨论】:

    猜你喜欢
    • 2019-04-23
    • 2010-11-21
    • 2022-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-22
    相关资源
    最近更新 更多