享元模式

来源:互联网 发布:人工智能创意文案 编辑:程序博客网 时间:2024/06/16 21:49

一个系统中,如果有很多一样的对象,就会浪费内存。享元模式即共享相同的对象,比如一台打印机打印时需根据用户要求使用不同字体,如果在print函数里面实例化字体,就会创建很多相同的字体,浪费资源。

import java.util.HashMap;import java.util.Map;abstract class Font{    public abstract void print(String str);}class FontA extends Font{    @Override    public void print(String str) {        System.out.println("A字体的[" + str + "]");    }} class FontB extends Font{    @Override    public void print(String str) {        System.out.println("B字体的[" + str + "]");    }} class FontFactory{    private Map<String, Font> fonts = new HashMap<String, Font>();    private Font createFontByName(String name){        if("A".equals(name)){            return new FontA();        } else {            return new FontB();        }    }    public Font getFontByName(String name){        if(fonts.containsKey(name)){            return (Font)fonts.get(name);        } else {            Font res = createFontByName(name);            fonts.put(name, res);            return res;        }    }}class Printer {    FontFactory fontFactory = new FontFactory();    public void print(String str, String fontName){        Font font = fontFactory.getFontByName(fontName);        font.print(str);    }}public class Main{    public static void main(String[] args){        Printer printer = new Printer();        printer.print("abc", "A");        printer.print("abc", "A");        printer.print("abc", "B");        printer.print("abc", "B");    }}
原创粉丝点击