diff --git a/design_patterns/pom.xml b/design_patterns/pom.xml new file mode 100644 index 0000000000000000000000000000000000000000..363807aba831778608d0fc35eafe9d3a99812bc6 --- /dev/null +++ b/design_patterns/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + com.hongyi + design_patterns + 1.0-SNAPSHOT + + + 15 + 15 + + + + + org.projectlombok + lombok + 1.18.22 + + + + \ No newline at end of file diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/AmericanCoffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/AmericanCoffee.java new file mode 100644 index 0000000000000000000000000000000000000000..b45a3ed0a4a33c1951845131977c20602f38d668 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/AmericanCoffee.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.bofore; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:11 + * @Version 1.0 + */ +public class AmericanCoffee extends Coffee{ + @Override + public String getName() { + return "美式咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/Coffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/Coffee.java new file mode 100644 index 0000000000000000000000000000000000000000..e5a1676bc6217b4d876fb77806abf72337f5d378 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/Coffee.java @@ -0,0 +1,21 @@ +package com.hongyi.pattern.factory.bofore; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:08 + * @Version 1.0 + */ +public abstract class Coffee { + + public abstract String getName(); + + // 加糖 + public void addSugar() { + System.out.println("加糖"); + } + + // 加奶 + public void addMilk() { + System.out.println("加奶"); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/CoffeeStore.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/CoffeeStore.java new file mode 100644 index 0000000000000000000000000000000000000000..799a370ff27962392633049ad0f5b49bf71f40f7 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/CoffeeStore.java @@ -0,0 +1,22 @@ +package com.hongyi.pattern.factory.bofore; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:12 + * @Version 1.0 + */ +public class CoffeeStore { + public Coffee orderCoffee(String type) { + Coffee coffee = null; + if ("amrican".equals(type)) { + coffee = new AmericanCoffee(); + } else if ("latte".equals(type)) { + coffee = new LatteCaffe(); + } else { + throw new RuntimeException("对不起,没有您点的咖啡"); + } + coffee.addMilk(); + coffee.addSugar(); + return coffee; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/LatteCaffe.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/LatteCaffe.java new file mode 100644 index 0000000000000000000000000000000000000000..e3c37fbf51d9df88d379f38a57239eda39b104eb --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/LatteCaffe.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.bofore; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:12 + * @Version 1.0 + */ +public class LatteCaffe extends Coffee{ + @Override + public String getName() { + return "拿铁咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/Test.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/Test.java new file mode 100644 index 0000000000000000000000000000000000000000..3b142376fa73e025bcf4cdf1fc2f76b49d79eeb6 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/bofore/Test.java @@ -0,0 +1,14 @@ +package com.hongyi.pattern.factory.bofore; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:15 + * @Version 1.0 + */ +public class Test { + public static void main(String[] args) { + CoffeeStore store = new CoffeeStore(); + Coffee coffee = store.orderCoffee("latte"); + System.out.println(coffee.getName()); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/AmericanCoffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/AmericanCoffee.java new file mode 100644 index 0000000000000000000000000000000000000000..b0a8d332a75bf629fdbc0637c456da3605b7466e --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/AmericanCoffee.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:11 + * @Version 1.0 + */ +public class AmericanCoffee extends Coffee { + @Override + public String getName() { + return "美式咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/AmericanDessertFactory.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/AmericanDessertFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..6c4b441beb68a518314fa66f892748da770a1ff2 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/AmericanDessertFactory.java @@ -0,0 +1,18 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 19:33 + * @Version 1.0 + */ +public class AmericanDessertFactory implements DessertFactory{ + @Override + public Coffee createCoffee() { + return new AmericanCoffee(); + } + + @Override + public Dessert createDessert() { + return new Mousse(); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Coffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Coffee.java new file mode 100644 index 0000000000000000000000000000000000000000..3602a6eeaa082559554a65f0a5646a83c0593284 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Coffee.java @@ -0,0 +1,21 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:08 + * @Version 1.0 + */ +public abstract class Coffee { + + public abstract String getName(); + + // 加糖 + public void addSugar() { + System.out.println("加糖"); + } + + // 加奶 + public void addMilk() { + System.out.println("加奶"); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Dessert.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Dessert.java new file mode 100644 index 0000000000000000000000000000000000000000..357f6869740df3e2e5d0809332427fc595ae596f --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Dessert.java @@ -0,0 +1,10 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 19:29 + * @Version 1.0 + */ +public abstract class Dessert { + public abstract void show(); +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/DessertFactory.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/DessertFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..fc2a30378c70efc1f426c454af10b04bf9605146 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/DessertFactory.java @@ -0,0 +1,14 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 19:32 + * @Version 1.0 + */ +public interface DessertFactory { + // 生产咖啡 + Coffee createCoffee(); + + // 生产甜品 + Dessert createDessert(); +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/ItalyDessertFactory.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/ItalyDessertFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..d0be91540dedafeab9eeb53165158a1eb3cb0cf1 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/ItalyDessertFactory.java @@ -0,0 +1,19 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 19:34 + * @Version 1.0 + */ +public class ItalyDessertFactory implements DessertFactory{ + + @Override + public Coffee createCoffee() { + return new LatteCaffe(); + } + + @Override + public Dessert createDessert() { + return new Tiramisu(); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/LatteCaffe.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/LatteCaffe.java new file mode 100644 index 0000000000000000000000000000000000000000..704eaa1616908b7d3f34e78a9822f0179db32b3a --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/LatteCaffe.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:12 + * @Version 1.0 + */ +public class LatteCaffe extends Coffee { + @Override + public String getName() { + return "拿铁咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Mousse.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Mousse.java new file mode 100644 index 0000000000000000000000000000000000000000..cd9cf53e6d479d769882a2f884fc81958748730d --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Mousse.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 19:31 + * @Version 1.0 + */ +public class Mousse extends Dessert{ + @Override + public void show() { + System.out.println("抹茶慕斯"); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Test.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Test.java new file mode 100644 index 0000000000000000000000000000000000000000..0ebc1634f4fd81e61fdf290672b8b53efdd0496c --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Test.java @@ -0,0 +1,16 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 19:35 + * @Version 1.0 + */ +public class Test { + public static void main(String[] args) { + ItalyDessertFactory factory = new ItalyDessertFactory(); + Coffee coffee = factory.createCoffee(); + Dessert dessert = factory.createDessert(); + System.out.println(coffee.getName()); + dessert.show(); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Tiramisu.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Tiramisu.java new file mode 100644 index 0000000000000000000000000000000000000000..809785f44fc54a8af72afbf484603daa47c45236 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_abstract/Tiramisu.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_abstract; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 19:30 + * @Version 1.0 + */ +public class Tiramisu extends Dessert{ + @Override + public void show() { + System.out.println("提拉米苏"); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/AmericanCoffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/AmericanCoffee.java new file mode 100644 index 0000000000000000000000000000000000000000..6483ae6851459891a1c83c0bf5913283665805ad --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/AmericanCoffee.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_config; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:11 + * @Version 1.0 + */ +public class AmericanCoffee extends Coffee { + @Override + public String getName() { + return "美式咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/Coffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/Coffee.java new file mode 100644 index 0000000000000000000000000000000000000000..1e9f84ef3e35bcdabc976f88431873d4e8a0cbb3 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/Coffee.java @@ -0,0 +1,21 @@ +package com.hongyi.pattern.factory.factory_config; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:08 + * @Version 1.0 + */ +public abstract class Coffee { + + public abstract String getName(); + + // 加糖 + public void addSugar() { + System.out.println("加糖"); + } + + // 加奶 + public void addMilk() { + System.out.println("加奶"); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/CoffeeFactory.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/CoffeeFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..44914d5796476020c999dcfe303a6f5c9b7c9ab1 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/CoffeeFactory.java @@ -0,0 +1,51 @@ +package com.hongyi.pattern.factory.factory_config; + +import java.io.IOException; +import java.io.InputStream; +import java.util.HashMap; +import java.util.Properties; +import java.util.Set; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 19:50 + * @Version 1.0 + */ +public class CoffeeFactory { + + // 1.定义容器对象存储咖啡对象 + private static HashMap map = new HashMap<>(); + + // 2.加载配置文件(只需要加载一次,因此使用静态代码块),创建配置文件中的对象并存储 + static { + // 2.1创建Properties对象 + Properties p = new Properties(); + // 2.2调用p对象中的load方法进行配置文件的加载 + InputStream is = CoffeeFactory.class.getClassLoader().getResourceAsStream("bean.properties"); + try { + p.load(is); + // 从p集合中获取全类名并创建对象 + Set keys = p.keySet(); + for (Object key : keys) { + // 获取全类名 + String className = p.getProperty((String) key); + // 通过反射创建对象 + Class clazz = Class.forName(className); + Coffee coffee = (Coffee) clazz.newInstance(); + // 将名称和对象存储到容器当中 + map.put((String) key, coffee); + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * 根据名称获取对象 + * @param name 名称 + * @return Coffee + */ + public static Coffee createCoffee(String name) { + return map.get(name); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/LatteCaffe.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/LatteCaffe.java new file mode 100644 index 0000000000000000000000000000000000000000..5eb28ecf05f911366e6a98da3ace084eb1cc391c --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/LatteCaffe.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_config; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:12 + * @Version 1.0 + */ +public class LatteCaffe extends Coffee { + @Override + public String getName() { + return "拿铁咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/Test.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/Test.java new file mode 100644 index 0000000000000000000000000000000000000000..da30a4b1dca2df73b74be1e7e3be56e71f1c072f --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_config/Test.java @@ -0,0 +1,14 @@ +package com.hongyi.pattern.factory.factory_config; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 20:02 + * @Version 1.0 + */ +public class Test { + public static void main(String[] args) { + Coffee coffee1 = CoffeeFactory.createCoffee("american"); + Coffee coffee2 = CoffeeFactory.createCoffee("american"); + System.out.println(coffee1 == coffee2); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/AmericanCoffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/AmericanCoffee.java new file mode 100644 index 0000000000000000000000000000000000000000..3d0b27c893175bb4dd5e40e376a06400f183439a --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/AmericanCoffee.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_method; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:11 + * @Version 1.0 + */ +public class AmericanCoffee extends Coffee { + @Override + public String getName() { + return "美式咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/AmericanCoffeeFactory.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/AmericanCoffeeFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..b3e3a46ab74bb902754387c192f6a3d0db1688b2 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/AmericanCoffeeFactory.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_method; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:45 + * @Version 1.0 + */ +public class AmericanCoffeeFactory implements CoffeeFactory{ + @Override + public Coffee createCoffee() { + return new AmericanCoffee(); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/Coffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/Coffee.java new file mode 100644 index 0000000000000000000000000000000000000000..f4716a82f40146431f964a5a55682a5c24fc6920 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/Coffee.java @@ -0,0 +1,21 @@ +package com.hongyi.pattern.factory.factory_method; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:08 + * @Version 1.0 + */ +public abstract class Coffee { + + public abstract String getName(); + + // 加糖 + public void addSugar() { + System.out.println("加糖"); + } + + // 加奶 + public void addMilk() { + System.out.println("加奶"); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/CoffeeFactory.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/CoffeeFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..26b7d31e644fa91fd86a57b80078a88b26629d19 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/CoffeeFactory.java @@ -0,0 +1,11 @@ +package com.hongyi.pattern.factory.factory_method; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:44 + * @Version 1.0 + */ +public interface CoffeeFactory { + // 创建咖啡对象的方法 + Coffee createCoffee(); +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/CoffeeStore.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/CoffeeStore.java new file mode 100644 index 0000000000000000000000000000000000000000..1ac8895515c3702137dd4a188b9a07beb57738f2 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/CoffeeStore.java @@ -0,0 +1,23 @@ +package com.hongyi.pattern.factory.factory_method; + + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:12 + * @Version 1.0 + */ +public class CoffeeStore { + + private CoffeeFactory factory; + + public void setFactory(CoffeeFactory factory) { + this.factory = factory; + } + + public Coffee orderCoffee() { + Coffee coffee = factory.createCoffee(); + coffee.addMilk(); + coffee.addSugar(); + return coffee; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/LatteCaffe.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/LatteCaffe.java new file mode 100644 index 0000000000000000000000000000000000000000..81912c2e75472b8fd8309672cd3cb2cdccbd46ef --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/LatteCaffe.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_method; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:12 + * @Version 1.0 + */ +public class LatteCaffe extends Coffee { + @Override + public String getName() { + return "拿铁咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/LatteCoffeeFactory.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/LatteCoffeeFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..275bc488662744486fdb7938371b7254b0040641 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/LatteCoffeeFactory.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.factory_method; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:45 + * @Version 1.0 + */ +public class LatteCoffeeFactory implements CoffeeFactory{ + @Override + public Coffee createCoffee() { + return new LatteCaffe(); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/test.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/test.java new file mode 100644 index 0000000000000000000000000000000000000000..bddfd7a757cb76fb30160be2aeadbbff3294abe3 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/factory_method/test.java @@ -0,0 +1,19 @@ +package com.hongyi.pattern.factory.factory_method; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:49 + * @Version 1.0 + */ +public class test { + public static void main(String[] args) { + // 创建咖啡店 + CoffeeStore store = new CoffeeStore(); + // 创建工厂对象 + CoffeeFactory factory = new AmericanCoffeeFactory(); + store.setFactory(factory); + // 点咖啡 + Coffee coffee = store.orderCoffee(); + System.out.println(coffee.getName()); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/AmericanCoffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/AmericanCoffee.java new file mode 100644 index 0000000000000000000000000000000000000000..2bb52018d719c7392b08e5f6a44890b65c631da0 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/AmericanCoffee.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.simple; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:11 + * @Version 1.0 + */ +public class AmericanCoffee extends Coffee { + @Override + public String getName() { + return "美式咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/Coffee.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/Coffee.java new file mode 100644 index 0000000000000000000000000000000000000000..89c7c00d63c8aefd11520e403b154a0a41bf8d47 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/Coffee.java @@ -0,0 +1,21 @@ +package com.hongyi.pattern.factory.simple; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:08 + * @Version 1.0 + */ +public abstract class Coffee { + + public abstract String getName(); + + // 加糖 + public void addSugar() { + System.out.println("加糖"); + } + + // 加奶 + public void addMilk() { + System.out.println("加奶"); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/CoffeeStore.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/CoffeeStore.java new file mode 100644 index 0000000000000000000000000000000000000000..ce67b163aeaba047888bc842f4652a7e2e39c00a --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/CoffeeStore.java @@ -0,0 +1,15 @@ +package com.hongyi.pattern.factory.simple; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:12 + * @Version 1.0 + */ +public class CoffeeStore { + public Coffee orderCoffee(String type) { + Coffee coffee = SimpleCoffeeFactory.createCoffee(type); + coffee.addMilk(); + coffee.addSugar(); + return coffee; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/LatteCaffe.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/LatteCaffe.java new file mode 100644 index 0000000000000000000000000000000000000000..dcc7012d62f2a662c622d2eb1ea840bf48bc6cf9 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/LatteCaffe.java @@ -0,0 +1,13 @@ +package com.hongyi.pattern.factory.simple; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:12 + * @Version 1.0 + */ +public class LatteCaffe extends Coffee { + @Override + public String getName() { + return "拿铁咖啡"; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/SimpleCoffeeFactory.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/SimpleCoffeeFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..7004b834b1fbdeaf0117de046dafa00b8c20f5b9 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/SimpleCoffeeFactory.java @@ -0,0 +1,21 @@ +package com.hongyi.pattern.factory.simple; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:24 + * @Version 1.0 + */ +public class SimpleCoffeeFactory { + + public static Coffee createCoffee(String type) { + Coffee coffee = null; + if ("american".equals(type)) { + coffee = new AmericanCoffee(); + } else if ("latte".equals(type)) { + coffee = new LatteCaffe(); + } else { + throw new RuntimeException("对不起,没有您点的咖啡"); + } + return coffee; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/test.java b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/test.java new file mode 100644 index 0000000000000000000000000000000000000000..378ab1b7a1365ef955f273c7ca9388519461ded0 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/factory/simple/test.java @@ -0,0 +1,14 @@ +package com.hongyi.pattern.factory.simple; + +/** + * @Author Kisugi Takumi + * @Date 2022/10/2 16:28 + * @Version 1.0 + */ +public class test { + public static void main(String[] args) { + CoffeeStore store = new CoffeeStore(); + Coffee coffee = store.orderCoffee("american"); + System.out.println(coffee.getName()); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo1/Singleton.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo1/Singleton.java new file mode 100644 index 0000000000000000000000000000000000000000..1f6ff30584d75cca300a1b7e70b734dd4d1ef797 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo1/Singleton.java @@ -0,0 +1,20 @@ +package com.hongyi.pattern.singleton.demo1; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 10:22 + * @Version 1.0 + */ +public class Singleton { + + // 1.私有构造方法 + private Singleton() {}; + + // 2.在本类中创建该类对象 + private static Singleton instance = new Singleton(); + + // 3.提供一个公共的访问方式,让外界获取 + public static Singleton getInstance() { + return instance; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo1/Test.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo1/Test.java new file mode 100644 index 0000000000000000000000000000000000000000..5727ef2ed4dadf1bda492b8814e2d138527c14cf --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo1/Test.java @@ -0,0 +1,14 @@ +package com.hongyi.pattern.singleton.demo1; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 10:25 + * @Version 1.0 + */ +public class Test { + public static void main(String[] args) { + Singleton instance1 = Singleton.getInstance(); + Singleton instance2 = Singleton.getInstance(); + System.out.println(instance1 == instance2); // true + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo2/Singleton.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo2/Singleton.java new file mode 100644 index 0000000000000000000000000000000000000000..ce7bdcf9bf0dfb2155ad8ada5ef8892442f5baca --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo2/Singleton.java @@ -0,0 +1,24 @@ +package com.hongyi.pattern.singleton.demo2; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 10:30 + * @Version 1.0 + */ +public class Singleton { + // 1.私有构造方法 + private Singleton() {}; + + // 2.声明Singleton类型的变量 + private static Singleton instance; + + // 3.在静态代码块中进行赋值 + static { + instance = new Singleton(); + } + + // 4.提供一个公共的访问方式,让外界获取 + public static Singleton getInstance() { + return instance; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo3/Singleton.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo3/Singleton.java new file mode 100644 index 0000000000000000000000000000000000000000..8547e2f8aa429a607cd3d18be7f5ecdb46c5a85b --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo3/Singleton.java @@ -0,0 +1,23 @@ +package com.hongyi.pattern.singleton.demo3; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 10:35 + * @Version 1.0 + */ +public class Singleton { + // 1.私有构造方法 + private Singleton() {}; + + // 2.声明Singleton类型的变量 + private static Singleton instance; + + // 3.对外提供访问方式 + public static synchronized Singleton getInstance() { + // instance为null,说明还未被创建 + if (instance == null) { + instance = new Singleton(); + } + return instance; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo4/Singleton.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo4/Singleton.java new file mode 100644 index 0000000000000000000000000000000000000000..05bdd148bdd3eb428bd02ff1d118c09bf3d71a76 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo4/Singleton.java @@ -0,0 +1,29 @@ +package com.hongyi.pattern.singleton.demo4; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 10:48 + * @Version 1.0 + */ +public class Singleton { + // 1.私有构造方法 + private Singleton() {}; + + // 2.声明变量 + private static Singleton instance; + + // 3.对外提供方法 + public static Singleton getInstance() { + // 第一次判断,如果instance不为null,则不需要抢占锁,直接返回对象 + // 如果为null,则需要抢占锁来创建instance对象 + if (instance == null) { + synchronized (Singleton.class) { + // 第二次判断 + if (instance == null) { + instance = new Singleton(); + } + } + } + return instance; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo5/Singleton.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo5/Singleton.java new file mode 100644 index 0000000000000000000000000000000000000000..6a12eac7a0447f9b726278bb3398a0e169a0f489 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo5/Singleton.java @@ -0,0 +1,22 @@ +package com.hongyi.pattern.singleton.demo5; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 11:00 + * @Version 1.0 + */ +public class Singleton { + // 1.私有构造方法 + private Singleton() {}; + + // 2.定义一个静态内部类 + private static class SingletonHolder { + // 在内部类中声明并且初始化外部类的对象 + private static final Singleton INSTANCE = new Singleton(); + } + + // 3.提供对外方法 + public static Singleton getInstance() { + return SingletonHolder.INSTANCE; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo6/Singleton.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo6/Singleton.java new file mode 100644 index 0000000000000000000000000000000000000000..a1f318c785201e889a27c5b99275853f019594d3 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo6/Singleton.java @@ -0,0 +1,10 @@ +package com.hongyi.pattern.singleton.demo6; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 11:07 + * @Version 1.0 + */ +public enum Singleton { + INSTANCE; +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo6/test.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo6/test.java new file mode 100644 index 0000000000000000000000000000000000000000..9ab590b3e26bcb8b78051035431ae33266a48df5 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo6/test.java @@ -0,0 +1,14 @@ +package com.hongyi.pattern.singleton.demo6; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 11:08 + * @Version 1.0 + */ +public class test { + public static void main(String[] args) { + Singleton instance1 = Singleton.INSTANCE; + Singleton instance2 = Singleton.INSTANCE; + System.out.println(instance1 == instance2); // true + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Singleton.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Singleton.java new file mode 100644 index 0000000000000000000000000000000000000000..2d3563fbecd9afd9b5fbd104f13c011103d5b86c --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Singleton.java @@ -0,0 +1,20 @@ +package com.hongyi.pattern.singleton.demo7; + +import java.io.Serializable; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 11:12 + * @Version 1.0 + */ +public class Singleton implements Serializable { + private Singleton() {}; + + private static class SingletonHolder { + private static final Singleton INSTANCE = new Singleton(); + } + + public static Singleton getInstance() { + return SingletonHolder.INSTANCE; + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Test.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Test.java new file mode 100644 index 0000000000000000000000000000000000000000..6b776ec208ba47af7ab21e5b2d3a4649c56b6263 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Test.java @@ -0,0 +1,38 @@ +package com.hongyi.pattern.singleton.demo7; + +import java.io.*; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 11:16 + * @Version 1.0 + */ +public class Test { + public static void main(String[] args) throws Exception { + writeObject2File(); + readObjectFromFile(); + readObjectFromFile(); + } + + // 从文件中读数据(对象) + public static void readObjectFromFile() throws Exception { + // 创建对象输入流对象 + ObjectInputStream ois = new ObjectInputStream(new FileInputStream("D:\\a.txt")); + // 读取对象 + Singleton instance = (Singleton) ois.readObject(); + System.out.println(instance); + // 释放资源 + ois.close(); + } + + // 向文件中写数据(对象) + public static void writeObject2File() throws Exception { + Singleton instance = Singleton.getInstance(); + // 创建对象输出流对象 + ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("D:\\a.txt")); + // 写入对象 + oos.writeObject(instance); + // 释放资源 + oos.close(); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Test1.java b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Test1.java new file mode 100644 index 0000000000000000000000000000000000000000..fb8bde186800a349d54841cd6f582220a37e57dc --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/pattern/singleton/demo7/Test1.java @@ -0,0 +1,24 @@ +package com.hongyi.pattern.singleton.demo7; + +import java.lang.reflect.Constructor; +import java.lang.reflect.InvocationTargetException; + +/** + * @Author Kisugi Takumi + * @Date 2022/9/30 11:24 + * @Version 1.0 + */ +public class Test1 { + public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + // 获取Singleton的字节码对象 + Class clazz = Singleton.class; + // 获取无参构造器方法对象 + Constructor cons = clazz.getDeclaredConstructor(); + // 取消访问检查 + cons.setAccessible(true); + // 创建Singleton对象 + Singleton singleton1 = cons.newInstance(); + Singleton singleton2 = cons.newInstance(); + System.out.println(singleton1 == singleton2); // false + } +} diff --git a/design_patterns/src/main/java/com/hongyi/principles/demo1/AbstractSkin.java b/design_patterns/src/main/java/com/hongyi/principles/demo1/AbstractSkin.java new file mode 100644 index 0000000000000000000000000000000000000000..931cad3d40f3111b8b4e8ae66a9852f6bda78890 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/principles/demo1/AbstractSkin.java @@ -0,0 +1,11 @@ +package com.hongyi.principles.demo1; + +/** + * @Author Kisugi Takumi + * @Date 2022/7/14 15:17 + * @Version 1.0 + */ +public abstract class AbstractSkin { + // 显示的方法 + public abstract void display(); +} diff --git a/design_patterns/src/main/java/com/hongyi/principles/demo1/Client.java b/design_patterns/src/main/java/com/hongyi/principles/demo1/Client.java new file mode 100644 index 0000000000000000000000000000000000000000..4c81d4fb3a3466aaa480531a5890e9151516e76b --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/principles/demo1/Client.java @@ -0,0 +1,20 @@ +package com.hongyi.principles.demo1; + +/** + * @Author Kisugi Takumi + * @Date 2022/7/14 15:20 + * @Version 1.0 + */ +public class Client { + public static void main(String[] args) { + // 1.创建搜狗输入法的对象 + SougouInput input = new SougouInput(); + // 2.创建皮肤对象 + DefaultSkin defaultSkin = new DefaultSkin(); + HongyiSkin hongyiSkin = new HongyiSkin(); + // 3.将皮肤设置到输入法中 + input.setSkin(defaultSkin); + // 4.显示皮肤 + input.display(); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/principles/demo1/DefaultSkin.java b/design_patterns/src/main/java/com/hongyi/principles/demo1/DefaultSkin.java new file mode 100644 index 0000000000000000000000000000000000000000..c084e4db9dfe8aae8a6fe02a287240d589d522b2 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/principles/demo1/DefaultSkin.java @@ -0,0 +1,13 @@ +package com.hongyi.principles.demo1; + +/** + * @Author Kisugi Takumi + * @Date 2022/7/14 15:18 + * @Version 1.0 + */ +public class DefaultSkin extends AbstractSkin{ + @Override + public void display() { + System.out.println("默认皮肤..."); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/principles/demo1/HongyiSkin.java b/design_patterns/src/main/java/com/hongyi/principles/demo1/HongyiSkin.java new file mode 100644 index 0000000000000000000000000000000000000000..fc478a1b6e09a3d718aa1126c494d288cbfa3623 --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/principles/demo1/HongyiSkin.java @@ -0,0 +1,14 @@ +package com.hongyi.principles.demo1; + +/** + * @Author Kisugi Takumi + * @Date 2022/7/14 15:18 + * @Version 1.0 + */ +public class HongyiSkin extends AbstractSkin{ + + @Override + public void display() { + System.out.println("Hongyi皮肤..."); + } +} diff --git a/design_patterns/src/main/java/com/hongyi/principles/demo1/SougouInput.java b/design_patterns/src/main/java/com/hongyi/principles/demo1/SougouInput.java new file mode 100644 index 0000000000000000000000000000000000000000..86d9bdf6de95b8eb7574655c9cb234f91c2a9b1a --- /dev/null +++ b/design_patterns/src/main/java/com/hongyi/principles/demo1/SougouInput.java @@ -0,0 +1,17 @@ +package com.hongyi.principles.demo1; + +import lombok.Data; + +/** + * @Author Kisugi Takumi + * @Date 2022/7/14 15:19 + * @Version 1.0 + */ +@Data +public class SougouInput { + private AbstractSkin skin; + + public void display() { + skin.display(); + } +} diff --git a/design_patterns/src/main/resources/bean.properties b/design_patterns/src/main/resources/bean.properties new file mode 100644 index 0000000000000000000000000000000000000000..e78dec0961793af377c714fe9575e3263bc02d94 --- /dev/null +++ b/design_patterns/src/main/resources/bean.properties @@ -0,0 +1,2 @@ +american=com.hongyi.pattern.factory.factory_config.AmericanCoffee +latte=com.hongyi.pattern.factory.factory_config.LatteCaffe \ No newline at end of file