diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/Phone.java b/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/Phone.java new file mode 100644 index 0000000..421079e --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/Phone.java @@ -0,0 +1,24 @@ +package com.heibaiying.creational.prototype; + +import lombok.Data; + +@Data +public class Phone implements Cloneable { + + private String type; + + Phone(String type) { + System.out.println("构造器被调用"); + this.type = type; + } + + public void call() { + System.out.println(type + "拨打电话"); + } + + @Override + protected Object clone() throws CloneNotSupportedException { + System.out.println("克隆方法被调用"); + return super.clone(); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/SmartPhone.java b/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/SmartPhone.java new file mode 100644 index 0000000..e0bc79f --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/SmartPhone.java @@ -0,0 +1,28 @@ +package com.heibaiying.creational.prototype; + +import lombok.Data; + +import java.util.Date; + +@Data +public class SmartPhone implements Cloneable { + + private String type; + private Date productionDate; + + SmartPhone(String type, Date productionDate) { + this.type = type; + this.productionDate = productionDate; + } + + public void call() { + System.out.println(type + "拨打电话"); + } + + @Override + protected Object clone() throws CloneNotSupportedException { + SmartPhone smartPhone = (SmartPhone) super.clone(); + smartPhone.productionDate = (Date) smartPhone.productionDate.clone(); + return smartPhone; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/ZTest.java new file mode 100644 index 0000000..4dac5b1 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/creational/prototype/ZTest.java @@ -0,0 +1,16 @@ +package com.heibaiying.creational.prototype; + +import java.util.Date; + +public class ZTest { + public static void main(String[] args) throws CloneNotSupportedException { + Phone phone = new Phone("3G手机"); + Phone clonePhone = (Phone) phone.clone(); + clonePhone.call(); + + SmartPhone smartPhone = new SmartPhone("4G手机", new Date()); + SmartPhone cloneSmartPhone = (SmartPhone) smartPhone.clone(); + System.out.println(smartPhone == cloneSmartPhone); + System.out.println(smartPhone.getProductionDate() == cloneSmartPhone.getProductionDate()); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/ChargerAdapter.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/ChargerAdapter.java new file mode 100644 index 0000000..66fbce6 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/ChargerAdapter.java @@ -0,0 +1,12 @@ +package com.heibaiying.structural.adapter; + +public class ChargerAdapter extends PowerSupply implements Target { + @Override + public int output5V() { + int output = output220V(); + System.out.println("充电头适配转换"); + output = output / 44; + System.out.println("输出电压:" + output); + return output; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/PowerSupply.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/PowerSupply.java new file mode 100644 index 0000000..b82896a --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/PowerSupply.java @@ -0,0 +1,14 @@ +package com.heibaiying.structural.adapter; + +/** + * 电源类 + */ +public class PowerSupply { + + private final int output = 220; + + public int output220V() { + System.out.println("电源电压:" + output); + return output; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/Target.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/Target.java new file mode 100644 index 0000000..43f34c4 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/Target.java @@ -0,0 +1,5 @@ +package com.heibaiying.structural.adapter; + +public interface Target { + int output5V(); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/ZTest.java new file mode 100644 index 0000000..24052ac --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/adapter/ZTest.java @@ -0,0 +1,8 @@ +package com.heibaiying.structural.adapter; + +public class ZTest { + public static void main(String[] args) { + Target target = new ChargerAdapter(); + target.output5V(); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Blue.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Blue.java new file mode 100644 index 0000000..e921109 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Blue.java @@ -0,0 +1,9 @@ +package com.heibaiying.structural.bridge; + +public class Blue implements Color { + + @Override + public String getDesc() { + return "蓝色"; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Color.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Color.java new file mode 100644 index 0000000..546c62c --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Color.java @@ -0,0 +1,5 @@ +package com.heibaiying.structural.bridge; + +public interface Color { + String getDesc(); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Red.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Red.java new file mode 100644 index 0000000..dc4b1e8 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Red.java @@ -0,0 +1,8 @@ +package com.heibaiying.structural.bridge; + +public class Red implements Color { + @Override + public String getDesc() { + return "红色"; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Round.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Round.java new file mode 100644 index 0000000..8df8c4c --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Round.java @@ -0,0 +1,9 @@ +package com.heibaiying.structural.bridge; + +public class Round extends Shape { + + @Override + public void getDesc() { + System.out.println(getColor().getDesc() + "圆形"); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Shape.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Shape.java new file mode 100644 index 0000000..af9a785 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Shape.java @@ -0,0 +1,17 @@ +package com.heibaiying.structural.bridge; + +public abstract class Shape { + + private Color color; + + public Shape setColor(Color color) { + this.color = color; + return this; + } + + public Color getColor() { + return color; + } + + public abstract void getDesc(); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Square.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Square.java new file mode 100644 index 0000000..07ef443 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Square.java @@ -0,0 +1,9 @@ +package com.heibaiying.structural.bridge; + +public class Square extends Shape { + + @Override + public void getDesc() { + System.out.println(getColor().getDesc() + "正方形"); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Test.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Test.java new file mode 100644 index 0000000..f040ea2 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Test.java @@ -0,0 +1,10 @@ +package com.heibaiying.structural.bridge; + +public class Test { + public static void main(String[] args) { + new Square().setColor(new Red()).getDesc(); + new Square().setColor(new Blue()).getDesc(); + new Round().setColor(new Blue()).getDesc(); + new Round().setColor(new Yellow()).getDesc(); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Yellow.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Yellow.java new file mode 100644 index 0000000..91a7ced --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/bridge/Yellow.java @@ -0,0 +1,8 @@ +package com.heibaiying.structural.bridge; + +public class Yellow implements Color { + @Override + public String getDesc() { + return "黄色"; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/Component.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/Component.java new file mode 100644 index 0000000..0b25529 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/Component.java @@ -0,0 +1,35 @@ +package com.heibaiying.structural.composite; + +import lombok.Data; + +@Data +public abstract class Component { + + private String name; + + public Component(String name) { + this.name = name; + } + + public void add(Component component) { + throw new UnsupportedOperationException("不支持添加操作"); + } + + public void remove(Component component) { + throw new UnsupportedOperationException("不支持删除操作"); + } + + + public void vim(String content) { + throw new UnsupportedOperationException("不支持使用vim编辑器打开"); + } + + public void cat() { + throw new UnsupportedOperationException("不支持查看操作"); + } + + public void print() { + throw new UnsupportedOperationException("不支持打印操作"); + } + +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/File.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/File.java new file mode 100644 index 0000000..36ac306 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/File.java @@ -0,0 +1,25 @@ +package com.heibaiying.structural.composite; + +public class File extends Component { + + private String content; + + public File(String name) { + super(name); + } + + @Override + public void vim(String content) { + this.content = content; + } + + @Override + public void cat() { + System.out.println(content); + } + + @Override + public void print() { + System.out.println(getName()); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/Folder.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/Folder.java new file mode 100644 index 0000000..bcf8480 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/Folder.java @@ -0,0 +1,29 @@ +package com.heibaiying.structural.composite; + +import java.util.ArrayList; +import java.util.List; + +public class Folder extends Component { + + private List componentList = new ArrayList<>(); + + public Folder(String name) { + super(name); + } + + @Override + public void add(Component component) { + componentList.add(component); + } + + @Override + public void remove(Component component) { + componentList.remove(component); + } + + @Override + public void print() { + System.out.println(getName()); + componentList.forEach(x -> System.out.println(" " + x.getName())); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/ZTest.java new file mode 100644 index 0000000..53f3f4a --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/composite/ZTest.java @@ -0,0 +1,18 @@ +package com.heibaiying.structural.composite; + +public class ZTest { + public static void main(String[] args) { + Folder rootDir = new Folder("ROOT目录"); + Folder nginx = new Folder("Nginx安装目录"); + Folder tomcat = new Folder("Tomcat安装目录"); + File startup = new File("startup.bat"); + rootDir.add(nginx); + rootDir.add(tomcat); + rootDir.add(startup); + rootDir.print(); + startup.vim("java -jar"); + startup.cat(); + nginx.cat(); + + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/Decorator.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/Decorator.java new file mode 100644 index 0000000..ceb6e45 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/Decorator.java @@ -0,0 +1,20 @@ +package com.heibaiying.structural.decorator; + +public abstract class Decorator extends Phone { + + private Phone phone; + + public Decorator(Phone phone) { + this.phone = phone; + } + + @Override + public int getPrice() { + return phone.getPrice(); + } + + @Override + public String getDesc() { + return phone.getDesc(); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/FilmDecorator.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/FilmDecorator.java new file mode 100644 index 0000000..3d5a24e --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/FilmDecorator.java @@ -0,0 +1,18 @@ +package com.heibaiying.structural.decorator; + +public class FilmDecorator extends Decorator { + + public FilmDecorator(Phone phone) { + super(phone); + } + + @Override + public int getPrice() { + return super.getPrice() + 100; + } + + @Override + public String getDesc() { + return super.getDesc() + " + 钢化膜"; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/MiPhone.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/MiPhone.java new file mode 100644 index 0000000..463ceaa --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/MiPhone.java @@ -0,0 +1,14 @@ +package com.heibaiying.structural.decorator; + +public class MiPhone extends Phone { + + @Override + public int getPrice() { + return 1999; + } + + @Override + public String getDesc() { + return "MiPhone"; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/Phone.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/Phone.java new file mode 100644 index 0000000..fb4b503 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/Phone.java @@ -0,0 +1,8 @@ +package com.heibaiying.structural.decorator; + +public abstract class Phone { + + public abstract int getPrice(); + + public abstract String getDesc(); +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/ShellDecorator.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/ShellDecorator.java new file mode 100644 index 0000000..c4cc331 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/ShellDecorator.java @@ -0,0 +1,19 @@ +package com.heibaiying.structural.decorator; + +public class ShellDecorator extends Decorator { + + public ShellDecorator(Phone phone) { + super(phone); + } + + @Override + public int getPrice() { + return super.getPrice() + 200; + } + + @Override + public String getDesc() { + return super.getDesc() + " + 手机壳"; + } + +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/ZTest.java new file mode 100644 index 0000000..1e027b1 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/decorator/ZTest.java @@ -0,0 +1,8 @@ +package com.heibaiying.structural.decorator; + +public class ZTest { + public static void main(String[] args) { + ShellDecorator decorator = new ShellDecorator(new FilmDecorator(new MiPhone())); + System.out.println(decorator.getDesc() + " : " + decorator.getPrice()); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/AccountService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/AccountService.java new file mode 100644 index 0000000..f4cee5d --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/AccountService.java @@ -0,0 +1,8 @@ +package com.heibaiying.structural.facade; + +public class AccountService { + public boolean balanceCheck() { + System.out.println("账户余额校验..."); + return true; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/EnvInspectionService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/EnvInspectionService.java new file mode 100644 index 0000000..b2fcbfc --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/EnvInspectionService.java @@ -0,0 +1,8 @@ +package com.heibaiying.structural.facade; + +public class EnvInspectionService { + public boolean evInspection() { + System.out.println("支付环境检查..."); + return true; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/LogisticsService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/LogisticsService.java new file mode 100644 index 0000000..15342c5 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/LogisticsService.java @@ -0,0 +1,7 @@ +package com.heibaiying.structural.facade; + +public class LogisticsService { + public void ship(Phone phone) { + System.out.println(phone.getName() + "已经发货,请注意查收..."); + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/OrderService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/OrderService.java new file mode 100644 index 0000000..31a883f --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/OrderService.java @@ -0,0 +1,17 @@ +package com.heibaiying.structural.facade; + +public class OrderService { + + private EnvInspectionService inspectionService = new EnvInspectionService(); + private AccountService accountService = new AccountService(); + private LogisticsService logisticsService = new LogisticsService(); + + public void order(Phone phone) { + if (inspectionService.evInspection()) { + if (accountService.balanceCheck()) { + System.out.println("支付成功"); + logisticsService.ship(phone); + } + } + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/Phone.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/Phone.java new file mode 100644 index 0000000..405a881 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/Phone.java @@ -0,0 +1,13 @@ +package com.heibaiying.structural.facade; + +import lombok.Data; + +@Data +public class Phone { + + private String name; + + public Phone(String name) { + this.name = name; + } +} diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/ZTest.java new file mode 100644 index 0000000..41b8705 --- /dev/null +++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/facade/ZTest.java @@ -0,0 +1,9 @@ +package com.heibaiying.structural.facade; + +public class ZTest { + public static void main(String[] args) { + Phone phone = new Phone("XXX手机"); + OrderService orderService = new OrderService(); + orderService.order(phone); + } +}