用一点java,一点模式设计类?
我最近在读,第3章介绍了用一点java,一点模式设计类?,java,design-patterns,computer-science,Java,Design Patterns,Computer Science,我最近在读,第3章介绍了Pizza类及其一些子类。我觉得奇怪的是,外壳、奶酪和橄榄类被定义为比萨饼的子类 显然,这些是比萨饼的成分,这些成分和比萨饼之间的关系是有一个而不是是一个 那么为什么这些配料类被定义为比萨饼的子类呢 仅供参考,下面的代码片段是本书中使用的类结构。 它们听起来像是比萨饼的类型;这将使它成为一种关系(蘑菇披萨就是披萨)。刘家才,我不知道这本书,但你的怀疑是合理的。在编写良好的OOP代码中,Pizza应该是一个包含一组成分的对象。示例中扩展Pizza的每个类都应该实现配料接口:
Pizza
类及其一些子类。我觉得奇怪的是,外壳
、奶酪
和橄榄
类被定义为比萨饼
的子类
显然,这些是比萨饼的成分,这些成分和比萨饼之间的关系是有一个而不是是一个
那么为什么这些配料类被定义为比萨饼的子类呢
仅供参考,下面的代码片段是本书中使用的类结构。
它们听起来像是比萨饼的类型;这将使它成为一种关系(蘑菇披萨就是披萨)。刘家才,我不知道这本书,但你的怀疑是合理的。在编写良好的OOP代码中,Pizza应该是一个包含一组成分的对象。示例中扩展Pizza的每个类都应该实现配料接口:
class Pizza {
private Set<Ingredient> ingredients;
//code
}
interface Ingredient {}
class Crust implements Ingredient {}
class Cheese implements Ingredient {}
class Olive implements Ingredient {}
class比萨饼{
私设食材;
//代码
}
界面成分{}
类{}
类{}
类{}
子类的名称有些误导<例如,代码>香肠
,不是一种配料;这是一种披萨,上面涂有香肠,奶酪
,橄榄
,和凤尾鱼
<代码>硬皮
实际上是一个没有任何配料的比萨饼。通过这种方式考虑比萨饼,可以实现简单的递归描述:
- 普通的面包皮就是比萨饼李>
- 如果你拿一个比萨饼,在上面加奶酪,结果就是一个比萨饼
- 如果你拿一个比萨饼,在上面加上香肠,结果就是一个比萨饼
- 如果你拿一个比萨饼,在上面加上凤尾鱼,结果就是一个比萨饼
- 如果你拿一个比萨饼,在上面加上橄榄,结果就是一个比萨饼
castle
是递归的基本情况,“toppings”对Pizza
进行递归调用。这就是为什么“toppings”有一个Pizza
字段:子类告诉您生成的Pizza的最顶层是什么,该字段告诉您底层是什么
这也使得递归定义方法变得容易。假设我们想检查比萨饼是否是素食者:
- 如果比萨饼是纯皮的,那么就没有肉,所以比萨饼是素食的。(基本情况:正确)
- 否则,比萨饼由顶层和子比萨饼组成
- 首先检查顶层。如果顶层是香肠或凤尾鱼,那么比萨饼就不是素食者。(基本情况:错误)
- 否则,顶层是奶酪或橄榄。在这种情况下,比萨饼是素食的,如果并且只有顶层下面的子比萨饼是素食的
- 检查sub pizza是否是素食者。(递归)
如果这些名字真的让你感到困扰,你可以将crask
重命名为pizzawithnotappings
,lean
重命名为PizzaToppedWithSausage
,依此类推。这些名字很难看,根本不适合像《小Java》这样的文体书籍。尽管书名包含Java,但它不是一本关于Java的书。表面上看,它是在用Java教授函数式编程
这是理解这些例子的关键。对于exmaple,第一章实际上是关于通常在函数式编程语言(如ML)中可以找到的Union数据类型(或sum数据类型)
在本书中,它没有使用任何集合概念,如集合、映射或列表。相反,作者教您创建这些概念
如果您熟悉haskell或SML中的列表类型,那么这些定义应该非常自然。我们看不到有问题的文本,因此只能猜测。我怀疑你误解了课文的内容;如果没有,那么文本是错误的。这些都不是比萨饼的子类。正如@chrylis所说,亚马逊网站对这本书的评论是有争议的。有很多更好的书可以花你的时间在上面。我不认为是这种情况。我已经上传了课程结构,如果你看一下这本书并回答这个问题会更好quesiton@JiacaiLiu本文描述了一种通用的Pizza
类型,以及作为具体实现的子类Pizza
和Olive extends Pizza
,Pizza
是一个集合
(具体来说,作者试图用a来解释)。我仍然不明白,在Cheese
和其他子类中,为什么会有Pizza
字段,这是建筑商模式的一种变体吗?真的没有明智的方法来理解类结壳扩展比萨饼。
@jiacailu结壳不是比萨饼(它是比萨饼的一部分)。继承被滥用了。这个设计不尊重环境。这本书是1998年出版的。在流行的GoF书籍之后,一些“模式”书籍应运而生。在我看来,很多都是浪费时间。如果你想要一些有价值的东西,我建议你采用头优先的设计模式。