您的位置:首页 > 编程语言 > Java开发

java设计模式之享元模式

2013-09-11 18:33 393 查看
概念:就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。
Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对
象存储池(Flyweight Pool)来存放内部状态的对象。
Flyweight的关键思路,在于:
新建对象时:先到hashtable中进行获取-->判断取得对象是否为空-->若是,则新建此对象,且放回hashtable -->若存在,则共享原来
的对象.

实例代码:

public interface Car {

public void showCarName();
}

public class BMWCar implements Car {

private String name;
public BMWCar(String name){
this.name=name;
}
public void setName(String name){
this.name=name;
}
public String getName(){
return this.name;
}
@Override
public void showCarName() {
// TODO Auto-generated method stub

System.out.println("I am BWM car.");
}

}

public class FordCar implements Car {

public String name;

public FordCar(String name) {
this.name = name;
}

public String getName() {
return this.name;
}

public void setName(String name) {
this.name = name;
}

@Override
public void showCarName() {
// TODO Auto-generated method stub

System.out.println("I am a Ford car.");
}

}

import java.util.Hashtable;

public class FlyWeightFactory {

public static Car car;
private static Hashtable<String, Car> carPool = new Hashtable<String, Car>();

public static Car getCar(String name) {
if ("BMW".equals(name)) {
car = carPool.get(name);
if (car == null) {
car = new BMWCar("nan");
carPool.put(name, car);
}
} else if ("Ford".equals(name)) {
car = carPool.get(name);
if(car==null){
car=new FordCar("xi");
carPool.put(name, car);
}
}
return car;
}
public static int getNumber(){
return carPool.size();
}
}

public class test {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub

Car car,car1,car2;
car=FlyWeightFactory.getCar("BMW");
car.showCarName();
car1=FlyWeightFactory.getCar("Ford");
car1.showCarName();
car2=FlyWeightFactory.getCar("BMW");
if(car==car2){
System.out.println("we are the same car.");
}else{
System.out.println("we are different car.");
}
System.out.println(FlyWeightFactory.getNumber());
}

}


运行结果:

I am BWM car.
I am a Ford car.
we are the same car.
2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: