设计模式之享元模式
2016-03-28 14:37
477 查看
享元模式:运用共享技术有效的支持大量细粒度的对象。
挺绕的一句话。
当我们在刷微博的时候,也有很多人同时在使用。系统是一样的系统,不同的用户登录上去就有不同的微博等级,页面风格,每个人都有不同的好友,能收到不同的私信。将这个例子抽象一点来说,系统是共享的,每个用户使用的系统都是一样的,而不同的用户登录上去有不同的页面风格和等级。用户可以看做是细粒度的对象,共享的系统支持用户这样的细粒度对象,整个结构就可以理解为享元模式。
抽象享元角色:
用户角色:
用户登录网站:
Tom已登录微博 等级:8 页面风格:blue style
Jim Green已登录微博 等级:3 页面风格:pink style
Tom已登录博客 等级:8 页面风格:blue style
Jim Green已登录博客 等级:3 页面风格:pink style
两个用户登录了两个网站,而实际上每个网站都只有一个实例,这就是享元模式。
挺绕的一句话。
当我们在刷微博的时候,也有很多人同时在使用。系统是一样的系统,不同的用户登录上去就有不同的微博等级,页面风格,每个人都有不同的好友,能收到不同的私信。将这个例子抽象一点来说,系统是共享的,每个用户使用的系统都是一样的,而不同的用户登录上去有不同的页面风格和等级。用户可以看做是细粒度的对象,共享的系统支持用户这样的细粒度对象,整个结构就可以理解为享元模式。
抽象享元角色:
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
两个用户登录了两个网站,而实际上每个网站都只有一个实例,这就是享元模式。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序