首页 > 其他 > 详细

二十、Flyweight 享元模式

时间:2019-03-15 16:23:02      阅读:123      评论:0      收藏:0      [点我收藏+]

原理:

技术分享图片

代码清单:

BigChar

public class BigChar {
    //字符名称
    private char charname;
    //大型字符 # . \n 组成
    private String fontdata;

    public BigChar(char charname){
        this.charname = charname;

        try{
            BufferedReader reader = new BufferedReader(new FileReader("d:/"+charname+".txt"));
            String line;
            StringBuffer buf = new StringBuffer();
            while ((line=reader.readLine())!=null){
                buf.append(line);
                buf.append("\n");
            }
            reader.close();
            this.fontdata = buf.toString();
        }catch (IOException e){
            e.printStackTrace();
        }
    }
    public void print(){
        System.out.println(fontdata);
    }
}

BigCharFactory

public class BigCharFactory {
    //管理已经生成的 bigchar 实例
    private HashMap pool = new HashMap();
    //Singleton
    private static BigCharFactory singleton = new BigCharFactory();
    //构造函数
    private BigCharFactory(){

    }

    public static BigCharFactory getInstance(){
        return  singleton;
    }

    public synchronized BigChar getBigChar(char charname){
        BigChar bc = (BigChar)pool.get(""+charname);
        if(bc == null){
            bc = new BigChar(charname);
            pool.put(""+charname,bc);
        }
        return bc;
    }
}

BigString

public class BigString {
    //"大型字符"
    private BigChar[] bigChars;

    public BigString(String string){
        bigChars = new BigChar[string.length()];
        BigCharFactory factory = BigCharFactory.getInstance();
        for(int i=0;i<bigChars.length;i++){
            bigChars[i] = factory.getBigChar(string.charAt(i));
        }
    }

    //显示
    public void print(){
        for(int i=0;i<bigChars.length;i++){
            bigChars[i].print();
        }
    }
}

Main

public class Main {
    public static void main(String[] args){
        BigString bs = new BigString("c");
        bs.print();
    }
}

 

二十、Flyweight 享元模式

原文:https://www.cnblogs.com/baizhuang/p/10537347.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!