diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/BuilderMain.class b/out/production/patterns/com/pattern/BuilderPattern/materials/BuilderMain.class new file mode 100644 index 0000000000000000000000000000000000000000..69979caed0dfdf3c29165c1f25e9714acf7448a5 Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/BuilderMain.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/Goods.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/Goods.class new file mode 100644 index 0000000000000000000000000000000000000000..5fc2cf7a3a61246b84d1585020cd1ae124b8610e Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/Goods.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurger.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurger.class new file mode 100644 index 0000000000000000000000000000000000000000..4bb9308f4b2444ae7d23df389691314c9cfee368 Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurger.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurgerMeat.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurgerMeat.class new file mode 100644 index 0000000000000000000000000000000000000000..56700ff4bbbb5dcd831c57e72f090b454e6e6706 Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurgerMeat.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurgerVeg.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurgerVeg.class new file mode 100644 index 0000000000000000000000000000000000000000..3e22337b0194f19ba286229245ea5c079e37e581 Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/GoodsBurgerVeg.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/Packing.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/Packing.class new file mode 100644 index 0000000000000000000000000000000000000000..6f53c889770989565e3eff8281fceed86f5888f3 Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/Packing.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/PackingBottle.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/PackingBottle.class new file mode 100644 index 0000000000000000000000000000000000000000..e2847d4c24ca39412df8eacdc11bed9d328b333d Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/PackingBottle.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/PackingPlastic.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/PackingPlastic.class new file mode 100644 index 0000000000000000000000000000000000000000..980561ee04d20731a7a976cad571525b0943b777 Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/PackingPlastic.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/Shopping.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/Shopping.class new file mode 100644 index 0000000000000000000000000000000000000000..f0e1b118f66809dd3fd381bac3fcb55008e8c92e Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/Shopping.class differ diff --git a/out/production/patterns/com/pattern/BuilderPattern/materials/po/builder/Builder.class b/out/production/patterns/com/pattern/BuilderPattern/materials/po/builder/Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..7b28b2d538eca5b39e6d14e54e73d6e6d783513a Binary files /dev/null and b/out/production/patterns/com/pattern/BuilderPattern/materials/po/builder/Builder.class differ diff --git a/out/production/patterns/com/pattern/PatternApplication.class b/out/production/patterns/com/pattern/PatternApplication.class index f846909edd00327473a71160cfe27d1445305db0..b0809729bf61994fb7604ee243c1d81173d5025e 100644 Binary files a/out/production/patterns/com/pattern/PatternApplication.class and b/out/production/patterns/com/pattern/PatternApplication.class differ diff --git a/src/com/pattern/BuilderPattern/examples/README.md b/src/com/pattern/BuilderPattern/examples/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/com/pattern/BuilderPattern/materials/BuilderMain.java b/src/com/pattern/BuilderPattern/materials/BuilderMain.java new file mode 100644 index 0000000000000000000000000000000000000000..c7d392fbbc4a55d08573e589e9ac4f41ee5ea480 --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/BuilderMain.java @@ -0,0 +1,18 @@ +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()); + } + +} diff --git a/src/com/pattern/BuilderPattern/materials/README.md b/src/com/pattern/BuilderPattern/materials/README.md new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/src/com/pattern/BuilderPattern/materials/po/Goods.java b/src/com/pattern/BuilderPattern/materials/po/Goods.java new file mode 100644 index 0000000000000000000000000000000000000000..b338c0d1a5bde609b3ece39d09c016c5476c622e --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/Goods.java @@ -0,0 +1,26 @@ +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(); +} diff --git a/src/com/pattern/BuilderPattern/materials/po/GoodsBurger.java b/src/com/pattern/BuilderPattern/materials/po/GoodsBurger.java new file mode 100644 index 0000000000000000000000000000000000000000..b65451092d4b0cb8b5e93f87a6ccd47196b92a31 --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/GoodsBurger.java @@ -0,0 +1,18 @@ +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(); + } +} diff --git a/src/com/pattern/BuilderPattern/materials/po/GoodsBurgerMeat.java b/src/com/pattern/BuilderPattern/materials/po/GoodsBurgerMeat.java new file mode 100644 index 0000000000000000000000000000000000000000..a4db62beec96d800e9d93cbc33ebe90a8cc90174 --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/GoodsBurgerMeat.java @@ -0,0 +1,30 @@ +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; + } +} diff --git a/src/com/pattern/BuilderPattern/materials/po/GoodsBurgerVeg.java b/src/com/pattern/BuilderPattern/materials/po/GoodsBurgerVeg.java new file mode 100644 index 0000000000000000000000000000000000000000..e779a32d8fb07383357c32d7fdd5f4a768e84335 --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/GoodsBurgerVeg.java @@ -0,0 +1,30 @@ +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; + } +} diff --git a/src/com/pattern/BuilderPattern/materials/po/Packing.java b/src/com/pattern/BuilderPattern/materials/po/Packing.java new file mode 100644 index 0000000000000000000000000000000000000000..4f27e87da53cbc9fcf22bab8d0db18e1ffa73f9d --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/Packing.java @@ -0,0 +1,13 @@ +package com.pattern.BuilderPattern.materials.po; + +/** + * 打包 + * @author lx + */ +public interface Packing { + /** + * 打包 + * @return 响应打包类型 + */ + String doPack(); +} diff --git a/src/com/pattern/BuilderPattern/materials/po/PackingBottle.java b/src/com/pattern/BuilderPattern/materials/po/PackingBottle.java new file mode 100644 index 0000000000000000000000000000000000000000..f90d078792639b1d39dd770116d271521930cb1e --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/PackingBottle.java @@ -0,0 +1,19 @@ +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"; + } +} diff --git a/src/com/pattern/BuilderPattern/materials/po/PackingPlastic.java b/src/com/pattern/BuilderPattern/materials/po/PackingPlastic.java new file mode 100644 index 0000000000000000000000000000000000000000..eac72118bcf451be1baf947f1fb35bfac45ca260 --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/PackingPlastic.java @@ -0,0 +1,19 @@ +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"; + } +} diff --git a/src/com/pattern/BuilderPattern/materials/po/Shopping.java b/src/com/pattern/BuilderPattern/materials/po/Shopping.java new file mode 100644 index 0000000000000000000000000000000000000000..886cc4395676dde788352d6e10fb723b8c15b646 --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/Shopping.java @@ -0,0 +1,22 @@ +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 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(); + } +} diff --git a/src/com/pattern/BuilderPattern/materials/po/builder/Builder.java b/src/com/pattern/BuilderPattern/materials/po/builder/Builder.java new file mode 100644 index 0000000000000000000000000000000000000000..4e9b62595b8f67a11b50406b108f36e78c7d1cad --- /dev/null +++ b/src/com/pattern/BuilderPattern/materials/po/builder/Builder.java @@ -0,0 +1,23 @@ +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; + } +} diff --git a/src/com/pattern/PatternApplication.java b/src/com/pattern/PatternApplication.java index eabce33abaf792214bd268c6f0a4f9f4e9ca2562..d69eec79c143e0e6fab8e3a40feb3467a2caeaef 100644 --- a/src/com/pattern/PatternApplication.java +++ b/src/com/pattern/PatternApplication.java @@ -1,5 +1,7 @@ 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:抽象类不实现所有接口,构建类里面实例化一个载体,载体提供一些功能 */ }