享元模式:用共享的技术有效地支持大量的细粒度对象。
享元模式在一般的项目开发中并不常用,而系统底层开发中会用到,常常为了提升系统的性能而使用该模式。
比如:java中的String类就使用了该模式。
main(){
String a="abc";
String b="abc";
System.out.println(a==b);
}
//返回结构为true,a和b引用的同一个常量池中“abc”。
享元模式两种实现方式:1、单纯享元 2、复合享元
下面简单介绍一下:单纯享元。 复合享元就不加以介绍了,复合享元和原型模式的复合方式是一样的,其实就是增加以了一个对象管理器。
单纯享元:
public interface Flyweight{
void operation();
}
//具体实现
public class ConcreteFlyweight implements Flyweight{
Character intrinsicState;
public ConcreateFlyweight(Character state){
this.intrinsicState=state;
}
public void operation(String msg){
System.out.println(msg);
}
}
//工厂
public class FlyweightFactory{
private Map<Character,Flyweight> objects=new
HashMap<Character,Flyweight>();
public Flyweight factory(Character state){
Flyweight fly=objects.get(state);
if(fly==null){
fly=new ConreteFlyweight(state);
objects.put(state,fly);
}
rettrun fly;
}
}
使用场景:1、线程池
2、java集合中的对象就是使用享元,在通过视图技术返回一个接口对实际对象进行操作。
(关于视图技术可以查看:Collections类的实现)