继承与策略模式

时间:2018-07-29 22:19:21

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

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

我正在考虑如何为UserAdmin建模Customer

我考虑过使用策略模式对每个User进行特定行为的建模。

到目前为止,他们尚未共享任何行为,因此Admin无法addToCart,而Customer无法registerNewProduct

但是,他们可以在系统演进时共享行为/方法!

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

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

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

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

谢谢。

1 个答案:

答案 0 :(得分:2)

我认为您跌入了{strong>模式的db.products.aggregate([{ "$match": { "tenant_id": XXX, "type" : 2 } }, { "$project": { "name": 1, "sku": 1, "members": { "$filter": { "input": "$members", "as": "member", "cond": { "$and": [ { "$gte": ["$$member.product_warehouses.available_qty", 10] }, { "$lte": ["$$member.available_qty", 50] }, { "product_warehouses": { "$elemMatch" : { } } } ] } } } } }])

实际上,这里没有明显的理由使用puzzle。首先让我们看看Strategy最突出的功能是什么。

  

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

如我所见,如果您想使用不同的Strategy来解决同一问题,则可以使用methods/algorithms

一个演示将是Strategy,并且有几种方法可以针对不同的情况来分析文件。

策略-1:

parse(File file)

策略-2:

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

您会看到,他们实现了相同的目标,但是使用了不同的方法。

在您的情况下,我想推荐parseSequatially(File file) // multi-user system; ,因为 Customer Admin 之间有很多共同的功能,其中可能包括:

  1. 名称;
  2. 年龄;
  3. 电子邮件;
  4. 性别/性别;
  5. 地址;
  6. 电话;
  7. 以及其他与人有关的其他信息...

但是正如您已经提到的,许多方法是不同的。因此,您可以将它们分别添加到inheritance中,因此基本上您将拥有subclassPersonCustomer

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