From 1465f28d62e3ea6e4ae3c350bca59d4716e17a76 Mon Sep 17 00:00:00 2001 From: Bunny <1319900154@qq.com> Date: Tue, 4 Feb 2025 19:13:15 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E4=BA=AB=E5=85=83=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../设计模式-v2/image-20250204191157193.png | Bin 0 -> 12736 bytes README/设计模式-v2.md | 70 ++++++++++++++++-- .../java/cn/bunny/pattern18/FlyWeight.java | 41 ++++++++++ 3 files changed, 105 insertions(+), 6 deletions(-) create mode 100644 README/images/设计模式-v2/image-20250204191157193.png create mode 100644 pattern/src/main/java/cn/bunny/pattern18/FlyWeight.java diff --git a/README/images/设计模式-v2/image-20250204191157193.png b/README/images/设计模式-v2/image-20250204191157193.png new file mode 100644 index 0000000000000000000000000000000000000000..daf70aec8608ff5f0a3dddc06dd044a3a829e3e2 GIT binary patch literal 12736 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 literal 0 HcmV?d00001 diff --git a/README/设计模式-v2.md b/README/设计模式-v2.md index 6542582..645f260 100644 --- a/README/设计模式-v2.md +++ b/README/设计模式-v2.md @@ -1358,19 +1358,77 @@ public class Composite { ## 享元模式---结构型 ---- +享元模式(Flyweight Pattern)是一种结构型设计模式,它的主要目的是通过共享对象来减少内存使用和提高性能。在享元模式中,系统中可能会有很多重复的对象,而享元模式通过将这些对象分为“共享部分”和“非共享部分”,只在共享部分创建单一实例,来优化内存使用。 + +![image-20250204191157193](./images/设计模式-v2/image-20250204191157193.png) + +**需要角色** + +**Flyweight(享元类)**:负责实现共享的对象部分,通常是不可变的状态。它是享元模式的核心,通过共享相同的状态,减少内存消耗。 + +**ConcreteFlyweight(具体享元类)**:是Flyweight的具体实现,负责实现具体的共享对象。具体享元类一般会包含一个外部状态,它并不存储该状态,而是通过外部传入的方式进行变化。 + +**FlyweightFactory(享元工厂类)**:是一个工厂,负责管理共享的享元对象。在客户端请求享元对象时,它会从池中查找是否已有实例,如果有则返回,若没有则创建新的享元对象并将其返回。 + +**Client(客户端)**:负责根据外部状态请求享元对象。客户端会传递外部状态(不共享的部分)给享元对象,而享元对象则只关注内部共享部分。 + +### 简单示例 + +#### 示例代码 + +```java +public class FlyWeight { + public static void main(String[] args) { + // 第一次获取对象会进行资源创建 + GirlFriend girlFriend1 = GirlFriendFactory.getGirlFriend("第一个女朋友"); + GirlFriend girlFriend2 = GirlFriendFactory.getGirlFriend("第二个女朋友"); + + // 第二次获取对象直接从容器中获取 + GirlFriend girlFriend11 = GirlFriendFactory.getGirlFriend("第一个女朋友"); + GirlFriend girlFriend22 = GirlFriendFactory.getGirlFriend("第二个女朋友"); + + System.out.println(girlFriend1 == girlFriend11);// true + System.out.println(girlFriend2 == girlFriend22);// true + } + + @Data + static class GirlFriend { + private String name; + private Integer age; + } + + static class GirlFriendFactory { + private static final Map map = new HashMap<>(); + + public static GirlFriend getGirlFriend(String name) { + GirlFriend girlFriend = map.get(name); + if (girlFriend == null) { + girlFriend = new GirlFriend(); + girlFriend.name = name; + map.put(name, girlFriend); + } + return girlFriend; + } + } +} +``` + +#### 运行结果: + +```java +true +true +``` ## 代理模式---结构型 -### 静态代理 +### 静态代理-1 ![image-20250204185312828](./images/设计模式-v2/image-20250204185312828.png) -如果是静态代理,做Java开发几乎都在用,就是抽象接口和实现,比如:`UserService`之后`UserServiceImpl`实现`UserService`,就是这个。 +如果是静态代理,做Java开发几乎都在用,就是抽象接口和实现,比如:`UserService`之后`UserServiceImpl`实现`UserService`,就是这个,之后使用`UserService`进行调用实现中的方法。 -之后使用`UserService`进行调用实现中的方法,所以做过后端开发这个没有什么必要说的;真要说就是动态代理。 - -### 动态代理 +### 静态代理-2 ![image-20250204185852710](./images/设计模式-v2/image-20250204185852710.png) diff --git a/pattern/src/main/java/cn/bunny/pattern18/FlyWeight.java b/pattern/src/main/java/cn/bunny/pattern18/FlyWeight.java new file mode 100644 index 0000000..2d08fe4 --- /dev/null +++ b/pattern/src/main/java/cn/bunny/pattern18/FlyWeight.java @@ -0,0 +1,41 @@ +package cn.bunny.pattern18; + +import lombok.Data; + +import java.util.HashMap; +import java.util.Map; + +public class FlyWeight { + public static void main(String[] args) { + // 第一次获取对象会进行资源创建 + GirlFriend girlFriend1 = GirlFriendFactory.getGirlFriend("第一个女朋友"); + GirlFriend girlFriend2 = GirlFriendFactory.getGirlFriend("第二个女朋友"); + + // 第二次获取对象直接从容器中获取 + GirlFriend girlFriend11 = GirlFriendFactory.getGirlFriend("第一个女朋友"); + GirlFriend girlFriend22 = GirlFriendFactory.getGirlFriend("第二个女朋友"); + + System.out.println(girlFriend1 == girlFriend11);// true + System.out.println(girlFriend2 == girlFriend22);// true + } + + @Data + static class GirlFriend { + private String name; + private Integer age; + } + + static class GirlFriendFactory { + private static final Map map = new HashMap<>(); + + public static GirlFriend getGirlFriend(String name) { + GirlFriend girlFriend = map.get(name); + if (girlFriend == null) { + girlFriend = new GirlFriend(); + girlFriend.name = name; + map.put(name, girlFriend); + } + return girlFriend; + } + } +}