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

工厂模式、单例和多例

作者: 区块文 | 来源:发表于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