您的位置:首页 > 编程语言 > Java开发

设计模式之享元模式

2016-03-28 14:37 477 查看
        享元模式:运用共享技术有效的支持大量细粒度的对象。

        挺绕的一句话。

        当我们在刷微博的时候,也有很多人同时在使用。系统是一样的系统,不同的用户登录上去就有不同的微博等级,页面风格,每个人都有不同的好友,能收到不同的私信。将这个例子抽象一点来说,系统是共享的,每个用户使用的系统都是一样的,而不同的用户登录上去有不同的页面风格和等级。用户可以看做是细粒度的对象,共享的系统支持用户这样的细粒度对象,整个结构就可以理解为享元模式。

抽象享元角色:

public abstract class Website {
public String name;

public Website(String name) {
super();
this.name = name;
}

public abstract void showUserInfo(User user);
}
具体享元角色:

public class CocreteWebsite extends Website {

public CocreteWebsite(String name) {
super(name);
}

public void showUserInfo(User user) {
System.out.print(user.name + "已登录" + this.name);
System.out.print("\t等级:" + user.lv);
System.out.println("\t页面风格:" + user.style);
}

}
享元工厂角色:

public class WebsiteFactory {
public HashMap<String, Website> websites = new HashMap<String, Website>();
public Website getWebsite(String website) {
if(websites.containsKey(website)) {
return websites.get(website);
}
websites.put(website, new CocreteWebsite(website));
return websites.get(website);
}

}

用户角色:

public class User {
public String name;
public String style;
public String lv;
public User(String name, String style, String lv) {
this.name = name;
this.style = style;
this.lv = lv;
}
}


用户登录网站:

public static void main(String[] args) {
WebsiteFactory websiteFactory = new WebsiteFactory();
Website weibo = websiteFactory.getWebsite("微博");
User tom = new User("Tom", "blue style", "8");
weibo.showUserInfo(tom);
User jim = new User("Jim Green", "pink style", "3");
weibo.showUserInfo(jim);
Website boke = websiteFactory.getWebsite("博客");
boke.showUserInfo(tom);
boke.showUserInfo(jim);
}
输出:

Tom已登录微博 等级:8 页面风格:blue style
Jim Green已登录微博 等级:3 页面风格:pink style
Tom已登录博客 等级:8 页面风格:blue style
Jim Green已登录博客 等级:3 页面风格:pink style

        两个用户登录了两个网站,而实际上每个网站都只有一个实例,这就是享元模式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息