敲碎时间的人的个人专栏
上一篇

js设计模式(享元)

广告
选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。
大纲

享元设计模式

当对象需要在对象之间共享时使用此模式。对象将是不可变的。为什么?由于对象是由其他人共享的,因此不得更改它们。享元模式存在于 Javascript 引擎中。例如,Javascript 引擎维护一个字符串列表,这些字符串是不可变的并且可以在应用程序之间共享。

我们的玩具厂

每个玩具都有一个类型

每个玩具都有一个制造国

每个玩具都有生产年份。这些属性可以保留在享元模型中。

function Flyweight(genre, country, year) {
    this.genre = genre;
    this.country = country;
    this.year = year;
};

var FlyWeightFactory = (function () {
    var flyweights = {};
    return {
        get: function (genre, country, year) {
            if (!flyweights[genre + country]) {
                flyweights[genre + country] =
                    new Flyweight(genre, country, year);
            }
            return flyweights[genre + country];
        }
    }
})();

function ToyCollection() {
    var toys = {};
    return {
        add: function (genre, country, year, brandTag) {
            toys[brandTag] =
                new Toy(genre, country, year, brandTag);
        }
    };
}

var Toy = function (genre, country, year, brandTag) {
    this.flyweight = FlyWeightFactory.get(genre, country, year, brandTag);
    this.brandTag = brandTag;
 }
function build() {
    var toys = new ToyCollection();
    toys.add("Fantasy", "USA", "2021", "StarWars_01");
    toys.add("Fantasy", "USA", "2021", "Transformers_01");
}

总结

享元设计模式最主要的是共享对象,而且这些对象属性基本是不可变的。在上面的这个例子中,不可变的对象属性包括类型和生产国家,而生产的年份不同,会产生不同的对象。

 

 

 

 

 

版权声明:著作权归作者所有。

X

欢迎加群学习交流

联系我们