课本实例:网站共享代码
public abstract class WebSite { //网站抽象类
public abstract void Use(User user);
}
public class ConcreteWebSite extends WebSite {//具体网站
private String name = "";
public ConcreteWebSite(String name) {
this.name = name;
}
@Override
public void Use(User user) {
System.out.println("网站分类:" + name + " 用户:" + user.getName());
}
}
import java.util.Hashtable;
public class WebSiteFactory { //网站工厂
private Hashtable flyweights=new Hashtable();
//获得网站分类
public WebSite GetWebSiteCategory(String key){
if(!flyweights.containsKey(key))
flyweights.put(key,new ConcreteWebSite(key));
return (WebSite) flyweights.get(key);
}
//获得网站分类总数
public int GetWebSiteCount(){
return flyweights.size();
}
}
public class User { //用户类,用于网站的客户账号,是“网站类”的外部状态
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
public class Client {
public static void main(String[] args) {
WebSiteFactory f = new WebSiteFactory();
WebSite fs = f.GetWebSiteCategory("产品展示");
fs.Use(new User("小菜"));
WebSite fs1 = f.GetWebSiteCategory("产品展示");
fs1.Use(new User("大鸟"));
WebSite fs2 = f.GetWebSiteCategory("产品展示");
fs2.Use(new User("娇娇"));
WebSite f1 = f.GetWebSiteCategory("博客");
f1.Use(new User("老顽童"));
WebSite f2 = f.GetWebSiteCategory("博客");
f2.Use(new User("桃谷六仙"));
System.out.println("网站分类总数为" + f.GetWebSiteCount());
}
}
UML:
拓展实例:
①五子棋
②围棋