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("网站分类:"+this.name+"用户:"+user.getName()); }}public class User { private String name; public User(String name) { this.name = name; } public String getName() { return name; }}// WebSite享元工厂public class WebSiteFactory { private HashMap<String, WebSite> flyweights=new HashMap<>(); 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 Test { public static void main(String[] args) { WebSiteFactory factory = new WebSiteFactory(); WebSite fx = factory.GetWebSiteCategory("产品展示"); fx.Use(new User("小菜")); WebSite fy = factory.GetWebSiteCategory("产品展示"); fy.Use(new User("大鸟")); WebSite fz = factory.GetWebSiteCategory("产品展示"); fz.Use(new User("李四")); WebSite fa = factory.GetWebSiteCategory("博客"); fa.Use(new User("王五")); WebSite fb = factory.GetWebSiteCategory("博客"); fb.Use(new User("张三")); WebSite fc = factory.GetWebSiteCategory("博客"); fc.Use(new User("小飞")); }}