![]() |
1
4
我们在一个项目中遇到了一个非常相似的问题,我们通过不从形状中派生改进的形状来解决它。如果您需要改进形状的形状功能,您可以动态铸造,知道您的铸造将始终工作。剩下的就跟你的例子一样。 |
![]() |
2
7
为什么这个类需要从形状派生?
为什么不
改进的正方形是一个形状,是一个很薄的区域 |
![]() |
3
4
我想 facade 模式应该起作用。 将第三方接口包装到自己的接口中,应用程序的代码与包装接口一起工作,而不是与第三方接口一起工作。这样,您也可以很好地隔离不受控制的第三方界面中的更改。 |
![]() |
4
4
也许你应该读一下 proper inheritance 并得出结论,改进后的形状不需要从形状继承,而是可以将形状用于其绘图功能,类似于第21.12点关于排序列表如何不必从列表继承的常见问题解答中的讨论,即使它希望提供相同的功能,也可以简单地 使用 一览表。 以类似的方式,改进的形状可以 使用 一个形状来做它的形状的事情。 |
![]() |
5
2
可能是装饰图案的用途?[ http://en.wikipedia.org/wiki/Decorator_pattern][1] |
![]() |
6
1
有没有可能采用完全不同的方法——使用模板和元编程技术?如果您不局限于不使用模板,这可以提供一个优雅的解决方案。只有
以及
您将避免菱形继承,既可以从原始形状(通过策略类)继承,也可以获得所需的附加功能。 |
![]() |
7
1
另一种是元编程/混合,这次有点受特性的影响。 它假定计算区域是您想要基于公开属性添加的;您可以做一些与封装保持一致的事情,这是一个目标,而不是模块化。但是,您必须为每个子类型编写一个getArea,而不是尽可能使用多态的。是否值得这样做取决于您对封装的承诺程度,以及您的库中是否存在可以利用的常见行为,比如 矩形形状 在下面
|
![]() |
8
1
戴夫·希利尔的方法是正确的。分开
如果形状的设计者做了正确的事情,使它成为一个纯粹的界面,
具体类的公共接口足够强大,您可以
将具体类的实例作为成员。你就是这样得到的
不幸的是,
这几乎迫使你进入最紧密的耦合,因此最少 理想,解决方案:
现在,从C++中的具体类中派生是一种不好的形式。
很难找到一个很好的解释为什么你不应该这样做。通常,人们
引用迈尔斯更有效的C++项目33,指出了不可能。
写一篇像样的
总的来说,我认为你可以从一个问心无愧的广场上得到。 (作为安慰,您不必为 形状界面)。
现在,对于需要两个接口的函数的问题。我不喜欢
不必要的
所有
这使我们看到了唯一一个我会考虑传递一个引用的情况。
让另一个通过
即便如此,我还是宁愿寄两份推荐信而不是
|
![]() |
9
1
|
![]() |
10
0
正如我理解的那样,你的问题有一个解决办法。使用 addapter-pattern . 适配器模式用于 向特定类或交换特定行为添加功能 (即方法)。考虑到你画的场景:
适配器模式旨在适应类的行为或功能。你可以用它
它如何改变行为?当向方法提供类型为base的对象时,还可以提供适应的类。对象将按照您指示的方式工作,对象上的参与者只关心基类的接口。 您可以将此适配器应用于任何形状派生。 |
![]() |
Brendan · Java中从父类继承的对象的ArrayList 2 年前 |
![]() |
Tali · 继承-您应该使用基类,还是它们只是子类的框架? 2 年前 |
![]() |
mask2 · 如何轻松访问继承类的功能? 2 年前 |
![]() |
Dimon · 父类中的Setter,以及一些没有参数的子类 2 年前 |
![]() |
Miguerurso · Javascript类继承无法正常工作 2 年前 |
![]() |
GuessMe · 返回新类对象的正确方法(也可以扩展) 3 年前 |
![]() |
Daniel Lizik · 重写父类构造函数的子类成员初始值设定项 3 年前 |
![]() |
i_know_what · 以基类作为参数重写错误的方法 3 年前 |