小工具知识网

当前位置: 首页 > 行业知识 > 设计模式-结构型模式-享元模式

行业知识

设计模式-结构型模式-享元模式

2026-11-07 17:10:26 来源:互联网转载

享元���式(Flyweight),运用共享技术有效地支持大量细粒度的对象。[DP]

解决对象的开销问题,像围棋,一盘棋理论上有361个空位可以放棋子,那如果用常规的面向对象方式编程,每盘棋都可能有两三百个棋子对象产生,一台服务器就很难支持更多的玩家玩围棋游戏了,毕竟内存空间还是有限的。如果用了享元模式来处理棋子,那么棋子对象可以减少到只有两个实例。

 

import java.util.HashMap;import java.util.Map;// 享元接口interface Flyweight {    void operation(String extrinsicState);}// 具体享元类class ConcreteFlyweight implements Flyweight {    private String intrinsicState;    public ConcreteFlyweight(String state) {        this.intrinsicState = state;    }    @Override    public void operation(String extrinsicState) {        System.out.println("Intrinsic state: " + intrinsicState + ", Extrinsic state: " + extrinsicState);    }}// 享元工厂类class FlyweightFactory {    private Map flyweightPool = new HashMap();    public Flyweight getFlyweight(String state) {        Flyweight flyweight = flyweightPool.get(state);        if (flyweight == null) {            flyweight = new ConcreteFlyweight(state);            flyweightPool.put(state, flyweight);        }        return flyweight;    }}// 客户端代码public class Client {    public static void main(String[] args) {        FlyweightFactory factory = new FlyweightFactory();        Flyweight flyweight1 = factory.getFlyweight("state1");        Flyweight flyweight2 = factory.getFlyweight("state2");        Flyweight flyweight3 = factory.getFlyweight("state1");        flyweight1.operation("extrinsicStateA");        flyweight2.operation("extrinsicStateB");        flyweight3.operation("extrinsicStateA");        // 输出将显示flyweight1和flyweight3是同一个对象,因为它们共享相同的内在状态"state1"    }}

上一篇:怎么在网站后台发新闻?

下一篇:玩转JS拼图游戏,移动技巧轻松掌握!