总体来说设计模式分为三大类:
创建型模式5种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式7种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式11种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
享元模式
采用一个共享来避免大量拥有相同内容对象的开销。这种开销中最常见、直观的就是内存的损耗。享元模式以共享的方式高效的支持大量的细粒度对象。
享元模式分为:单纯享元模式和复合享元模式。
Demo
首先,创建抽象类
public abstract class Flyweight{
public abstract void operation();
}
其次,创建具体类
public class ConcreteFlyweight extends Flyweight{
private String string;
public ConcreteFlyweight(String str){
string = str;
}
public void operation(){
System.out.println("Content: " + string);
}
}
然后,创建工厂类
public class FlyweightFactory{
private Hashtable flyweights = new Hashtable();
private static FlyweightFactory factory=new FlyweightFactory();
public FlyweightFactory getInstance(){
return factory;
}
public Flyweight getFlyWeight(Object obj){
Flyweight flyweight = (Flyweight) flyweights.get(obj);
if(flyweight == null){
//产生新ConcreteFlyweight
flyweight = new ConcreteFlyweight((String)obj);
flyweights.put(obj, flyweight);
}
return flyweight;
}
public int getFlyweightSize(){
return flyweights.size();
}
}
再者,创建测试类
public class Test{
public static void main(String[] args){
FlyweightFactory factory = FlyweightFactory.getInstance();
Flyweight fly1 = factory.getFlyWeight("A");
fly1.operation();
Flyweight fly2 = factory.getFlyWeight("B");
fly2.operation();
Flyweight fly3 = factory.getFlyWeight("A");
fly3.operation();
Flyweight fly4 = factory.getFlyWeight("A");
fly4.operation();
Flyweight fly5 = factory.getFlyWeight("A");
fly5.operation();
Flyweight fly6 = factory.getFlyWeight("A");
fly6.operation();
System.out.println("objSize = " + factory.getFlyweightSize());
}
}
最后,查看输出结果
Content:A
Content:B
Content:A
Content:A
Content:A
Content:A
objSize = 2
Java中的String类型
public class Test {
public static void main(String[] args) {
String a = "abc";
String b = "abc";
System.out.println(a==b);//输出结果是true
}
}