23种设计模式之享元模式(FlyWeight)
2018-01-26 11:00
549 查看
场景
内存属于稀缺资源,不要随便浪费。如果有多个完全相同或者相似的对象,我们可以通过享元模式,节省内存。核心:
享元模式一共享的方式高效地支持大量细粒度对象的重用。享元模式对象能 做到共享的关键是区分内部状态和外部状态。
内部状态:可以共享,不会随环境变化而变化。
外部状态:不可以共享,会随着环境变化而改变。
享元模式的实现
FlyweightFactory享元工厂类
创建并管理对象,享元池一般设计成键值对
FlyWeight抽象享元类
通常是一个类接口或抽象类,声明公共方法,这些方法可以向外界提供对象的内部状态,并设置内部状态。
ConcreteFlyWeight具体享元类
为内部状态提供成员变量进行存储
UnsharedConcreteFlyWeight非共享享元类
不能被共享的子类可以设计为非共享子类
五子棋,我们都知道有黑白两种颜色,形状大小一样,但是位置是不能一样的,所以我们可以这样做
首先是非共享类
public class Coordinate { private int x,y; public Coordinate(int x, int y) { this.x = x; this.y = y; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } }
抽象享元类
public interface ChessFlyWeight { String getColor 4000 (); void setColor(String color); void display(Coordinate c); }
抽象享元类
public class ConcreteChess implements ChessFlyWeight{ String color; public ConcreteChess(String color) { this.color = color; } @Override public String getColor() { return color; } @Override public void setColor(String color) { this.color=color; } @Override public void display(Coordinate c) { System.out.println("棋子颜色:"+color); System.out.println("棋子位置:"+c.getX()+"----"+c.getY()); } }
享元工厂类(获取棋子)
public class ChessFlyWeightFactory { private static Map<String, ChessFlyWeight> map = new HashMap<>(); public static ChessFlyWeight getChess(String color) { if (map.get(color) != null) { return map.get(color); } else { ChessFlyWeight chessFlyWeight = new ConcreteChess(color); return chessFlyWeight; } } }
测试
ChessFlyWeight chess = ChessFlyWeightFactory.getChess("黑色"); ChessFlyWeight chess1 = ChessFlyWeightFactory.getChess("黑色"); chess.display(new Coordinate(10, 10)); chess1.display(new Coordinate(20, 20));
相关文章推荐
- Java开发中的23种设计模式之十二:享元模式(Flyweight)
- 23种设计模式之享元模式(FlyWeight)
- java23种设计模式--享元模式(flyweight)
- java 23种常用设计模式之享元模式(FlyWeight)
- 【Unity3D与23种设计模式】享元模式(Flyweight)
- 23种设计模式之享元模式(FlyWeight)
- Java开发中的23种设计模式详解----享元模式(Flyweight)
- Java设计模式之结构型模式-享元模式(Flyweight)
- 重温设计模式(一)——享元模式(Flyweight)
- 【设计模式】之 Flyweight享元模式
- Java设计模式二十二:享元模式(Flyweight)
- 重温设计模式(一)——享元模式(Flyweight)
- Java 23种设计模式之享元模式
- 设计模式--享元模式(Flyweight)
- 设计模式学习8 -- Flyweight(享元模式)
- 设计模式 笔记 享元模式 Flyweight
- Java设计模式之共享模式/享元模式(Flyweight模式)介绍
- C++设计模式编程之Flyweight享元模式结构详解
- 详解Java设计模式编程中的Flyweight享元模式的开发结构
- [设计模式]享元模式(Flyweight) 共享池 连接池