From 0aeefd7e05c70a9ebd243f7f1ab1bdd8a9e722c5 Mon Sep 17 00:00:00 2001
From: luoxiang <2806718453@qq.com>
Date: Sun, 8 Dec 2019 08:43:00 +0800
Subject: [PATCH] =?UTF-8?q?=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
code/Java/design-pattern/pom.xml | 5 ++
.../behavioral/state/CloseState.java | 14 ++++++
.../behavioral/state/PauseState.java | 9 ++++
.../behavioral/state/PlayState.java | 5 ++
.../heibaiying/behavioral/state/Player.java | 47 +++++++++++++++++++
.../behavioral/state/SpeedState.java | 9 ++++
.../heibaiying/behavioral/state/State.java | 26 ++++++++++
.../heibaiying/behavioral/state/ZTest.java | 13 +++++
.../behavioral/visitor/Archive.java | 8 ++++
.../behavioral/visitor/Company.java | 24 ++++++++++
.../behavioral/visitor/DepartManager.java | 14 ++++++
.../behavioral/visitor/President.java | 14 ++++++
.../behavioral/visitor/PublicArchive.java | 11 +++++
.../behavioral/visitor/SecretArchive.java | 11 +++++
.../behavioral/visitor/Visitor.java | 6 +++
.../heibaiying/behavioral/visitor/ZTest.java | 11 +++++
.../structural/flyweight/ArtPPT.java | 13 +++++
.../structural/flyweight/BusinessPPT.java | 13 +++++
.../structural/flyweight/PPTFactory.java | 26 ++++++++++
.../structural/flyweight/PowerPoint.java | 27 +++++++++++
.../structural/flyweight/SciencePPT.java | 13 +++++
.../structural/flyweight/ZTest.java | 16 +++++++
.../proxy/cglib/ComputeService.java | 7 +++
.../structural/proxy/cglib/Proxy.java | 36 ++++++++++++++
.../structural/proxy/cglib/ZTest.java | 9 ++++
.../proxy/dynamic_proxy/ComputeService.java | 8 ++++
.../proxy/dynamic_proxy/IService.java | 5 ++
.../structural/proxy/dynamic_proxy/ZTest.java | 19 ++++++++
.../proxy/static_proxy/ComputeService.java | 8 ++++
.../proxy/static_proxy/IService.java | 5 ++
.../proxy/static_proxy/ProxyService.java | 17 +++++++
.../structural/proxy/static_proxy/ZTest.java | 8 ++++
notes/Java_设计模式.md | 15 +++++-
33 files changed, 470 insertions(+), 2 deletions(-)
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/CloseState.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/PauseState.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/PlayState.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/Player.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/SpeedState.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/State.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/ZTest.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Archive.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Company.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/DepartManager.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/President.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/PublicArchive.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/SecretArchive.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Visitor.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/ZTest.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/ArtPPT.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/BusinessPPT.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/PPTFactory.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/PowerPoint.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/SciencePPT.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/ZTest.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/ComputeService.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/Proxy.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/ZTest.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/ComputeService.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/IService.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/ZTest.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ComputeService.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/IService.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ProxyService.java
create mode 100644 code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ZTest.java
diff --git a/code/Java/design-pattern/pom.xml b/code/Java/design-pattern/pom.xml
index 0dff2d4..9055d05 100644
--- a/code/Java/design-pattern/pom.xml
+++ b/code/Java/design-pattern/pom.xml
@@ -27,6 +27,11 @@
1.18.10
provided
+
+ cglib
+ cglib
+ 3.3.0
+
\ No newline at end of file
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/CloseState.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/CloseState.java
new file mode 100644
index 0000000..3a5fc84
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/CloseState.java
@@ -0,0 +1,14 @@
+package com.heibaiying.behavioral.state;
+
+public class CloseState extends State {
+
+ @Override
+ public void pause() {
+ System.out.println("操作失败:视频已处于关闭状态,无需暂停");
+ }
+
+ @Override
+ public void speed() {
+ System.out.println("操作失败:视频已处于关闭状态,无法加速");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/PauseState.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/PauseState.java
new file mode 100644
index 0000000..502e7f5
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/PauseState.java
@@ -0,0 +1,9 @@
+package com.heibaiying.behavioral.state;
+
+public class PauseState extends State {
+
+ @Override
+ public void speed() {
+ System.out.print("操作失败:暂停状态下不支持加速");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/PlayState.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/PlayState.java
new file mode 100644
index 0000000..594b5d8
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/PlayState.java
@@ -0,0 +1,5 @@
+package com.heibaiying.behavioral.state;
+
+public class PlayState extends State {
+
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/Player.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/Player.java
new file mode 100644
index 0000000..f967dec
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/Player.java
@@ -0,0 +1,47 @@
+package com.heibaiying.behavioral.state;
+
+public class Player {
+
+ private State state;
+
+ public final static PlayState PLAY_STATE = new PlayState();
+ public final static PauseState PAUSE_STATE = new PauseState();
+ public final static CloseState CLOSE_STATE = new CloseState();
+ public final static SpeedState SPEED_STATE = new SpeedState();
+
+ public State getState() {
+ return state;
+ }
+
+ public void setState(State state) {
+ this.state = state;
+ this.state.setPlayer(this);
+ }
+
+ Player() {
+ // 假设播放器初始状态为关闭
+ this.state = new CloseState();
+ this.state.setPlayer(this);
+ }
+
+ public void paly() {
+ System.out.println("播放视频");
+ state.paly();
+ }
+
+ public void pause() {
+ System.out.println("暂停视频");
+ state.pause();
+ }
+
+ public void close() {
+ System.out.println("关闭视频");
+ state.close();
+ }
+
+ public void speed() {
+ System.out.println("视频加速");
+ state.speed();
+ }
+
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/SpeedState.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/SpeedState.java
new file mode 100644
index 0000000..000af72
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/SpeedState.java
@@ -0,0 +1,9 @@
+package com.heibaiying.behavioral.state;
+
+public class SpeedState extends State {
+
+ @Override
+ public void paly() {
+ System.out.println("你当前已处于加速播放状态");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/State.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/State.java
new file mode 100644
index 0000000..3a5350d
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/State.java
@@ -0,0 +1,26 @@
+package com.heibaiying.behavioral.state;
+
+public class State {
+
+ private Player player;
+
+ public void setPlayer(Player player) {
+ this.player = player;
+ }
+
+ public void paly() {
+ player.setState(Player.PLAY_STATE);
+ }
+
+ public void pause() {
+ player.setState(Player.PAUSE_STATE);
+ }
+
+ public void close() {
+ player.setState(Player.CLOSE_STATE);
+ }
+
+ public void speed() {
+ player.setState(Player.SPEED_STATE);
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/ZTest.java
new file mode 100644
index 0000000..7be8189
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/state/ZTest.java
@@ -0,0 +1,13 @@
+package com.heibaiying.behavioral.state;
+
+public class ZTest {
+ public static void main(String[] args) {
+ Player player = new Player();
+ player.speed();
+ player.paly();
+ player.speed();
+ player.pause();
+ player.close();
+ player.speed();
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Archive.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Archive.java
new file mode 100644
index 0000000..66e62e4
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Archive.java
@@ -0,0 +1,8 @@
+package com.heibaiying.behavioral.visitor;
+
+/**
+ * 档案
+ */
+public interface Archive {
+ void accept(Visitor visitor);
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Company.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Company.java
new file mode 100644
index 0000000..96270f3
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Company.java
@@ -0,0 +1,24 @@
+package com.heibaiying.behavioral.visitor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Company {
+
+ private List archives = new ArrayList<>();
+
+ void add(Archive archive) {
+ archives.add(archive);
+ }
+
+ void remove(Archive archive) {
+ archives.remove(archive);
+ }
+
+ void accept(Visitor visitor) {
+ for (Archive archive : archives) {
+ archive.accept(visitor);
+ }
+ }
+
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/DepartManager.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/DepartManager.java
new file mode 100644
index 0000000..72c55a0
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/DepartManager.java
@@ -0,0 +1,14 @@
+package com.heibaiying.behavioral.visitor;
+
+public class DepartManager implements Visitor {
+
+ @Override
+ public void visit(PublicArchive publicArchive) {
+ System.out.println("所有公开档案");
+ }
+
+ @Override
+ public void visit(SecretArchive secretArchive) {
+ System.out.println("三级以下权限的加密档案");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/President.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/President.java
new file mode 100644
index 0000000..70ac647
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/President.java
@@ -0,0 +1,14 @@
+package com.heibaiying.behavioral.visitor;
+
+public class President implements Visitor {
+
+ @Override
+ public void visit(PublicArchive publicArchive) {
+ System.out.println("所有公开档案");
+ }
+
+ @Override
+ public void visit(SecretArchive secretArchive) {
+ System.out.println("所有加密档案");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/PublicArchive.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/PublicArchive.java
new file mode 100644
index 0000000..ec07dc1
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/PublicArchive.java
@@ -0,0 +1,11 @@
+package com.heibaiying.behavioral.visitor;
+
+/**
+ * 公开档案
+ */
+public class PublicArchive implements Archive {
+ @Override
+ public void accept(Visitor visitor) {
+ visitor.visit(this);
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/SecretArchive.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/SecretArchive.java
new file mode 100644
index 0000000..f6a3d25
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/SecretArchive.java
@@ -0,0 +1,11 @@
+package com.heibaiying.behavioral.visitor;
+
+/**
+ * 加密档案
+ */
+public class SecretArchive implements Archive {
+ @Override
+ public void accept(Visitor visitor) {
+ visitor.visit(this);
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Visitor.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Visitor.java
new file mode 100644
index 0000000..c8108cb
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/Visitor.java
@@ -0,0 +1,6 @@
+package com.heibaiying.behavioral.visitor;
+
+public interface Visitor {
+ void visit(PublicArchive publicArchive);
+ void visit(SecretArchive secretArchive);
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/ZTest.java
new file mode 100644
index 0000000..370dad1
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/behavioral/visitor/ZTest.java
@@ -0,0 +1,11 @@
+package com.heibaiying.behavioral.visitor;
+
+public class ZTest {
+ public static void main(String[] args) {
+ Company company = new Company();
+ company.add(new SecretArchive());
+ company.add(new PublicArchive());
+ company.accept(new DepartManager());
+ company.accept(new President());
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/ArtPPT.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/ArtPPT.java
new file mode 100644
index 0000000..1d8c5ab
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/ArtPPT.java
@@ -0,0 +1,13 @@
+package com.heibaiying.structural.flyweight;
+
+public class ArtPPT extends PowerPoint {
+
+ public ArtPPT(String copyright) {
+ super(copyright);
+ }
+
+ @Override
+ void create() {
+ System.out.println("艺术类PPT模板");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/BusinessPPT.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/BusinessPPT.java
new file mode 100644
index 0000000..b0537d3
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/BusinessPPT.java
@@ -0,0 +1,13 @@
+package com.heibaiying.structural.flyweight;
+
+public class BusinessPPT extends PowerPoint {
+
+ public BusinessPPT(String copyright) {
+ super(copyright);
+ }
+
+ @Override
+ void create() {
+ System.out.println("商务类PPT模板");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/PPTFactory.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/PPTFactory.java
new file mode 100644
index 0000000..4d872a6
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/PPTFactory.java
@@ -0,0 +1,26 @@
+package com.heibaiying.structural.flyweight;
+
+
+import java.lang.reflect.Constructor;
+import java.util.HashMap;
+
+public class PPTFactory {
+
+ private HashMap hashMap = new HashMap<>();
+
+ public PowerPoint getPPT(Class extends PowerPoint> clazz) {
+ try {
+ String name = clazz.getName();
+ if (hashMap.keySet().contains(name)) {
+ return hashMap.get(name);
+ }
+ Constructor> constructor = Class.forName(name).getConstructor(String.class);
+ PowerPoint powerPoint = (PowerPoint) constructor.newInstance("PPT工厂版本所有");
+ hashMap.put(name, powerPoint);
+ return powerPoint;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/PowerPoint.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/PowerPoint.java
new file mode 100644
index 0000000..a3a79cd
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/PowerPoint.java
@@ -0,0 +1,27 @@
+package com.heibaiying.structural.flyweight;
+
+import lombok.ToString;
+
+public abstract class PowerPoint {
+ /*版权*/
+ private String copyright;
+ private String title;
+
+ public PowerPoint(String copyright) {
+ this.copyright = copyright;
+ }
+
+ public void setTitle(String title) {
+ this.title = title;
+ }
+
+ abstract void create();
+
+ @Override
+ public String toString() {
+ return "编号:" + hashCode() + ": PowerPoint{" +
+ "copyright='" + copyright + '\'' +
+ ", title='" + title + '\'' +
+ '}';
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/SciencePPT.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/SciencePPT.java
new file mode 100644
index 0000000..fa12ad7
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/SciencePPT.java
@@ -0,0 +1,13 @@
+package com.heibaiying.structural.flyweight;
+
+public class SciencePPT extends PowerPoint {
+
+ public SciencePPT(String copyright) {
+ super(copyright);
+ }
+
+ @Override
+ void create() {
+ System.out.println("科技类PPT模板");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/ZTest.java
new file mode 100644
index 0000000..d23ed31
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/flyweight/ZTest.java
@@ -0,0 +1,16 @@
+package com.heibaiying.structural.flyweight;
+
+public class ZTest {
+ public static void main(String[] args) {
+ PPTFactory pptFactory = new PPTFactory();
+ PowerPoint ppt01 = pptFactory.getPPT(BusinessPPT.class);
+ ppt01.setTitle("第一季度工作汇报");
+ System.out.println(ppt01);
+ PowerPoint ppt02 = pptFactory.getPPT(BusinessPPT.class);
+ ppt02.setTitle("第二季度工作汇报");
+ System.out.println(ppt02);
+ PowerPoint ppt03 = pptFactory.getPPT(SciencePPT.class);
+ ppt03.setTitle("科技展汇报");
+ System.out.println(ppt03);
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/ComputeService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/ComputeService.java
new file mode 100644
index 0000000..2861632
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/ComputeService.java
@@ -0,0 +1,7 @@
+package com.heibaiying.structural.proxy.cglib;
+
+public class ComputeService {
+ public void compute() {
+ System.out.println("业务处理");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/Proxy.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/Proxy.java
new file mode 100644
index 0000000..62c056b
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/Proxy.java
@@ -0,0 +1,36 @@
+package com.heibaiying.structural.proxy.cglib;
+
+import net.sf.cglib.proxy.Enhancer;
+import net.sf.cglib.proxy.MethodInterceptor;
+import net.sf.cglib.proxy.MethodProxy;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+public class Proxy implements MethodInterceptor {
+
+ private Object target;
+
+ public Proxy(Object target) {
+ this.target = target;
+ }
+
+ public Object getProxyInstance() {
+ // 创建用于生成生成动态子类的工具类
+ Enhancer enhancer = new Enhancer();
+ // 指定动态生成类的父类
+ enhancer.setSuperclass(target.getClass());
+ // 设置回调
+ enhancer.setCallback(this);
+ // 动态生成子类
+ return enhancer.create();
+ }
+
+ @Override
+ public Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws InvocationTargetException, IllegalAccessException {
+ System.out.println("权限校验");
+ Object invoke = method.invoke(target, args);
+ System.out.println("资源回收");
+ return invoke;
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/ZTest.java
new file mode 100644
index 0000000..1abb4a1
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/cglib/ZTest.java
@@ -0,0 +1,9 @@
+package com.heibaiying.structural.proxy.cglib;
+
+public class ZTest {
+ public static void main(String[] args) {
+ Proxy proxy = new Proxy(new ComputeService());
+ ComputeService service = (ComputeService) proxy.getProxyInstance();
+ service.compute();
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/ComputeService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/ComputeService.java
new file mode 100644
index 0000000..4870fab
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/ComputeService.java
@@ -0,0 +1,8 @@
+package com.heibaiying.structural.proxy.dynamic_proxy;
+
+public class ComputeService implements IService {
+ @Override
+ public void compute() {
+ System.out.println("业务处理");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/IService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/IService.java
new file mode 100644
index 0000000..eb24e56
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/IService.java
@@ -0,0 +1,5 @@
+package com.heibaiying.structural.proxy.dynamic_proxy;
+
+public interface IService {
+ void compute();
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/ZTest.java
new file mode 100644
index 0000000..78b65ed
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/dynamic_proxy/ZTest.java
@@ -0,0 +1,19 @@
+package com.heibaiying.structural.proxy.dynamic_proxy;
+
+import java.lang.reflect.Proxy;
+
+public class ZTest {
+ public static void main(String[] args) {
+ ComputeService target = new ComputeService();
+ IService proxyInstance = (IService) Proxy.newProxyInstance(
+ target.getClass().getClassLoader(),
+ target.getClass().getInterfaces(),
+ (proxy, method, args1) -> {
+ System.out.println("权限校验");
+ Object invoke = method.invoke(target, args1);
+ System.out.println("资源回收");
+ return invoke;
+ });
+ proxyInstance.compute();
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ComputeService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ComputeService.java
new file mode 100644
index 0000000..1775f27
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ComputeService.java
@@ -0,0 +1,8 @@
+package com.heibaiying.structural.proxy.static_proxy;
+
+public class ComputeService implements IService {
+ @Override
+ public void compute() {
+ System.out.println("业务处理");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/IService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/IService.java
new file mode 100644
index 0000000..de8fc24
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/IService.java
@@ -0,0 +1,5 @@
+package com.heibaiying.structural.proxy.static_proxy;
+
+public interface IService {
+ void compute();
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ProxyService.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ProxyService.java
new file mode 100644
index 0000000..7d9e31e
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ProxyService.java
@@ -0,0 +1,17 @@
+package com.heibaiying.structural.proxy.static_proxy;
+
+public class ProxyService implements IService {
+
+ private IService target;
+
+ public ProxyService(IService target) {
+ this.target = target;
+ }
+
+ @Override
+ public void compute() {
+ System.out.println("权限校验");
+ target.compute();
+ System.out.println("资源回收");
+ }
+}
diff --git a/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ZTest.java b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ZTest.java
new file mode 100644
index 0000000..c671285
--- /dev/null
+++ b/code/Java/design-pattern/src/main/java/com/heibaiying/structural/proxy/static_proxy/ZTest.java
@@ -0,0 +1,8 @@
+package com.heibaiying.structural.proxy.static_proxy;
+
+public class ZTest {
+ public static void main(String[] args) {
+ ProxyService proxyService = new ProxyService(new ComputeService());
+ proxyService.compute();
+ }
+}
diff --git a/notes/Java_设计模式.md b/notes/Java_设计模式.md
index c588cdb..a6aa54f 100644
--- a/notes/Java_设计模式.md
+++ b/notes/Java_设计模式.md
@@ -450,7 +450,7 @@ public class ZTest {
### 2.3 优缺点
-简单工厂的优点在于其向用户屏蔽了对象创建过程,使得用户可以不必关注具体的创建细节,其缺陷在于违背了开闭原则。在简单工厂模式下,如果想要增加新的产品,就需要修改简单工厂中的判断逻辑,这就违背了开闭原则,因此其并不属于 GOF 经典的 23 种设计模式。在 Java 语言中,可以通过泛型来尽量规避这一缺陷,此时需要将创建产品的方法修改为如下所示:
+简单工厂的优点在于其向用户屏蔽了对象创建过程,使得用户可以不必关注具体的创建细节,其缺陷在于违背了开闭原则。在简单工厂模式中,如果想要增加新的产品,就需要修改简单工厂中的判断逻辑,这就违背了开闭原则,因此其并不属于 GOF 经典的 23 种设计模式。在 Java 语言中,可以通过泛型来尽量规避这一缺陷,此时可以将创建产品的方法修改为如下所示:
```java
public Phone getPhone(Class extends Phone> phoneClass) {
@@ -756,4 +756,15 @@ Phone(processor=高通骁龙处理器, camera=索尼摄像头, screen=OLED)
### 5.3 优点
-建造者模式的优点在于将复杂的构建过程拆分为多个独立的单元,在保证拓展性的基础上也保证了良好的封装性,使得客户端不必知道产品的具体创建流程。
\ No newline at end of file
+建造者模式的优点在于将复杂的构建过程拆分为多个独立的单元,在保证拓展性的基础上也保证了良好的封装性,使得客户端不必知道产品的具体创建流程。
+
+## 6. 原型模式
+
+### 6.1 定义
+
+
+
+### 6.2 示例
+
+### 6.3
+