zoukankan      html  css  js  c++  java
  • java设计模式之享元模式

    概念:就是说在一个系统中如果有多个相同的对象,那么只共享一份就可以了,不必每个都去实例化一个对象。
    Flyweight(享元)模式中常出现Factory模式。Flyweight的内部状态是用来共享的,Flyweight factory负责维护一个对
    象存储池(Flyweight Pool)来存放内部状态的对象。
    Flyweight的关键思路,在于:
    新建对象时:先到hashtable中进行获取-->判断取得对象是否为空-->若是,则新建此对象,且放回hashtable -->若存在,则共享原来
    的对象.

    实例代码:

    public interface Car {
    
        public void showCarName();
    }
    
    public class BMWCar implements Car {
    
        private String name;
        public BMWCar(String name){
            this.name=name;
        }
        public void setName(String name){
            this.name=name;
        }
        public String getName(){
            return this.name;
        }
        @Override
        public void showCarName() {
            // TODO Auto-generated method stub
    
            System.out.println("I am BWM car.");
        }
    
    }
    
    public class FordCar implements Car {
    
        public String name;
    
        public FordCar(String name) {
            this.name = name;
        }
    
        public String getName() {
            return this.name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public void showCarName() {
            // TODO Auto-generated method stub
    
            System.out.println("I am a Ford car.");
        }
    
    }
    
    import java.util.Hashtable;
    
    public class FlyWeightFactory {
    
        public static Car car;
        private static Hashtable<String, Car> carPool = new Hashtable<String, Car>();
    
        public static Car getCar(String name) {
            if ("BMW".equals(name)) {
                car = carPool.get(name);
                if (car == null) {
                    car = new BMWCar("nan");
                    carPool.put(name, car);
                }
            } else if ("Ford".equals(name)) {
                car = carPool.get(name);
                if(car==null){
                    car=new FordCar("xi");
                    carPool.put(name, car);
                }
            }
            return car;
        }
        public static int getNumber(){
            return carPool.size();
        }
    }
    
    public class test {
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            // TODO Auto-generated method stub
    
            Car car,car1,car2;
            car=FlyWeightFactory.getCar("BMW");
            car.showCarName();
            car1=FlyWeightFactory.getCar("Ford");
            car1.showCarName();
            car2=FlyWeightFactory.getCar("BMW");
            if(car==car2){
                System.out.println("we are the same car.");
            }else{
                System.out.println("we are different car.");
            }
            System.out.println(FlyWeightFactory.getNumber());
        }
    
    }

    运行结果:

    I am BWM car.
    I am a Ford car.
    we are the same car.
    2

  • 相关阅读:
    警惕:利用Dropbox链接散播的恶意软件
    repo的小结
    【网络协议】TCP的拥塞控制机制
    具体总结 Hive VS 传统关系型数据库
    站点防止攻击
    Java凝视Override、Deprecated、SuppressWarnings具体解释
    括号配对问题
    java的System.getProperty()方法能够获取的值
    HTTP协议是无状态协议,怎么理解?
    C++
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3315185.html
Copyright © 2011-2022 走看看