简介
享元模式是结构型模式的一种,主要是为了解决系统中大量创建相同对象而设计的,其实现比较简单。在一个大型系统中,往往需要大量创建重复对象,而对于一些重复的大对象,创建和销毁需要消耗大量的系统资源,这无疑增加了系统的负担,因此,享元模式诞生了。其核心实现是将创建的对象存入map中,当需要时从map中取,如果map中没有则创建完成后存入map。
代码示例
以创建一个苹果为例 1.首先定义一个苹果类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Apple {
private String color;
private String place;
public boolean isEquals(String color, String place) {
return this.color.equals(color) && this.place.equals(place);
}
}
2.定义一个创建苹果的工厂。
import java.util.HashMap;
import java.util.Map;
public class AppleFactory {
private static final Map<String, Apple> apps = new HashMap<>();
public static Apple createApple(String color, String birth) {
if (apps.containsKey(color) && apps.get(color).isEquals(color, birth)) {
return apps.get(color);
}
Apple apple = new Apple(color, birth);
apps.put(color, apple);
return apple;
}
}
3.客户端调用
public class Test {
public static void main(String[] args) {
Apple apple1 = AppleFactory.createApple("red", "north");
Apple apple2 = AppleFactory.createApple("red", "north");
Apple apple3 = AppleFactory.createApple("green", "south");
System.out.println(apple1 == apple2);//true
System.out.println(apple1 == apple3);//false
}
}
可以看出,apple1与apple2相等,是同一个对象,而与apple3不同。