• 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

  • 相关阅读:
    什么是webApp?与原生APP的区别
    判断h5是否在小程序内打开
    移动端 1px边框
    【填坑】小程序webview使用简单汇总
    一个小程序账号只能发布一个小程序
    微信开发工具提示未绑定网页开发者
    小程序webview(业务域名配置)
    webpack打包已开发好的vue项目
    vscode搭建本地服务器
    微信扫码下载,H5引导页
  • 原文地址:https://www.cnblogs.com/nannanITeye/p/3315185.html
Copyright © 2020-2023  润新知