From d361bc608a11410c7ae9e5ce984e2c4ab7cdbaa5 Mon Sep 17 00:00:00 2001 From: CyC2018 <1029579233@qq.com> Date: Tue, 5 Jun 2018 17:23:42 +0800 Subject: [PATCH] auto commit --- ...76\350\256\241\346\250\241\345\274\217.md" | 75 +++++++++++++++++- pics/d52270b4-9097-4667-9f18-f405fc661c99.png | Bin 0 -> 19456 bytes 2 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 pics/d52270b4-9097-4667-9f18-f405fc661c99.png diff --git "a/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" "b/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" index dc075cf7..6c5e2769 100644 --- "a/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" +++ "b/notes/\350\256\276\350\256\241\346\250\241\345\274\217.md" @@ -2631,7 +2631,6 @@ public class SubSystem { public class Facade { private SubSystem subSystem = new SubSystem(); - public void watchMovie() { subSystem.turnOnTV(); subSystem.setCD("a movie"); @@ -2657,7 +2656,79 @@ public class Client { ### 意图 -利用共享的方式来支持大量的对象,这些对象一部分内部状态是相同的,而另一份状态可以变化。 +利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。 + +### 类图 + +- Flyweight:享元对象 +- IntrinsicState:内部状态,相同的项元对象共享 +- ExtrinsicState:外部状态 + +

+ +### 实现 + +```java +public interface Flyweight { + void doOperation(String extrinsicState); +} +``` + +```java +public class ConcreteFlyweight implements Flyweight { + + private String intrinsicState; + + public ConcreteFlyweight(String intrinsicState) { + this.intrinsicState = intrinsicState; + } + + @Override + public void doOperation(String extrinsicState) { + System.out.println("Object address: " + System.identityHashCode(this)); + System.out.println("IntrinsicState: " + intrinsicState); + System.out.println("ExtrinsicState: " + extrinsicState); + } +} +``` + +```java +import java.util.HashMap; + +public class FlyweightFactory { + + private HashMap flyweights = new HashMap<>(); + + Flyweight getFlyweight(String intrinsicState) { + if (!flyweights.containsKey(intrinsicState)) { + Flyweight flyweight = new ConcreteFlyweight(intrinsicState); + flyweights.put(intrinsicState, flyweight); + } + return flyweights.get(intrinsicState); + } +} +``` + +```java +public class Client { + public static void main(String[] args) { + FlyweightFactory factory = new FlyweightFactory(); + Flyweight flyweight1 = factory.getFlyweight("aa"); + Flyweight flyweight2 = factory.getFlyweight("aa"); + flyweight1.doOperation("x"); + flyweight2.doOperation("y"); + } +} +``` + +```html +Object address: 1163157884 +IntrinsicState: aa +ExtrinsicState: x +Object address: 1163157884 +IntrinsicState: aa +ExtrinsicState: y +``` ### JDK diff --git a/pics/d52270b4-9097-4667-9f18-f405fc661c99.png b/pics/d52270b4-9097-4667-9f18-f405fc661c99.png new file mode 100644 index 0000000000000000000000000000000000000000..347fe31617d4164020816005bba5a9bdb7789380 GIT binary patch literal 19456 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 z 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 K|Nl4l|NjO2Lugh2 literal 0 HcmV?d00001 -- GitLab