提交 7a52f735 编写于 作者: C chenjianqiang

增加建造者模式 (*/ω\*)(*/ω\*)

上级 8ea932fb
package com.pattern.BuilderPattern.materials;
import com.pattern.BuilderPattern.materials.po.builder.Builder;
/**
* 建造者模式
*
* @author lx
* @date 2021/11/24 15:54
**/
public class BuilderMain {
public void main() {
Builder b = new Builder();
System.err.println("一共消费:" + b.shoppingOne().cost());
}
}
package com.pattern.BuilderPattern.materials.po;
/**
* 物品
* @author lx
* @date 2021/11/24 15:56
**/
public interface Goods {
/**
* 获取名字
* @return 名称
*/
String getName();
/**
* 获取价格
* @return 价格
*/
Float getPrice();
/**
* 包装类型
* @return 包装类型名称
*/
Packing doPack();
}
package com.pattern.BuilderPattern.materials.po;
/**
* @author lx
* @date 2021/11/24 16:02
**/
public abstract class GoodsBurger implements Goods{
/**
* 包装类型
*
* @return 包装类型名称
*/
@Override
public Packing doPack() {
// 往下所有的汉堡包打包方式都是 塑料袋
return new PackingPlastic();
}
}
package com.pattern.BuilderPattern.materials.po;
/**
* 汉堡的一种,,肉类
*
* @author lx
* @date 2021/11/24 16:02
**/
public class GoodsBurgerMeat extends GoodsBurger {
/**
* 获取名字
*
* @return 名称
*/
@Override
public String getName() {
return "meat-burger";
}
/**
* 获取价格
*
* @return 价格
*/
@Override
public Float getPrice() {
return 6.66F;
}
}
package com.pattern.BuilderPattern.materials.po;
/**
* 汉堡的一种,,蔬菜
*
* @author lx
* @date 2021/11/24 16:02
**/
public class GoodsBurgerVeg extends GoodsBurger {
/**
* 获取名字
*
* @return 名称
*/
@Override
public String getName() {
return "veg-burger";
}
/**
* 获取价格
*
* @return 价格
*/
@Override
public Float getPrice() {
return 56.55F;
}
}
package com.pattern.BuilderPattern.materials.po;
/**
* 打包
* @author lx
*/
public interface Packing {
/**
* 打包
* @return 响应打包类型
*/
String doPack();
}
package com.pattern.BuilderPattern.materials.po;
/**
* 玻璃瓶
*
* @author lx
* @date 2021/11/24 15:59
**/
public class PackingBottle implements Packing {
/**
* 打包
*
* @return 响应打包类型
*/
@Override
public String doPack() {
return "bottle";
}
}
package com.pattern.BuilderPattern.materials.po;
/**
* 塑料袋
*
* @author lx
* @date 2021/11/24 15:59
**/
public class PackingPlastic implements Packing {
/**
* 打包
*
* @return 响应打包类型
*/
@Override
public String doPack() {
return "plastic";
}
}
package com.pattern.BuilderPattern.materials.po;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author lx
* @date 2021/11/24 16:15
**/
public class Shopping {
private final List<Goods> goodsBuy = new ArrayList<>();
public void shop(Goods one){
System.out.println("购买了:" + one.getName());
goodsBuy.add(one);
}
public Double cost(){
return goodsBuy.parallelStream().mapToDouble(Goods::getPrice).sum();
}
}
package com.pattern.BuilderPattern.materials.po.builder;
import com.pattern.BuilderPattern.materials.po.Goods;
import com.pattern.BuilderPattern.materials.po.GoodsBurgerMeat;
import com.pattern.BuilderPattern.materials.po.GoodsBurgerVeg;
import com.pattern.BuilderPattern.materials.po.Shopping;
/**
* @author lx
* @date 2021/11/24 16:10
**/
public class Builder {
/**
* 就是为了创建 Shopping这个载体对象
*/
public Shopping shoppingOne() {
Shopping s = new Shopping();
s.shop(new GoodsBurgerMeat());
s.shop(new GoodsBurgerVeg());
return s;
}
}
package com.pattern;
import com.pattern.BuilderPattern.materials.BuilderMain;
/**
* @author lx
*/
......@@ -12,7 +14,6 @@ public class PatternApplication {
new InterpreterMain().main();
2021-10-14:制作多个计算规则,用这些规则去拼装组合来实现某些需求
2021-11-24:一个接口很多实例的类,其中一个类是终端计算规则,剩下的类传入一个或多个终端计算,并把每一个终端计算结果再进行计算,成为一个单独的计算规则
*/
......@@ -21,7 +22,6 @@ public class PatternApplication {
new StrategyMain().main();
2021-10-14:通过构造context传入不同的规则,再给context执行方法传入不同的值进行不同的计算
2021-11-24:context作为触发器,传进来不同的策略,然后执行策略里面的方法
*/
......@@ -29,8 +29,6 @@ public class PatternApplication {
3.工厂模式 -- 简单工厂
new SimpleFactoryMain().main();
2021-10-14:通过factory区分你确切需要的类,返回该类,执行内涵的方法
*/
......@@ -38,8 +36,6 @@ public class PatternApplication {
3.工厂模式 -- 方法工厂
new FunctionFactoryMain().main();
2021-10-14: 一个工厂只能造一种产品,也就是一个方法工厂返回一个对象,想要多个对象就要多个工厂
*/
......@@ -47,7 +43,6 @@ public class PatternApplication {
3.工厂模式 -- 抽象工厂
new AbstractFactoryMain().main();
2021-10-14: 把工厂抽象,实例化一个工厂定义多个对象的产出,然后实例化这个工厂就可以拿到多个产品
*/
......@@ -55,7 +50,6 @@ public class PatternApplication {
4.单例模式
new SingleMain().main();
2021-10-14:
*/
......@@ -64,8 +58,6 @@ public class PatternApplication {
5.模板模式
new TemplateMain().main();
2021-10-14:
*/
......@@ -75,16 +67,12 @@ public class PatternApplication {
代理模式 ---静态代理
new ProxyMain().staticMain();
2021-10-14:
*/
/*
7.适配器模式
new AdapterMain().main();
2021-11-24:
*/
......@@ -92,8 +80,6 @@ public class PatternApplication {
8.桥接模式
new BridgeMain().main();
2021-11-24: 传入一个类,被传入的对象调用类中的方法
*/
......@@ -102,8 +88,13 @@ public class PatternApplication {
9.原型模式
new PrototypeMain().main();
2021-11-24:
*/
/*
10.建造者模式
new BuilderMain().main();
2021-11-24:抽象类不实现所有接口,构建类里面实例化一个载体,载体提供一些功能
*/
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册