zoukankan      html  css  js  c++  java
  • 工厂模式、单例和多例

      今天在公交车上看了马士兵的工厂模式,在实体类中实现工厂模式,单例和多例。

      这些东西还是很有用的,而且没用过多例,在博客记录一下。

      举一个小例子:

      通常建立对象

      新建一个Car实体类: 

    public class Car {
        
        public void run(){
            System.out.println("Car在雨中行驶");
        }
    }

      

      新建一个Test类:  

    public class Test {
        
        public static void main(String[] args) {
            Car car = new Car();
            car.run();
        }
        
    }

      

      运行结果:

    Car在雨中行驶

      

      使用工厂模式建立对象

      Car实体类:

    public class Car {
        
        private Car(){}
        
      
    public static Car getInstance(){ return new Car(); } public void run(){ System.out.println("Car在雨中行驶"); } }

      工厂生产对象

      Test类:

    public class Test {
        
        public static void main(String[] args) {
            Car car = Car.getInstance();
            car.run();
        }
        
    }

      

      运行结果:

    Car在雨中行驶

      这里是使用工厂模式获取Car对象

      需求:只有一辆车用来驾驶

      这里使用单例实现:

      Car类:

    public class Car {
        
        private Car(){}
        
        private static Car car = new Car();
        
        public static  Car getInstance(){
            return car;
        }
        
        public void run(){
            System.out.println("Car在雨中行驶");
        }
    }

      在这里创建私有静态对象,并返回,实现单例。

      Test类:

    public class Test {
        
        public static void main(String[] args) {
            Car car = Car.getInstance();
            Car car2 = Car.getInstance();
            if(car == car2) System.out.println("same car");
            car.run();
        }
        
    }

      

      运行结果:

    same car
    Car在雨中行驶

      这样就用单例完成了只能使用一辆车

      

      需求2:只能使用固定的2辆车

      使用多例来实现:

      Car类:

    import java.util.ArrayList;
    import java.util.List;
    
    
    public class Car {
        
        private String name;
        
        private Car(){}
        
        private static List<Car> cars = new ArrayList<Car>();
        
        public static List<Car> getInstance(){
            Car car1 = new Car();
            car1.setName("奔驰");
            Car car2 = new Car();
            car2.setName("宝马");
            cars.add(car1);
            cars.add(car2);
            return cars;
        }
        
        public void run(){
            System.out.println("Car在雨中行驶");
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
        
    }

      在这里把私有静态对象改为对象的私有静态集合,实现多例。

      

      Test类: 

    import java.util.List;
    
    
    public class Test {
        
        public static void main(String[] args) {
            List<Car> cars = Car.getInstance();
            for(int i=0; i<2; i++){
                System.out.println(cars.get(i).getName());
            }
        }
        
    }

      

      运行结果:

    奔驰
    宝马

      这样就完成了只能使用固定的两辆车的需求。

      数据库连接池也是使用多例的概念。

      

  • 相关阅读:
    开源项目
    [Accessibility] Missing contentDescription attribute on image [可取行]失踪contentDescription属性图像
    Android 布局 中实现适应屏幕大小及组件滚动
    EF 错误记录
    EasyUI 加载时需要显示和隐藏 panel(面板)内容破版问题
    IE 报表缩放后页面破版
    VS 2017 引入nuget 问题
    SSRS 报表显示页面 asp net session丢失或者找不到 asp net session has expired or could not be found()
    log4net 配置
    网站
  • 原文地址:https://www.cnblogs.com/xiaoguangit/p/5386042.html
Copyright © 2011-2022 走看看