共享模式_共享对象,避免内存浪费(避免重复创建相同的对象)
/** * 需要被共享的对象 * @author maikec * @date 2019/5/17 */ public class Flyweight { private String name; public Flyweight(String name){ this.name = name; } public String getName() { return name; } } /** * @author maikec * @date 2019/5/17 */ public class FlyweightFactory { private static FlyweightFactory ourInstance = new FlyweightFactory(); @Getter private final Map<String, Flyweight> pool = Collections.synchronizedMap( new HashMap<>( ) ); public static FlyweightFactory getInstance() { return ourInstance; } private FlyweightFactory() { } public Flyweight getFlyweight(String flyweightName){ if (pool.containsKey( flyweightName )){ return pool.get( flyweightName ); }else{ Flyweight flyweight = new Flyweight( flyweightName ); pool.putIfAbsent( flyweightName,flyweight ); return flyweight; } } } /** * @author maikec * @date 2019/5/17 */ public class FlyweightDemo { public static void main(String[] args) { FlyweightFactory instance = FlyweightFactory.getInstance(); System.out.println( instance.getFlyweight( "Flyweight" ).getName() ); System.out.println( instance.getFlyweight( "Flyweight" ).getName() ); System.out.println( instance.getFlyweight( "Flyweight1" ).getName() ); // 需要配置虚拟机 -ea 参数启用assert功能 assert 2==instance.getPool().size(); } }
如果有想学习java的程序员,可来我们的java学习扣qun:830783865,免费送java的视频教程噢!我每晚上8点还会在群内直播讲解Java知识,欢迎大家前来学习哦。