项目:根据设计模式相关的知识点定义一个商品类,包括商品类型、价格、商品id,商品名称三个属性,有如下三个商品,【oppo、1999元、id:1】、【卫龙、0.5元、id:3】、【保暖裤、19元、id:4】,将这个三个商品加入购物车中去,并按价格从低到高输出。
public class Test1 {
public static void main(String[] args) {
List<Commodity> shoppingCar = new ArrayList<>();
CommodityFactory commodityFactory = new CommodityFactory();
// 向购物车 加入卫龙
shoppingCar.add(commodityFactory.create(Food.class).createCommodity());
// 向购物车 加入 oppo
shoppingCar.add(commodityFactory.create(Phone.class).createCommodity());
// 向购物车 加入 保暖裤
shoppingCar.add(commodityFactory.create(Clothes.class).createCommodity());
// 排序
shoppingCar.sort((o1, o2) -> {return o1.getPrice().compareTo(o2.getPrice());});
System.out.println(shoppingCar);
}
}
/**
* 商品类
*/
class Commodity{
/**
* id
*/
private int id;
/**
* 价格
*/
private BigDecimal price;
/**
* 产品名称
*/
private String name;
@Override
public String toString() {
return "Commodity{" +
"id=" + id +
", 价格=" + price + "元" +
", 产品名称='" + name + '\'' +
'}';
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public BigDecimal getPrice() {
return price;
}
public void setPrice(BigDecimal price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
interface ICommodity{
Commodity createCommodity();
}
/**
* 创建 商品的工厂
*/
class CommodityFactory{
/**
* 反射创建 对应的 类
* @param clazz
* @return
*/
public ICommodity create(Class<? extends ICommodity> clazz){
try {
if (clazz != null){
return clazz.newInstance();
}
} catch (Exception e){
e.printStackTrace();
}
return null;
}
}
class Phone implements ICommodity{
@Override
public Commodity createCommodity() {
Commodity commodity = new Commodity();
commodity.setId(1);
commodity.setName("oppo");
commodity.setPrice(new BigDecimal("1999"));
return commodity;
}
}
class Food implements ICommodity{
@Override
public Commodity createCommodity() {
Commodity commodity = new Commodity();
commodity.setId(3);
commodity.setName("卫龙");
commodity.setPrice(new BigDecimal("0.5"));
return commodity;
}
}
class Clothes implements ICommodity{
@Override
public Commodity createCommodity() {
Commodity commodity = new Commodity();
commodity.setId(4);
commodity.setName("保暖裤");
commodity.setPrice(new BigDecimal("19"));
return commodity;
}
}
这玩意儿你不说清楚实在是想不到难点问题在哪儿;
建类不会?
类属性不会?
多参数构造方法不会?
List 不会?
排序不会?
输出不会?
写一个接口(加入购物车行为),再写一个类实现这个接口,或者直接让商品类去实现这个接口
普通工厂模式
@Data
@Builder
public class Commodity {
private int id;
private String name;
private String price;
}
public interface Shopping {
Commodity shopping();
}
public class OppoShop implements Shopping {
@Override
public Commodity shopping() {
Commodity commodity = Commodity.builder()
.id(1)
.name("oppo")
.price("1").build();
return commodity;
}
}
public class WLShop implements Shopping {
@Override
public Commodity shopping() {
Commodity commodity = Commodity.builder()
.id(2)
.name("卫龙")
.price("2").build();
return commodity;
}
}
public class BLKShop implements Shopping {
@Override
public Commodity shopping() {
Commodity commodity = Commodity.builder()
.id(3)
.name("保暖裤")
.price("3").build();
return commodity;
}
}
public class ShoppingFactory {
public Shopping shop(String type) {
switch (type) {
case "oppo":
return new OppoShop();
case "wl":
return new WLShop();
case "blk":
return new BLKShop();
default:
return null;
}
}
}
public void test() {
ShoppingFactory shoppingFactory = new ShoppingFactory();
Shopping shopping = shoppingFactory.shop("oppo");
Commodity oppoCom = shopping.shopping();
shopping = shoppingFactory.shop("wl");
Commodity wlcom = shopping.shopping();
shopping = shoppingFactory.shop("blk");
Commodity blkCom = shopping.shopping();
List<Commodity> commodities = new ArrayList<Commodity>(){{
add(oppoCom);
add(wlcom);
add(blkCom);
}};
commodities.stream().sorted(Comparator.comparing(Commodity::getPrice)).collect(Collectors.toList());
System.out.println(commodities.toString());
}