java 写一个商店_java – 商店设计 – 多个产品类

我正在阅读有关Spring的文章,并遇到了一个包含名称和价格字段的抽象产品类的示例.

接下来,有一个Battery类,它扩展了Product类并添加了一个可充值字段.然后,CDDrive类(也)扩展Product但添加容量字段.

在现实世界中,当我们经常拥有具有许多不同属性的产品时,如何模拟具有任意属性和字段的任意产品?

每个产品的课程有意义吗?

所以,你们可以提出一个实现这个目标的模式吗?

谢谢,

Ouney

解决方法:

好问题.在我们拥有共享许多抽象父级的GUI组件之前,我们遇到了类似的情况,但每个页面都有自己的一组标签,这些标签没有被其他人共享.对峙正在进行中.我们发现继续创建子类因为它们具有相互不相交的属性而感到愚蠢.它对我们来说是地图.首先,要使子类具有一个或多个作为第一类对象的区别属性.在您的情况下可充电电池和CD驱动器的容量.然后,对于在构建时无法想到的属性,或者只是在次要命名约定上有所不同,请使用地图.我用下面的例子演示.

产品:

public abstract class Product {

String name;

Double price;

Map propMap;

public Product(String name, Double price) {

this.name = name;

this.price = price;

propMap = new HashMap<>();

}

public void add2propMap(String key, Object value) {

propMap.put(key, value);

}

public String toString() {

return "Product [name=" + name + ", price=" + price + ", propMap=" + propMap + "]";

}

}

CdDrive:

public class CdDrive extends Product {

String capacity;

public CdDrive(String name, Double price, String capacity) {

super(name, price);

this.capacity = capacity;

}

}

电池:

public class Battery extends Product {

Boolean rechargable;

public Battery(String name, Double price, Boolean rechargable) {

super(name, price);

this.rechargable = rechargable;

}

}

然后客户:

public class Client {

public static void main(String[] args) {

List productList = new ArrayList<>();

Battery energizer = new Battery("Energizer", 12d, true);

energizer.add2propMap("numInPackage", new Integer(8));

energizer.add2propMap("make", "US");

productList.add(energizer);

CdDrive superDrive = new CdDrive("Apple Drive", 200d, "200 GB");

superDrive.add2propMap("type", "External");

superDrive.add2propMap("expandable", false);

productList.add(superDrive);

productList.forEach(p -> System.out.println(p));

}

}

运行时给出了这个:

Product [name=Energizer, price=12.0, propMap={numInPackage=8, make=US}]

Product [name=Apple Drive, price=200.0, propMap={expandable=false, type=External}]

此设置使架构可扩展,可维护和可修改.如果有疑问,地图键总是报告那里的内容.添加很容易,因此正在修改.

标签:java,design-patterns

来源: https://codeday.me/bug/20190628/1316992.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值