![]() |
1
7
我认为你的方法有一个问题,那就是混凝土之间会有一个紧密的耦合 上下文 类和策略类的实例。这意味着策略类只能与上下文类一起使用。避免这种情况的一种方法是使策略类依赖(或使用)一个“上下文”类将实现的接口。 编辑 此外,当策略类具有上下文类的实例时,这些类必须从上下文类显式地获取数据。这意味着在上下文类中为策略类添加getter(根据需要),以获取它们所需的数据。但是添加getter并不一定是一个好的OO实践,因为更多的getter会带来破坏封装的风险。 你能想到的另一个选择是 将上下文类的引用传递给strategy类中的方法,但只将所需的数据传递给strategy类。 例如,如果上下文类是这样的:(代码是Java)
|
![]() |
2
5
嗯,没关系。但我更喜欢通过strategy实现类的构造函数将上下文传递给策略。 |
![]() |
3
2
你的代码就是你的代码,写任何对你有意义的东西。不过,我有一句忠告。 战略模式的目的是创建一系列可以互换的战略。与许多设计模式一样,它也从解耦中获益。在本例中,我们将行为与使用此类行为的类分离。 当一个策略将上下文作为一个参数时,解耦就减少了。上下文中的更改可能需要更改您的战略实施。正如前面的一张海报所指出的,最好是寻找一种使它们解耦的方法。 也就是说,只要您的目的是允许策略可互换,并且您的代码实现了这个目的,那么我看不出有什么问题。 |
![]() |
4
0
|
![]() |
Vedant · 如何解决python啦啦队长问题?[已关闭] 2 年前 |
![]() |
cobby · 在战略模式中使用工厂模式? 2 年前 |
![]() |
Nobody · Java中带while循环的三角形模式 2 年前 |
![]() |
Eduard Stefanescu · 如何在层之间传输异常? 6 年前 |
![]() |
D. Schreier Talha Noyon · 对于目录中的每个类 6 年前 |
![]() |
Tanvi Jaywant · 如何重载类 6 年前 |