Java大数据平台开发 学习笔记(41)—— java设计模式(享元模式)知识汇总

一、前言:

享元模式的注意事项与细节:

  1. 享元的理解:享即 “共享”,元即 “对象”。
  2. 系统中需要大量对象,这些对象需要消耗大量内存,并且这些对象可以外部化,则考虑享元模式。
  3. 享元模式大大减少了对象的创建,降低了程序内存的占用,提高了效率。

二、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 日

猜你喜欢

转载自blog.csdn.net/qq_42209354/article/details/109166275