设计模式-蝇量模式
About 2 minpattermjava chainOfResponsibility
一、对蝇量模式(享元模式)的理解
蝇量模式的作用就是减少对象的创建次数,比如相同的对象,总是需要实例化,而且量比较大这个时候就可以考虑使用蝇量模式了。它的实现方式就是创建Map去存储对象,每次需要新创建对象的时候,就可以在map中去判断是否存在,如果不存在则新创建,否则共享之前的对象。所有也称之为享元模式。
二、代码实现
创建汽车类
public class Car {
private String brand;
public Car(String brand){
System.out.println("___创建"+brand+"汽车");
this.brand = brand;
}
public void drive() {
System.out.println("开"+ brand + "车");
}
}
创建汽车管理者
public class CarKeeper {
private Map<String, Car> map = new HashMap<String, Car>();
public Car getCar(String name) {
Car car = this.map.get(name);
if (car == null) {
car = new Car(name);
this.map.put(name, car);
return car;
}
return car;
}
}
main方法实现
public static void main(String[] args) {
CarKeeper ck = new CarKeeper();
Car car1 = ck.getCar("奥迪");
car1.drive();
Car car2 = ck.getCar("宝马");
car2.drive();
Car car3 = ck.getCar("雷克萨斯");
car3.drive();
Car car4 = ck.getCar("雷克萨斯");
car4.drive();
Car car5 = ck.getCar("宝马");
car5.drive();
Car car6 = ck.getCar("奥迪");
car6.drive();
}
运行结果
___创建奥迪汽车
开奥迪车
___创建宝马汽车
开宝马车
___创建雷克萨斯汽车
开雷克萨斯车
开雷克萨斯车
开宝马车
开奥迪车
三、UML类图
四、笔记
感觉这个模式的UML图是最简单的,和单例模式差不多。
蝇量模式的优点:
减少运行时对象实例的个数,节省内存。
将许多“虚拟”对象的状态集中管理
蝇量模式的用途和缺点:
当一个类有许多的实例,而这些实例能被同一个方法控制的时候,就可以使用蝇量模式
一旦实现了蝇量模式,那么单个的逻辑实例将无法独立的实现不同的行为。