之前在讲单例模式的时候,我就提到过单例模式和享元模式很类似,今天我们就来讲一讲享元模式。
享元模式其实理解起来很简单:能共享的共享(一个实例对象),不能共享的自用(多个实例对象)
再次强调:依赖倒转原则
享元模式很像现在养二胎。
假设现在你有两个孩子,一个七岁,一个五岁。那么七岁孩子的衣服,玩具就可以和五岁的孩子共享,不需要买新的。但是吃的零食则需要额外进行购买,这些是不能共享也无法共享的。
享元对象的抽象:
interface Flyweight{
String getThings();
}
具体享元对象:
//共享的
class ClothsFlyweight implements Flyweight{
String getThings(){
return "衣服"
}
}
//不能共享的
class FoodsUnFlyweight implements Flyweight{
String getThings(){
return "吃的"
}
}
享元工厂:
class FlyweightFactory{
HashMap map = new HashMap<String,Flyweight>();
//初始化,将共享的初始化到一个map里面便于调用
FlyweightFactory(){
map.put("cloths",new ClothsFlyweight ())
}
//获取共享的东西
Flyweight getThing(String str){
return map.get(str);
}
}
五岁小孩:
class FiveChild{
//衣服共享
wearCloths(){
new FlyweightFactory.getThing("cloths");
}
//食物不能共享
eatFood(){
new FoodsUnFlyweight ();
}
}
根据以上代码,是不是觉得享元模式其实就是多个单例模式。
享元模式和单例模式可以省空间,省时间(初始化过程)。在你有许多可以复用的对象的时候,享元模式很有用。