1. public abstract class WebSite {
    2. // 使用方法需要传递用户对象,外部状态
    3. public abstract void Use(User user);
    4. }
    5. // 需要共享
    6. public class ConcreteWebSite extends WebSite {
    7. private String name="";
    8. public ConcreteWebSite(String name){
    9. this.name=name;
    10. }
    11. @Override
    12. public void Use(User user) {
    13. System.out.println("网站分类:"+this.name+"用户:"+user.getName());
    14. }
    15. }
    16. public class User {
    17. private String name;
    18. public User(String name) {
    19. this.name = name;
    20. }
    21. public String getName() {
    22. return name;
    23. }
    24. }
    25. // WebSite享元工厂
    26. public class WebSiteFactory {
    27. private HashMap<String, WebSite> flyweights=new HashMap<>();
    28. public WebSite GetWebSiteCategory(String key){
    29. if(!flyweights.containsKey(key)){
    30. flyweights.put(key, new ConcreteWebSite(key));
    31. }
    32. return ((WebSite)flyweights.get(key));
    33. }
    34. public int GetWebSiteCount(){
    35. return flyweights.size();
    36. }
    37. }
    38. public class Test {
    39. public static void main(String[] args) {
    40. WebSiteFactory factory = new WebSiteFactory();
    41. WebSite fx = factory.GetWebSiteCategory("产品展示");
    42. fx.Use(new User("小菜"));
    43. WebSite fy = factory.GetWebSiteCategory("产品展示");
    44. fy.Use(new User("大鸟"));
    45. WebSite fz = factory.GetWebSiteCategory("产品展示");
    46. fz.Use(new User("李四"));
    47. WebSite fa = factory.GetWebSiteCategory("博客");
    48. fa.Use(new User("王五"));
    49. WebSite fb = factory.GetWebSiteCategory("博客");
    50. fb.Use(new User("张三"));
    51. WebSite fc = factory.GetWebSiteCategory("博客");
    52. fc.Use(new User("小飞"));
    53. }
    54. }