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());
            }
        }
        
    }

      

      运行结果:

    奔驰
    宝马

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

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

      

  • 相关阅读:
    shell中的$()、${}、$(())、(())
    阿拉伯数字转中文大写数字的JS
    Oracle创建新用户并将某一用户的表导进来
    便当
    登陆weblogic后页面控制台卡主
    weblogic启动错误 Unrecognized option: -jrockit
    Linux静默安装weblogic
    在vim下按ctrl+s后界面卡住
    使用SQL语句从数据库一个表中随机获取数据
    查询json数据结构的8种方式
  • 原文地址:https://www.cnblogs.com/xiaoguangit/p/5386042.html
Copyright © 2011-2022 走看看