工廠模式、單例和多例


  今天在公交車上看了馬士兵的工廠模式,在實體類中實現工廠模式,單例和多例。

  這些東西還是很有用的,而且沒用過多例,在博客記錄一下。

  舉一個小例子:

 

  通常建立對象

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

  

  運行結果:

奔馳
寶馬

  這樣就完成了只能使用固定的兩輛車的需求。

  數據庫連接池也是使用多例的概念。

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM