设计模式享元模式(FlyweightPattern)
核心模块:抽象享元类,具体享元类,享元工厂类所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git使用场景:大量细小粒度对象的复用;优点:减少内存中对象数量,节约系统资源,提高对象的复用率,内外状态分开隔离;缺点:增加了代码复杂度;注意:1,外部状态用来在工厂类中寻址,内部状态用来自己
·
核心模块:抽象享元类,具体享元类,享元工厂类
所有代码请访问:git@code.aliyun.com:289804201/PatternLearn.git
使用场景:大量细小粒度对象的复用;
优点:减少内存中对象数量,节约系统资源,提高对象的复用率,内外状态分开隔离;
缺点:增加了代码复杂度;
注意:
1,外部状态用来在工厂类中寻址,内部状态用来自己使用,使用的时候用外部状态赋值内部状态;
2,它是一种对象结构性行为;非行为式;
3,享元工厂类中实例化一个对象是具体的享元对象,而非抽象享元类;
/**
* Created by tory on 2018/1/4.
* 享元模式
*/
public class FlyweightPattern {
public static void main(String[] args) {
WallBuilder wb = FlyweightFactory.get("green");
wb.build();
wb = FlyweightFactory.get("red");
wb.build();
wb = FlyweightFactory.get("green");
wb.build();
}
}
//Flyweight 抽象享元类
interface Flyweight {
void build();
}
//Concreteflyweight 具体享元类
class WallBuilder implements Flyweight {
//内部状态
String color;
WallBuilder(String color) {
this.color = color;
}
@Override
public void build() {
System.out.println("修了一睹" + color + "的墙");
}
}
//FlyweightFactory 享元工厂类
class FlyweightFactory {
//String为外部状态
static Map<String, WallBuilder> map = new HashMap();
public static WallBuilder get(String key) {
WallBuilder t = map.get(key);
if (null == t) {
//注意这里是具体享元类,不能是抽象享元类
t = new WallBuilder(key);
map.put(key, t);
}
return t;
}
}
内容打印
Hello World!
修了一睹green的墙
修了一睹red的墙
修了一睹green的墙
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
已为社区贡献2条内容
所有评论(0)