设计模式-享元模式
Posted lufei33180
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式-享元模式相关的知识,希望对你有一定的参考价值。
一、享元模式理解
享元言外之意就是共享,共享就是一样不变的部分能够得到重用,公用,享元模式则是对对象的共享,有点类似于单例模式的懒汉模式,降低系统cpu,内存的消耗,不同于单例模式的是,享元模式分为内部状态和外部状态,内部状态就好比单例模式,不会改变,而外部方式是随着需求而改变的,比如汽车某一个型号的发动机不会变动,变动的是他要装载在哪一类车上,或者说棋子,不变的是黑色和白色,变的是他的位置坐标。
二、代码实现
public class Engine { private String name; private String molde; public Engine(String name, String molde) { System.out.println("开始造发动机:"+name); this.name = name; this.molde = molde; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getMolde() { return molde; } public void setMolde(String molde) { this.molde = molde; } @Override public String toString() { return "Engine{" + "name=‘" + name + ‘‘‘ + ", molde=‘" + molde + ‘‘‘ + ‘}‘; } } //工厂类 public class EngineFactory { Map<String,Engine> engineMap=new HashMap<String,Engine>(); public Engine getEngine(String name,String molde){ if(null!=engineMap.get(name)){ return engineMap.get(name); } Engine engine=new Engine(name,molde); engineMap.put(name,engine); return engine; } } //外部变化部分 public class Car { private String type; private Engine engine; public Car(String type, Engine engine) { this.type = type; this.engine = engine; } public String getType() { return type; } public void setType(String type) { this.type = type; } public Engine getEngine() { return engine; } public void setEngine(Engine engine) { this.engine = engine; } @Override public String toString() { return "Car{" + "type=‘" + type + ‘‘‘ + ", engine=" + engine + ‘}‘; } } //测试类 public class Test { public static void main(String[] args) { EngineFactory engineFactory=new EngineFactory(); Car car1=new Car("高级car",engineFactory.getEngine("高级发动机","001")); Car car2=new Car("高级car",engineFactory.getEngine("高级发动机","001")); Car car3=new Car("低级car",engineFactory.getEngine("一般发动机","001")); Car car4=new Car("低级car",engineFactory.getEngine("一般发动机","001")); System.out.println(car1+"/r"+car2+"/r"+car3+"/r"+car4); } }
三、使用场景
1.系统中需要生成大量的相似对象
2、需要用到池的场景,如数据库连接池、String常量池、缓冲池
三、总结
享元模式好比是工程模式+单例模式实现,客户端传递不同参数到工厂,工厂生产不同的产品,产品按照类型生产,不同类型共用一个对象,说到共享就会联想到线程安全,在对象的生成一定要加同步关键字+双重判断
以上是关于设计模式-享元模式的主要内容,如果未能解决你的问题,请参考以下文章