以建造不同的网站为例子。
package com.wzs.design;
import java.util.Hashtable;
/**
* 大话设计模式--page274 享元模式
*
* @author Administrator
*
*/
public class FlyweightPattern {
public static void main(String[] args) {
WebSiteFactory f = new WebSiteFactory();
WebSite fx = f.getWebSiteCategory("产品展示");
fx.use(new User("小菜"));
WebSite fy = f.getWebSiteCategory("产品展示");
fy.use(new User("大鸟"));
WebSite fz = f.getWebSiteCategory("产品展示");
fz.use(new User("娇娇"));
WebSite fl = f.getWebSiteCategory("博客");
fl.use(new User("老顽童"));
WebSite fm = f.getWebSiteCategory("博客");
fm.use(new User("桃谷六仙"));
WebSite fn = f.getWebSiteCategory("博客");
fn.use(new User("南海鳄神"));
System.out.println("网站分类总数:" + f.getWebSiteCount());
}
}
/*
* 用户
*/
class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
/*
* 网站抽象类
*/
abstract class WebSite {
public abstract void use(User user);
}
/*
* 具体网站类
*/
class ConcreteWebSite extends WebSite {
private String name;
public ConcreteWebSite(String name) {
this.name = name;
}
@Override
public void use(User user) {
System.out.println("网站分类:" + this.name + "\t用户:" + user.getName());
}
}
/*
* 网站工厂
*/
class WebSiteFactory {
private Hashtable<String, ConcreteWebSite> flyweights = new Hashtable<String, ConcreteWebSite>();
/*
* 获得网站分类
*/
public WebSite getWebSiteCategory(String key) {
if (!flyweights.containsKey(key)) {
flyweights.put(key, new ConcreteWebSite(key));
}
return flyweights.get(key);
}
/*
* 获得网站分类总数
*/
public int getWebSiteCount() {
return flyweights.size();
}
}