【问题标题】:Inheritance vs. Strategy Pattern继承与策略模式
【发布时间】:2019-01-06 04:12:49
【问题描述】:

我正在学习编程模式,在最后的任务中,我们被要求建立一个“在线商店”。

我在考虑如何为User 建模,它可以是AdminCustomer

我考虑了策略模式来为每个人 User 建模他们的特定行为。

到目前为止,他们没有分享任何行为,所以Admin 不能addToCartCustomer 不能registerNewProduct

但是,随着系统的发展,它们可以共享行为/方法!

此外,User 不会在运行时更改它的类型。即,一旦您以客户身份登录,您将无法以管理员身份重新登录。

即使他们共享seeProductList 之类的行为,这也可以通过良好的继承来实现,对吧?

我应该使用策略、继承还是推荐其他模式?

如果您需要更多信息,请告诉我! :)

提前致谢。

【问题讨论】:

    标签: java inheritance design-patterns polymorphism strategy-pattern


    【解决方案1】:

    我认为您已经陷入了 模式puzzle

    实际上这里没有明显的理由使用Strategy。我们先来看看Strategy最突出的特点是什么。

    策略是一种行为设计模式,可让您定义一系列算法,封装每个算法,并使它们可互换。策略让算法独立于使用它的客户端而变化。

    在我看来,如果你想使用不同的methods/algorithms 来解决同样的问题,你可以使用Strategy

    演示将是parse(File file),并且有多种方法可以针对不同场景解析文件。

    策略 - 1:

    parseInParallel(File file) // when in single-user system;
    

    策略 - 2:

    parseSequatially(File file) // multi-user system;
    

    你看,他们实现了相同的目标,但使用了不同的方法。

    在你的情况下,我想推荐inheritance,因为客户管理员之间有很多共同的特点,其中可能包括:

    1. 姓名;
    2. 年龄;
    3. 电子邮件;
    4. 性别/性别;
    5. 地址;
    6. 电话;
    7. 还有更多与人相关的...

    但正如您已经提到的,很多方法是不同的。所以你可以在subclass 中单独添加它们,所以基本上你将拥有PersonCustomerAdmin

    Person有最基本的信息和方法,Customer有与客户相关的方法和新字段,Admin类似。

    【讨论】:

      猜你喜欢
      • 2018-07-02
      • 2014-10-31
      • 2011-09-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-04
      • 2011-12-02
      相关资源
      最近更新 更多