大话设计模式_享元模式
以建造不同的网站为例子。
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;}@Overridepublic 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();}}