《JAVA与模式》第11天―享元模式 (四)

2014-11-24 08:24:28 · 作者: · 浏览: 2
元工厂角色提供两种不同的方法,一种用于提供单纯享元对象,另一种用于提供复合享元对象。

[java]
package com.bankht.Flyweight.complex;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author: 特种兵—AK47
* @创建时间:2012-6-26 下午02:17:42
*
* @类说明 :享元工厂角色提供两种不同的方法,一种用于提供单纯享元对象,另一种用于提供复合享元对象。
*/
public class FlyweightFactory {
private Map files = new HashMap();

/**
* 复合享元工厂方法
*/
public Flyweight factory(List compositeState) {
ConcreteCompositeFlyweight compositeFly = new ConcreteCompositeFlyweight();

for (Character state : compositeState) {
compositeFly.add(state, this.factory(state));
}

return compositeFly;
}

/**
* 单纯享元工厂方法
*/
public Flyweight factory(Character state) {
// 先从缓存中查找对象
Flyweight fly = files.get(state);
if (fly == null) {
// 如果对象不存在则创建一个新的Flyweight对象
fly = new ConcreteFlyweight(state);
// 把这个新的Flyweight对象添加到缓存中
files.put(state, fly);
}
return fly;
}
}
package com.bankht.Flyweight.complex;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
* @author: 特种兵—AK47
* @创建时间:2012-6-26 下午02:17:42
*
* @类说明 :享元工厂角色提供两种不同的方法,一种用于提供单纯享元对象,另一种用于提供复合享元对象。
*/
public class FlyweightFactory {
private Map files = new HashMap();

/**
* 复合享元工厂方法
*/
public Flyweight factory(List compositeState) {
ConcreteCompositeFlyweight compositeFly = new ConcreteCompositeFlyweight();

for (Character state : compositeState) {
compositeFly.add(state, this.factory(state));
}

return compositeFly;
}

/**
* 单纯享元工厂方法
*/
public Flyweight factory(Character state) {
// 先从缓存中查找对象
Flyweight fly = files.get(state);
if (fly == null) {
// 如果对象不存在则创建一个新的Flyweight对象
fly = new ConcreteFlyweight(state);
// 把这个新的Flyweight对象添加到缓存中
files.put(state, fly);
}
return fly;
}
}

  客户端角色

[java]
package com.bankht.Flyweight.complex;

import java.util.ArrayList;
import java.util.List;

/**
* @author: 特种兵—AK47
* @创建时间:2012-6-26 下午02:18:11
*
* @类说明 :客户端类
*/
public class Client {

public static void main(String[] args) {
List compositeState = new ArrayList();
compositeState.add('a');
compositeState.add('b');
compositeState.add('c');
compositeState.add('a');
compositeState.add('b');

FlyweightFactory flyFactory = new FlyweightFactory();
Flyweight compositeFly1 = flyFactory.factory(compositeState);
Flyweight compositeFly2 = flyFactory.factory(compositeState);
compositeFly1.operation("Composite Call");

System.out.println("---------------------------------");
System.out.println("复合享元模式是否可以共享对象:" + (compositeFly1 == compositeFly2));

Character state = 'a';
Flyweight fly1 = flyFactory.factory(state);
Flyweight fly2 = flyFactory.factory(state);
System.out.println("单纯享元模式是否可以共享对象:" + (fly1 == fly2));
}
}
package com.bankht.Flyweight.complex;

import java.util.ArrayList;
import java.util.List;

/**
* @author: 特种兵—AK47
* @创建时间:2012-6-26 下午02:18:11
*
* @类说明 :客户端类
*/
public class Client {

public static void main(String[] args) {
List compositeState = new ArrayList();
compositeState.add('a');
compositeState.add('b');
compositeState.add('c');
compositeState.add('a');
compositeState.add('b');

FlyweightFa