享元模式

Posted feiqiangsheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了享元模式相关的知识,希望对你有一定的参考价值。

模式介绍

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

模式优点

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

模式缺点

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

使用场景

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

系统建模

网站外包,网站的发布形式有多种且具有固有化的性值。
技术图片

系统实现

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

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

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

    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();
    }
}
结果:
网站的样式是:清洁版
网站的样式是:高清版

以上是关于享元模式的主要内容,如果未能解决你的问题,请参考以下文章

11-享元(Flyweight)模式Ruby实现

设计模式课程 设计模式精讲 13-1 享元模式coding

常用设计模式系列之——享元模式

23种设计模式之享元模式代码实例

享元模式

享元模式(Flyweight)