11、享元模式

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先来看类图:

在这里插入图片描述

//抽象享元角色
public abstract class AbstractBox {
    //获取图形的方法
    public abstract String getShape();
    //显示图形及颜色
    public void display(String color){
        System.out.println("方块形状: "+getShape()+",颜色为:"+color);
    }
}

//G图形类(具体享元角色)
public class GBox extends AbstractBox {
    @Override
    public String getShape() {
        return "G";
    }
}

//H图形类(具体享元角色)
public class HBox extends AbstractBox {
    @Override
    public String getShape() {
        return "H";
    }
}

//I图形类(具体享元角色)
public class IBox extends AbstractBox {
    @Override
    public String getShape() {
        return "I";
    }
}

提供了一个工厂类(BoxFactory),用来管理享元对象(也就是AbstractBox子类对象),该工厂类对象只需要一个,所以可以使用单例模式。并给工厂类提供一个获取形状的方法。

// 工厂类,将该类设计为单例
public class BoxFactory {
    private HashMap<String,AbstractBox> map;

    //在构造方法中进行初始化操作
    public BoxFactory(){
        map=new HashMap<>();
        map.put("I",new IBox());
        map.put("G",new GBox());
        map.put("H",new HBox());
    }

    //提供一个方法获取该工厂类对象
    public static BoxFactory getInstance(){
        return factory;
    }
    //饿汉式单例
    private static BoxFactory factory=new BoxFactory();
    //根据名称获取图形对象
    public AbstractBox getShape1(String name){
        return map.get(name);
    }
}

public class Client {
    public static void main(String[] args) {
        //获取I图形对象
        AbstractBox box1 = BoxFactory.getInstance().getShape1("I");
        box1.display("灰色");
        //获取G图形对象
        AbstractBox box2 = BoxFactory.getInstance().getShape1("G");
        box2.display("黑色");

        //获取H图形对象
        AbstractBox box3 = BoxFactory.getInstance().getShape1("H");
        box3.display("红色");
        //获取H图形对象
        AbstractBox box4 = BoxFactory.getInstance().getShape1("H");
        box4.display("蓝色");
        System.out.println("两次获取到的H图形对象是否是同一个对象:" + (box3 == box4));
    }
}

在这里插入图片描述
Integer类使用了享元模式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值