美文网首页
工厂模式、单例和多例

工厂模式、单例和多例

作者: 区块文 | 来源:发表于2018-09-25 17:16 被阅读0次

参考如下

  通常建立对象

  新建一个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());

        }

    }

}

    运行结果:

奔驰

宝马

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

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

相关文章

网友评论

      本文标题:工厂模式、单例和多例

      本文链接:https://www.haomeiwen.com/subject/xxvloftx.html