10年 Java程序员,硬核人生!勇往直前,永不退缩!

欢迎围观我的git:https://github.com/R1310328554/spring_security_learn 寻找志同道合的有志于研究技术的朋友,关注本人微信公众号: 觉醒的码农,或Q群 165874185

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Flyweight 直译为蝇量。就其表示的模式来说,翻译成享元,确实是不错的

package designpattern.structure.flyweight;

public interface Flyweight {

    void action(int arg);
}

package designpattern.structure.flyweight;

public class FlyweightImpl implements Flyweight {

    public void action(int arg) {
        // TODO Auto-generated method stub
        System.out.println("FlyweightImpl.action()");
    }

}


package designpattern.structure.flyweight;

import java.util.HashMap;
import java.util.Map;

public class FlyweightFactory {

    private static Map<String,Flyweight> flyweights = new HashMap<String,Flyweight>();
       
    public FlyweightFactory(String arg) {
        flyweights.put(arg, new FlyweightImpl());
    }
   
    public static Flyweight getFlyweight(String key) {
        if (flyweights.get(key) == null) {
            flyweights.put(key, new FlyweightImpl());
        }
        return flyweights.get(key);
    }

    public static int getSize() {
        return flyweights.size();
    }
}


package designpattern.structure.flyweight;

public class Client {

    /**
     * 
     * Fly微Weight量模式 —— 将小对象缓存起来的艺术。、、
     * 
     */
    public static void main(String[] args) {
        Flyweight fly1 = FlyweightFactory.getFlyweight("a");
        fly1.action(1);
       
        Flyweight fly2 = FlyweightFactory.getFlyweight("a");
        System.out.println(fly1 == fly2);
       
        Flyweight fly3 =FlyweightFactory.getFlyweight("b");
        fly3.action(2);
       
        Flyweight fly4 = FlyweightFactory.getFlyweight("c");
        fly4.action(3);
       
        Flyweight fly5 =FlyweightFactory.getFlyweight("d");
        fly4.action(4);
       
        System.out.println(FlyweightFactory.getSize());
    }

}

 

总结:

1 主要就是两个角色:a: 元或者说pojo角色—— 主要属性是其内部状态; b: 工厂角色,用来获取‘元’ 

2 ‘享’ 的具体实现是—— 工厂获取‘元’的时候,如果已经已经创建过,则直接取出返回;如果没,则创建并加入缓存,再返回

posted on 2014-08-17 00:43  CanntBelieve  阅读(255)  评论(0编辑  收藏  举报