一、概述

  概念

  UML简图

  单纯享元模式

  Java设计模式(11)——结构型模式之享元模式(Flyweight)-LMLPHP

  角色

  抽象享元角色(Flyweight):定义享元子类公共接口

  具体享元角色(ConcreteFlyweight):具体享元类,实现实例共享

  享元工厂(FlyweightFacotry):创建和管理享元角色

  客户端:维护一个对所有享元对象的引用,自行存储外部状态。

  复合享元模式

  Java设计模式(11)——结构型模式之享元模式(Flyweight)-LMLPHP

  应用场景

  Java设计模式(11)——结构型模式之享元模式(Flyweight)-LMLPHP

二、实践

  就按照单纯享元模式进行代码的创建

  抽象享元接口

/**
* 抽象享元角色
*
* @author Administrator
**/
public abstract class Flyweight {
/**
*接口方法
* @param externalState 外部状态,由客户端传入
*/
public abstract void method1(String externalState);
}

  具体享元类

/**
* 具体享元角色
*
* @author Administrator
**/
public class ConcreteFlyweight extends Flyweight{
/**
* 内部状态,构建时确定
*/
private String internalState; public ConcreteFlyweight(String internalState) {
this.internalState = internalState;
} @Override
public void method1(String externalState) {
System.out.println("内部状态:"+internalState);
System.out.println("外部状态:"+externalState);
}
}

  享元工厂

/**
* 享元工厂
*
* @author Administrator
**/
public class FlyweightFactory {
private static Map<String, Flyweight> flyweightMap = new HashMap<>();
public static Flyweight getFlyweight(String state) {
if (flyweightMap.get(state) == null) { // flyweightMap.containsKey(state)
Flyweight flyweight = new ConcreteFlyweight(state);
flyweightMap.put(state, flyweight);
}
return flyweightMap.get(state);
}
}

三、思考与改进

  什么条件下使用享元模式

  Java设计模式(11)——结构型模式之享元模式(Flyweight)-LMLPHP

05-11 22:12