java设计模式(十一)--享元模式
2017-08-18 00:00
399 查看
对于享元模式,在我看来就是为解决庞大的小对象而生的,我感觉他和单例模式是差不多的,都是产生一个实例,避免实例的重复创建,他们是有区别的,单例模式所做的就是单纯的创建唯一一个实例的工作。
网络上对享元模式的解释:
此模式用于减少创建对象的数量,以减少内存占用并提高性能,此模式尝试重用现有的同类对象,如果未找到匹配的对象,就创建对象。
实例:用享元模式来创建不同颜色的小汽车。
以下就是我所画的类图:
![](https://static.oschina.net/uploads/img/201708/18230526_YaJY.png)
以下是我对实例的实现所完成的代码:
1.实体类的接口及其实现类
2.实体创建类
3.测试类
4.后台输出
这个模式通过HashMap集合的属性,以其中的得内部状态---颜色作为键,与此颜色对应的汽车类作为值,在调用每个车的方法前会判断是否存在该颜色的车,如果没有就会创建,有的话就会免去创建步骤,使用之前创建过的该类对象,从而避免了重复类的创建。
但是,由于创建该类的方法是在该类外进行的,并且产生的还是不确定的对象,所以这就把对象的状态外部化了,由于不确定的外部状态变多,使得系统变得复杂化,并且在访问外部状态时会使运行时间变长。
网络上对享元模式的解释:
此模式用于减少创建对象的数量,以减少内存占用并提高性能,此模式尝试重用现有的同类对象,如果未找到匹配的对象,就创建对象。
实例:用享元模式来创建不同颜色的小汽车。
以下就是我所画的类图:
![](https://static.oschina.net/uploads/img/201708/18230526_YaJY.png)
以下是我对实例的实现所完成的代码:
1.实体类的接口及其实现类
interface Vehicle { void produce(); } public class Car implements Vehicle { private String color; public Car(String color) { this.color = color; } @Override public void produce() { System.out.println("Car [color=" + color + "]"); } }
2.实体创建类
public class VehicleFactory { private static Map<String,Vehicle> vehicles=new HashMap<String, Vehicle>(); public Car getCar(String color){ Car car=(Car) vehicles.get(color); if(car==null){ System.out.println("========================"); System.out.println("create a "+color+" car"); car=new Car(color); vehicles.put(color, car); } return car; } }
3.测试类
public class Test { private static final String[] colors={"red","green","black","blue","white"}; public static void main(String[] args) { Random r=new Random(); VehicleFactory factory=new VehicleFactory(); Car car=null; //生产20辆车 for(int i=0;i<20;i++){ car=factory.getCar(colors[r.nextInt(5)]); car.produce(); } } }
4.后台输出
======================== create a white car Car [color=white] ======================== create a blue car Car [color=blue] Car [color=blue] ======================== create a green car Car [color=green] ======================== create a black car Car [color=black] Car [color=blue] Car [color=black] ======================== create a red car Car [color=red] Car [color=red] Car [color=green] Car [color=green] Car [color=white] Car [color=black] Car [color=black] Car [color=blue] Car [color=green] Car [color=green] Car [color=white] Car [color=blue] Car [color=white]
这个模式通过HashMap集合的属性,以其中的得内部状态---颜色作为键,与此颜色对应的汽车类作为值,在调用每个车的方法前会判断是否存在该颜色的车,如果没有就会创建,有的话就会免去创建步骤,使用之前创建过的该类对象,从而避免了重复类的创建。
但是,由于创建该类的方法是在该类外进行的,并且产生的还是不确定的对象,所以这就把对象的状态外部化了,由于不确定的外部状态变多,使得系统变得复杂化,并且在访问外部状态时会使运行时间变长。
相关文章推荐
- Java设计模式之十一(享元模式)
- java设计模式(十一)——享元模式(Flyweight)
- Java设计模式之享元模式实例详解
- Java设计模式之享元模式
- java设计模式——结构型之享元模式
- java设计模式---享元模式
- JAVA设计模式——享元模式
- Java设计模式 享元模式
- java设计模式_享元模式
- java设计模式之享元模式
- Java设计模式——享元模式
- Java设计模式--------享元模式
- 设计模式笔记之十一 (享元模式)
- 【java设计模式】享元模式
- 详解Java设计模式编程中的Flyweight享元模式的开发结构
- Java设计模式之--享元模式(Flyweight Pattern)
- java设计模式之享元模式
- Java设计模式-----FlyWeight享元模式
- java设计模式---享元模式
- java 设计模式学习笔记十一flyweight享元设计模式