核心模块:抽象享元类,具体享元类,享元工厂类

所有代码请访问: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的墙


Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐