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

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

  举一个小例子:

 

  通常建立对象

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

  

  运行结果:

奔驰
宝马

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

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

  

posted on 2016-04-13 10:26  小光  阅读(2479)  评论(0编辑  收藏  举报