享元模式

模式介绍

享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。

模式优点

1、大大减少对象的创建,降低系统的内存,使效率提高。

模式缺点

1、提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。

使用场景

1、系统有大量相似对象。
2、需要缓冲池的场景。

系统建模

1、网站外包,网站的发布形式有多种且具有固有化的性质。

系统实现

/**
 * 网站抽象类
 */
public abstract class WebSite {
    public abstract void use();
}

/**
 * 网站实例
 */
public class ConcreteWebSit extends WebSite {
    private String webType = "";

    public ConcreteWebSit(String type){
        this.webType = type;
    }

    @Override
    public void use() {
        System.out.println("网站的样式是:" + webType);
    }
}   
/**
 * 网站工厂
 */
public class WebSitFactory {
    private static HashMap<String, WebSite> pool = new HashMap<>();

    public static WebSite getWebSit(String webSitType){
        if (!pool.containsKey(webSitType)) {
            WebSite webSite = new ConcreteWebSit(webSitType);
            pool.put(webSitType, webSite);
            return webSite;
        } else {
            return pool.get(webSitType);
        }
    }
}
/**
 * 客户端
 */
public class Client {
    public static void main(String args[]){
        String webType1 = "清洁版";
        String webType2 = "高清版";
        WebSite webSite1 = WebSitFactory.getWebSit(webType1);
        WebSite webSite2 = WebSitFactory.getWebSit(webType2);
        webSite1.use();
        webSite2.use();
    }
}
结果:
网站的样式是:清洁版
网站的样式是:高清版
原文地址:https://www.cnblogs.com/feiqiangsheng/p/12208788.html