首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不了解首首OOAD书中的吉他示例

不了解首首OOAD书中的吉他示例
EN

Stack Overflow用户
提问于 2013-08-21 11:41:12
回答 1查看 574关注 0票数 2

我读过头第一章它有吉他的例子,

吉他班

代码语言:javascript
复制
public class Guitar {
private String serialNumber;
private double price;
private String model;
private Type type;
private Builder builder;
private Wood backWood;
private Wood topWood;
}

在以上类生成器中,木材和类型是枚举类型。清单类有Guitar列表,并提供添加、搜索和获取方法。

库存类别

代码语言:javascript
复制
class Inventory {
List<Guitar> guitarList;

public Inventory() {
    guitarList = new ArrayList<Guitar>(); 
}


public boolean addGuitar(Guitar guitar){
    return guitarList.add(guitar);
}

public Guitar getGuitar(Guitar guitar) {
    for(Guitar guitarData : guitarList ) {
        if(guitarData.getSerialNumber().equals(guitar.getSerialNumber())){
            return guitarData;
        }
    }
    return null;
}

public List<Guitar> search(Guitar guitar) {
    List<Guitar> list = new ArrayList<Guitar>();
    for(Guitar guitarData : guitarList ) {
        if(guitar.getBuilder() == null || !guitar.getBuilder().equals(guitarData.getBuilder())) {
            continue;
        }

        if(guitar.getTopWood() == null || !guitar.getTopWood().equals(guitarData.getTopWood())) {
            continue;
        }

        if(guitar.getBackWood() == null || !guitar.getBackWood().equals(guitarData.getBackWood())) {
            continue;
        }

        if(guitar.getType() == null || !guitar.getType().equals(guitarData.getType())) {
            continue;
        }

        if(guitar.getModel() == null || !guitar.getModel().equals(guitarData.getModel())) {
            continue;
        }
        list.add(guitarData);
    }
    return list;
}
}

在书中,为清单中的搜索方法创建另一个类GuitarSpec,因为在这种方法中,客户端从不为Guitar提供序列号和价格。

更新课程:

吉他班

代码语言:javascript
复制
class Guitar {
private String serialNumber;
private double price;
private GuitarSpec guitarSpec;

public String getSerialNumber() {
    return serialNumber;
}
public double getPrice() {
    return price;
}
public GuitarSpec getGuitarSpec() {
    return guitarSpec;
}

}

吉他演奏班:

代码语言:javascript
复制
class GuitarSpec {
private String model;
private Type type;
private Builder builder;
private Wood backWood;
private Wood topWood;

public String getModel() {
    return model;
}
public Type getType() {
    return type;
}
public Builder getBuilder() {
    return builder;
}
public Wood getBackWood() {
    return backWood;
}
public Wood getTopWood() {
    return topWood;
}

}

以及库存类别搜索方法的改变,

代码语言:javascript
复制
public List<Guitar> search(GuitarSpec searchSpec) {
    List<Guitar> list = new ArrayList<GuitarSpec>();
    for(Guitar guitar : guitarList ) {
        GuitarSpec guitarSpec = guitar.getGuitarSpec();
        if(searchSpec.getBuilder() == null || !searchSpec.getBuilder().equals(guitarSpec.getBuilder())) {
            continue;
        }

        if(searchSpec.getTopWood() == null || !searchSpec.getTopWood().equals(guitarSpec.getTopWood())) {
            continue;
        }

        if(searchSpec.getBackWood() == null || !searchSpec.getBackWood().equals(guitarSpec.getBackWood())) {
            continue;
        }

        if(searchSpec.getType() == null || !searchSpec.getType().equals(guitarSpec.getType())) {
            continue;
        }

        if(searchSpec.getModel() == null || !searchSpec.getModel().equals(guitarSpec.getModel())) {
            continue;
        }
        list.add(guitar);
    }
    return list;
}

我不明白为什么要创建新的GuitarSpec,这是必需的吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-21 11:50:38

这是因为每把吉他都有一个spec.but,不是每个规范都有/是吉他。

但当你在寻找带有某种规格的吉他时,

你将基本上比较每个吉他的规格和你正在寻找的规格。但你不会搜索序列号和价格。

这样,您就可以使用吉他规范类,而不必创建一个吉他。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18356456

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档