美文网首页
结构型模式:12-享元模式

结构型模式:12-享元模式

作者: 综合楼 | 来源:发表于2021-06-13 20:52 被阅读0次
image.png
image.png
//围棋棋子类:抽象享元类
abstract class IgoChessman {
    public abstract String getColor();

    public void display() {
        System.out.println("棋子颜色:" + this.getColor());
    }
}

//黑色棋子类:具体享元类
class BlackIgoChessman extends IgoChessman {
    public String getColor() {
        return "黑色";
    }
}

//白色棋子类:具体享元类
class WhiteIgoChessman extends IgoChessman {
    public String getColor() {
        return "白色";
    }
}
//围棋棋子工厂类:享元工厂类,使用单例模式进行设计
class IgoChessmanFactory {
    private static IgoChessmanFactory instance = new IgoChessmanFactory();
    private static Hashtable ht; //使用Hashtable来存储享元对象,充当享元池

    private IgoChessmanFactory() {
        ht = new Hashtable();
        IgoChessman black, white;
        black = new BlackIgoChessman();
        ht.put("b", black);
        white = new WhiteIgoChessman();
        ht.put("w", white);
    }

    //返回享元工厂类的唯一实例
    public static IgoChessmanFactory getInstance() {
        return instance;
    }

    //通过key来获取存储在Hashtable中的享元对象
    public static IgoChessman getIgoChessman(String color) {
        return (IgoChessman) ht.get(color);
    }
}

class Client {
    public static void main(String args[]) {
        IgoChessman black1, black2, black3, white1, white2;
        IgoChessmanFactory factory;
        //获取享元工厂对象
        factory = IgoChessmanFactory.getInstance();
        //通过享元工厂获取三颗黑子
        black1 = factory.getIgoChessman("b");
        black2 = factory.getIgoChessman("b");
        black3 = factory.getIgoChessman("b");
        System.out.println("判断两颗黑子是否相同:" + (black1 == black2));
        //通过享元工厂获取两颗白子
        white1 = factory.getIgoChessman("w");
        white2 = factory.getIgoChessman("w");
        System.out.println("判断两颗白子是否相同:" + (white1 == white2));
        //显示棋子
        black1.display();
        black2.display();
        black3.display();
        white1.display();
        white2.display();
    }
}

带外部状态的解决方案

image.png
image.png

单纯享元模式

在单纯享元模式中,所有的具体享元类都是可以共享的,不存在非共享具体享元类。


image.png

复合享元模式

复合享元对象本身不能共享,但是它们可以分解成单纯享元对象


image.png

相关文章

  • 设计模式--享元模式

    目录 本文的结构如下: 引言 什么是享元模式 模式的结构 典型代码 代码示例 单纯享元模式和复合享元模式 模式扩展...

  • 结构型模式:享元模式

    文章首发:结构型模式:享元模式 七大结构型模式之六:享元模式。 简介 姓名 :享元模式 英文名 :Flyweigh...

  • 设计模式分类汇总

    结构型 适配器模式 组合模式 桥接模式 代理模式 装饰者模式 门面模式 享元模式 行为型 责任链模式 命令模式 解...

  • 享元模式C++

    享元模式,就是运用共享技术有效地支持大量细粒度的对象。 享元模式结构图 享元模式基本代码 应用场景 享元模式可以避...

  • java23种设计模式

    创建型 抽象工厂模式工厂方法建造者模式原型模式单态模式 结构型 适配器模式桥接模式组合模式外观模式装饰者模式享元模...

  • 第26章 项目多也别傻做--享元模式

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

  • java设计模式-享元模式(Flyweight)

    享元模式,属于结构性模式。 享元模式,享:共享,分享;元:元件,对象的意思。整体意思就是共享对象。在JVM中,能实...

  • 结构型模式:12-享元模式

    带外部状态的解决方案 单纯享元模式 在单纯享元模式中,所有的具体享元类都是可以共享的,不存在非共享具体享元类。 复...

  • Java设计模式——享元模式

    Java设计模式之享元模式 这期跟大家聊的的设计模式是享元模式,该模式也是结构模式。 简介 利用共享的方式解决大量...

  • 享元模式

    描述 享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。 简介 享元模式采用一个共享来避免...

网友评论

      本文标题:结构型模式:12-享元模式

      本文链接:https://www.haomeiwen.com/subject/kztseltx.html