提交 d361bc60 编写于 作者: C CyC2018

auto commit

上级 499d369d
...@@ -2631,7 +2631,6 @@ public class SubSystem { ...@@ -2631,7 +2631,6 @@ public class SubSystem {
public class Facade { public class Facade {
private SubSystem subSystem = new SubSystem(); private SubSystem subSystem = new SubSystem();
public void watchMovie() { public void watchMovie() {
subSystem.turnOnTV(); subSystem.turnOnTV();
subSystem.setCD("a movie"); subSystem.setCD("a movie");
...@@ -2657,7 +2656,79 @@ public class Client { ...@@ -2657,7 +2656,79 @@ public class Client {
### 意图 ### 意图
利用共享的方式来支持大量的对象,这些对象一部分内部状态是相同的,而另一份状态可以变化。 利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。
### 类图
- Flyweight:享元对象
- IntrinsicState:内部状态,相同的项元对象共享
- ExtrinsicState:外部状态
<div align="center"> <img src="../pics//d52270b4-9097-4667-9f18-f405fc661c99.png"/> </div><br>
### 实现
```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<String, Flyweight> 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 ### JDK
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册