`
xuedong
  • 浏览: 287006 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java常用设计模式之享元模式

阅读更多
------------------------------ 享元模式(Flyweight) -------------------------------
(1)
主要用于创建对象时,运用共享技术,减少对象对内存的占用.一个提高程序效率和性能的模式,会大大加快程序的运
行速度.
就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。
Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对
象存储池(Flyweight Pool)来存放内部状态的对象。
Flyweight的关键思路,在于:
新建对象时:
先到hashtable中进行获取-->判断取得对象是否为空-->若是,则新建此对象,且放回hashtable -->若存在,则共享原来
的对象.
(2)
实例: (与静态工厂模式进行对比)
public interface Car {
 public void showCarName();
}
class BMWCar implements Car
{
 public void showCarName()
 {
  System.out.println("this is the BMWCar .");
 }
}
class FordCar implements Car
{
 public void showCarName()
 {
  System.out.println("this is the FordCar .");
 }
}
class CarFactory
{
 public static Car car;
 public static Car getCar(String name)
 {
  if("BMW".equals(name))
  {
   car = new BMWCar();
  }
  if("Ford".equals(name))
  {
   car =  new FordCar();
  }
  return car;
 }
}
class CarFlyWeightFactory
{
    public  Car car;
    private Hashtable<String,Car> carPool=new Hashtable<String,Car>();
 public  Car getCar(String name)
 {
  if("BMW".equals(name))
  {
   car=carPool.get(name);
   if(car==null)
   {
    car=new BMWCar();
    carPool.put(name, car);
   }
  }
  
  if("Ford".equals(name))
  {
   car=carPool.get(name);
   if(car==null)
   {
    car=new FordCar();
    carPool.put(name, car);
   }
  }
  return car;
 }
        public int getNumber(){ return carPool.getSize(); }
}

public class Test {
 public static void main(String[] args) {
  CarFlyWeightFactory carFlyWeightFactory=new CarFlyWeightFactory();
  Car carf1=carFlyWeightFactory.getCar("Ford");
  carf1.showCarName();
  Car carf2=carFlyWeightFactory.getCar("Ford");
  carf2.showCarName();
  if(carf1==carf2)
  {
   System.out.println("同一部车来的");
  }
  else
  {
   System.out.println("不同一部车来的");
  }
  System.out.println("车的数量是:"+carFlyWeightFactory.getNumber());
 }
}
输出:
this is the FordCar .
this is the FordCar .
同一部车来的
转自:http://shenzhenchufa.blog.51cto.com/730213/161581

 

分享到:
评论

相关推荐

    java常用设计模式-享元模式

    java常用设计模式-享元模式

    JAVA常用设计模式

    JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式JAVA常用设计模式

    java常用23中设计模式

    总体来说设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。 结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元...

    Java常用设计模式

    Java的一些常用设计模式,包括单例模式、门面模式、策略模式、观察者模式、建造者模式、简单工厂模式、抽象工厂模式、工厂方法模式、代理模式、动态代理模式,适合初学者掌握

    JAVA常用设计模式.ppt

    JAVA常用设计模式,包括:简单工厂、抽象工厂、单例、外观、桥接、代理等设计模式

    java常用设计模式集锦

    java常用的设计模式一个简单总结,如工厂模式、单例模式、代理模式等等。(楼主也是未入门的菜鸟,如有错误请及时联系楼主更正,谢谢!)

    JAVA常用设计模式详解大全

    该文件里面包含JAVA开发常用的设计模式,通过举例、分析、代码示意的方式让读者很容易理解

    java中常用设计模式总结心得

    java中常用到的设计模式,包括单例模式,工厂模式,建造模式门面模式等详细的解释

    Java常用设计模式.pdf

    Java常用设计模式Java常用设计模式Java常用设计模式

    java常用设计模式 ppt

    java 常用设计模式 ppt格式 分类 创建模式 结构模式 行为模式 优点 面向界面编程 降低耦合性 增加灵活性

    JAVA常用的设计模式

    JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式JAVA常用的设计模式...

    Java常用设计模式例子

    以JAVA为例,汇总了十几种常用的设计模式,包括了:单例模式、工厂模式、建造者模式、适配器模式、装饰器模式、外观模式、命令模式、观察者模式、状态模式、策略模式、模板方法模式等。仅供学习使用。 相关文章请看...

    java 设计模式.23种java常用设计模式

    java 设计模式.23种java常用设计模式 chm格式 java 设计模式.23种java常用设计模式 chm格式

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    Java常用设计模式(SingleTon、FactoryMethod、AbstractFactory)

    JAVA程序常用设计模式

    主要讲解的是JAVA常用的设计模式,非常适合中高级JAVA程序员想要提升编程能力的人。

    JAVA常用设计模式详解大全.pdf

    JAVA常用设计模式详解大全.pdf

    java常用设计模式-策略模式

    java常用设计模式-策略模式

Global site tag (gtag.js) - Google Analytics