享元设计模式

当对象需要在对象之间共享时使用此模式。对象将是不可变的。为什么?由于对象是由其他人共享的,因此不得更改它们。享元模式存在于 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");
}
总结
享元设计模式最主要的是共享对象,而且这些对象属性基本是不可变的。在上面的这个例子中,不可变的对象属性包括类型和生产国家,而生产的年份不同,会产生不同的对象。