建造者模式
大白话:将一个庞大的系统拆分成小份、小份之间互不影响、小份有者同样的制造过程,这就是建造者模式
举个例子:
我们去肯德基吃快餐, 肯定有它店铺的套餐可以供我们选择,套餐就是庞大的系统,套餐里面最简单的有:汉堡、饮料(组成小份),他们可以任意搭配组成不同的价格
小份有着相同的制造过程,比如汉堡用纸盒包装/饮料用瓶子包装,这里的包装就是建造过程。
何时使用:一些基本部件不会变,而其组合经常变化的时候。
灵魂画师 go~
测试代码:
//一个商品的超类接口
//单品接口
public interface Item {
//单品名称
String name();
//价格
Double price();
//打包方式
Packing pack();
}
//商品有各自的打包方式 创建一个打包的接口
//包装方式
public interface Packing {
//打包方式
String packing();
}
// 汉堡实现商品的接口 并且完善自己的打包方式;
public class Hanbao implements Item {
@Override
public String name() {
return "汉堡";
}
@Override
public Double price() {
return 21.00;
}
@Override
public Packing pack() {
return new HeZhuang();
}
}
//汉堡是盒装
public class HeZhuang implements Packing {
@Override
public String packing() {
return "盒装";
}
}
//可乐实现商品接口
public class Kele implements Item {
@Override
public String name() {
return "可乐";
}
@Override
public Double price() {
return 5.00;
}
@Override
public Packing pack() {
return new PingZhuang();
}
}
//可乐独有的打包方式
public class PingZhuang implements Packing {
@Override
public String packing() {
return "瓶装";
}
}
//建造者模式提供一个菜单组合 用于组合想要的单品组成套餐
public class ItemList {
private List<Item> list = new ArrayList<>();
//增加一个套餐
public void addItem(Item item){
list.add(item);
}
//组合总价
public Double getPrice(){
Double price = 0.00;
for (Item item : list) {
price+= item.price();
}
return price;
}
//组合详情
public void detail() {
for (Item item : list) {
System.out.print(item.name()+"-->");
System.out.print(item.price()+"-->");
System.out.print(item.pack().packing()+"-->");
}
}
}
//开始测试
public class Main {
public static void main(String[] args) {
System.out.print(no1().getPrice());
no1().detail();
System.out.println("");
no2().detail();
System.out.print(no2().getPrice());
}
//套餐一 汉堡2 + 可乐1
public static ItemList no1(){
Hanbao hanbao = new Hanbao();
Hanbao hanbao2 = new Hanbao();
Kele kele = new Kele();
ItemList list = new ItemList();
list.addItem(hanbao);
list.addItem(hanbao2);
list.addItem(kele);
return list;
}
//套餐二 汉堡1 + 可乐2
public static ItemList no2(){
Hanbao hanbao = new Hanbao();
Kele kele = new Kele();
Kele kele2 = new Kele();
ItemList list = new ItemList();
list.addItem(hanbao);
list.addItem(kele2);
list.addItem(kele);
return list;
}
}
这里用连个方法组合了两个套餐,这就是建造者模式 ,