一、用到的类
一个接口
一个接口实现类
一个享元工厂:里面有一个用于存储实现类的map,key为我们随机指定的(我们自己是知道的,以后会用这个key去获取),还有一个获取对象方法,先去map中找,找不到就创建并塞入map,找到了就返回
二、实现代码
接口代码
public interface Shape {
void draw();
}
接口实现代码
public class Circle implements Shape{
private String color;
public Circle(String color) {
this.color = color;
}
@Override
public void draw() {
System.out.println("画一个圆形:"+ color);
}
}
享元工厂
public class FlyweighFactory {
private static final Map<String,Shape> circleMap = new HashMap<>();
public Shape getCircle(String color)
{
Shape circle = circleMap.get(color);
if(circle == null)
{
circle = new Circle(color);
circleMap.put(color, circle);
System.out.println("创建了" + color + "的圆形");
}
return circle;
}
}
调用类
@SpringBootApplication
public class FlyweighApplication {
public static void main(String[] args) {
FlyweighFactory flyweighFactory = new FlyweighFactory();
Shape circle = flyweighFactory.getCircle("red");
circle.draw();
Shape circle1 = flyweighFactory.getCircle("yellow");
circle1.draw();
Shape circle2 = flyweighFactory.getCircle("blue");
circle2.draw();
}
}
三、总结
享元模式的作用就是创建一个工厂,然后给要创建的对象起个名字,我们想要的时候就直接去工厂获取,无需再重新创建一个。