设计模式之享元模式

总体来说设计模式分为三大类:
创建型模式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

    }
}
在JAVA语言中,String类型就是使用了享元模式。String对象是final类型,对象一旦创建就不可改变。在JAVA中字符串常量都是存在常量池中的,JAVA会确保一个字符串常量在常量池中只有一个拷贝。String a=”abc”,其中”abc”就是一个字符串常量。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值