工廠模式&單例模式

核心代碼:(簡單工廠)

package com.factory;/*
 *@author:
 *@time
 */

import com.entity.Aodi;
import com.entity.Byd;
import com.entity.Car;

public class CarFactory {
    public Car getCar(String type){
        if("奧迪".equals(type)){
            return Aodi.getInstance();
        }
        else if("比亞迪".equals(type)){
            return Byd.getInstance();
        }
        else
            return null;
    }
}

把創建實例的工作交給工廠去完成,不再由客戶直接接觸實例,客戶不再需要車怎麼創建,只需要向工廠提出對某種車的需求(上述代碼中通過getCar()方法傳入對車的需求),具體的創建由工廠自己完成。如下:

public static void main(String[] args) {
        Car car=new CarFactory().getCar("比亞迪");
        car.run();
    }

方法工廠模式;



    /**
     * 工廠方法模式,實現了開閉原則,有利於功能的擴展
     */

    public static void test2(){
        Car car1=new BydFactory().getCar();
        Car car2=new BaomaFactory().getCar();
        Car car3=new AodiFactory().getCar();
        car1.run();
        car2.run();
        car3.run();
    }

    //工廠方法模式每個車的新建都在自己的工廠創建,有新車時只需添加相應的工廠,無需改動其他代碼
    import com.entity.Aodi;
    import com.entity.Car;

    public class AodiFactory {

        public Car getCar(){
            return Aodi.getInstance();
        }
    }

實體(單例模式):

餓漢式:

package com.entity;/*
 *@author:
 *@time
 */

public class Baoma implements Car{

    private Baoma(){}

    /**
     * 餓漢式單例模式
     */
    private static final Baoma instance=new Baoma();;
    
    public static Baoma getInstance(){
        return instance;
    }

    @Override
    public void run() {
        System.out.println("寶馬啓動了!");
    }

    @Override
    public void stop() {
        System.out.println("寶馬停車了!");
    }
}

雙重檢查實現

package com.entity;/*
 *@author:
 *@time
 */

public class Aodi implements Car{
    /**
     * 雙重檢查實現單例模式
    */
    private static volatile Aodi instance;
    private Aodi(){}
    public static Aodi getInstance(){
        if(instance==null){
            synchronized (Aodi.class){
                if(instance==null){
                    instance=new Aodi();
                    return instance;
                }
            }
        }
        return instance;
    }
    @Override
    public void run() {
        System.out.println("奧迪啓動了!");
    }

    @Override
    public void stop() {
        System.out.println("奧迪停車了!");

    }
}

靜態內部類實現:

package com.entity;/*
 *@author:
 *@time
 */

public class Byd implements Car {

    /**
     * 靜態內部類實現單例模式
     */
    private static class bydClass{
        private static Byd byd=new Byd();
    }


    public static Byd getInstance(){

        return bydClass.byd;
    }
    private Byd(){}
    @Override
    public void run() {
        System.out.println("比亞迪啓動了!");
    }

    @Override
    public void stop() {
        System.out.println("比亞迪停車了!");

    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章