为了账号安全,请及时绑定邮箱和手机立即绑定

设计模式笔记(11)--享元模式

标签:
设计模式

享元模式

在编程世界中,当系统需要大量的小粒度对象时,使用共享的技术可以很好地控制资源的占用。
GOF对享元模式的定义是:“运用共享技术有效地支持大量细粒度的对象”。

内部状态就是指享元对象内部的不会随环境而改变的可以共享的部分,如连连看游戏中的某张图片。反之,随着环境的改变而做出改变的,无法共享的状态就是外部状态,比如连连看游戏中每个图片的坐标。

以下为按照享元模式来修改的连连看游戏的设计及代码。

public abstract class ImageNode{    public abstract void Show();
}public class CImageNode extends ImageNode{    private String imageType;    public CImageNode(String imageType)
    {        this.ImageType = imageType;
    }    @Override
    public void Show()
    {
        System.out.println("图片是:"+imageType);
    }
}public class ImageNodeFactory{    private Hashtable<String,CImageNode> imageNodes = new Hashtable<String,CImageNode>();    public ImageNodeFactory()
    {
        imageNodes.put("狮子",new CImageNode("狮子"));
        imageNodes.put("老虎",new CImageNode("老虎"));
        imageNodes.put("大象",new CImageNode("大象"));
        imageNodes.put("长颈鹿",new CImageNode("长颈鹿"));
    }    public ImageNode GetImage(String imageType)
    {        return imageNodes.get(imageType);  
    }
}public static void main(String[] args){
    ImageNodeFactory imageNodeFactory = new ImageNodeFactory();
    HashTable<Integer,ImageNode> imageList = new HashTable<Integer,ImageNode>();    int randomNumber = 0;    for(int i = 0;i<10;i++)
    {
        randomNumber = (int)(Math.random()*10);        switch(randomNumber/2)
        {            case 0:imageList.put(i,imageNodeFactory.GetImage("狮子"));break;            case 1:imageList.put(i,imageNodeFactory.GetImage("老虎"));break;            case 2:imageList.put(i,imageNodeFactory.GetImage("大象"));break;            case 3:imageList.put(i,imageNodeFactory.GetImage("长颈鹿"));break;            default: imageList.put(i,imageNodeFactory.GetImage("狮子"));break;
        }
    }   
    System.out.println("ready!");    for(int i = 0;i<10;i++)
    {
        System.out.print(i+"号坐标的");
        (imageList.get(i)).Show();
    }    int a=0,b=0;    while(a==b)
    {
        a=(int)(Math.random()*10);
        b=(int)(Math.random()*10);
    }    if(imageList.get(A)==imageList.get(B))
    {
        System.out.println("可消除!");
    }    else {
        System.out.println("不可消除!");
    }

}

享元对象的最大特点就是不可被改变。



作者:球球球球笨
链接:https://www.jianshu.com/p/c9223e04cb9d


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消