一、前言:
享元模式的注意事项与细节:
- 享元的理解:享即 “共享”,元即 “对象”。
- 系统中需要大量对象,这些对象需要消耗大量内存,并且这些对象可以外部化,则考虑享元模式。
- 享元模式大大减少了对象的创建,降低了程序内存的占用,提高了效率。
二、UML图:
三、享元模式:
3.1、代码实例:
Step 1) 创建 User 类:
public class User {
private String name;
public User(String name) {
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Step 2) 创建 WebSite 抽象类:
public abstract class WebSite {
public abstract void use(User user);
}
Step 3) 创建 ConcreteWebSite 实现类:
public class ConcreteWebSite extends WebSite{
private String type = "";
public ConcreteWebSite(String type) {
this.type = type;
}
@Override
public void use(User user) {
System.out.println("网站发布的形式为:"+type+"在使用中"+"... 使用者是:"+user.getName());
}
}
Step 4) 创建 WebSiteFactory 类:
public class WebSiteFactory {
private HashMap<String, ConcreteWebSite> pool = new HashMap<>();
public WebSite getWebsiteCategory(String type){
if(!pool.containsKey(type)){
pool.put(type, new ConcreteWebSite(type));
}
return (WebSite) pool.get(type);
}
public int getWetSiteCount(){
return pool.size();
}
}
Step 5) 创建 main 方法:
public class Client {
public static void main(String[] args) {
WebSiteFactory factory = new WebSiteFactory();
WebSite webSite1 = factory.getWebsiteCategory("新闻");
webSite1.use(new User("tom"));
WebSite webSite2 = factory.getWebsiteCategory("博客");
webSite2.use(new User("jack"));
WebSite webSite3 = factory.getWebsiteCategory("博客");
webSite2.use(new User("smith"));
WebSite webSite4 = factory.getWebsiteCategory("博客");
webSite2.use(new User("jack"));
System.out.println("网站的分类共有:" + factory.getWetSiteCount());
}
}
• 由 ChiKong_Tam 写于 2020 年 10 月 19 日