【JAVA設計模式】- 工廠模式

工廠模式

實例化對象不使用new,用工廠方法實現
將選擇實現類,創建對象統一管理和控制。從而將調用者跟實現類解耦

三種模式

簡單工廠模式
工廠方法模式
抽象工廠模式

應用場景

  • JDK中的Calendar的getInstance()方法
  • JDBC中的Connection對象的獲取
  • Spring中IOC容器管理bean對象
  • 反射中Class對象的newInstance方法

小結

  1. 簡單工廠模式(靜態工廠模式)

雖然某種程度上不符合設計原則,但實際使用最多

  1. 工廠方法模式

不修改已知類的前提下,通過增加新的工廠類實現擴展

  1. 抽象工廠模式

不可以增加產品,可以增加產品族

實現之車工廠

簡單工廠模式
在這裏插入圖片描述
Car.java

package com.li.factory.simple;

public interface Car {
    void name();
}

WuLing.java

package com.li.factory.simple;

public class WuLing implements Car {
    @Override
    public void name() {
        System.out.println("五菱宏光!");
    }
}

Tesla.java

package com.li.factory.simple;

public class Tesla implements Car {
    @Override
    public void name() {
        System.out.println("特斯拉!");
    }
}

Dazhong.java

package com.li.factory.simple;

public class Dazhong implements Car {
    @Override
    public void name() {
        System.out.println("大衆!");
    }
}

CarFactory.java

package com.li.factory.simple;

//簡單工廠模式也稱靜態工廠模式
//增加一個新的產品,如果不修改代碼,做不到!
//開閉原則
public class CarFactory {

    //方法一
    public static Car getCar(String car){
        if(car.equals("五菱")){
            return new WuLing();
        }else if(car.equals("特斯拉")){
            return new Tesla();
        }else {
            return null;
        }
    }

    //方法二
    public static Car getWuling(){
        return new WuLing();
    }
    public static Car getTesla(){
        return new Tesla();
    }

}

測試
Consumer.java

package com.li.factory.simple;

public class Comsumer {
    public static void main(String[] args) {
        //接口,所有的實現類!工廠
        //Car car = new WuLing();
       // Car car2 = new Tesla();

        //使用工廠創建
        Car car = CarFactory.getCar("五菱");
        Car car2 = CarFactory.getCar("特斯拉");

        car.name();
        car2.name();

    }
}

控制檯
在這裏插入圖片描述
工廠方法模式
在這裏插入圖片描述
Car.java

package com.li.factory.simple;

public interface Car {
    void name();
}

WuLing.java

package com.li.factory.method;

public class WuLing implements Car {
    @Override
    public void name() {
        System.out.println("五菱宏光!");
    }
}

Tesla.java

package com.li.factory.method;

public class Tesla implements Car {
    @Override
    public void name() {
        System.out.println("特斯拉!");
    }
}

MoBai.java

package com.li.factory.method;

public class MoBai implements Car {
    @Override
    public void name() {
        System.out.println("摩拜單車!");
    }
}

CarFactory.java

package com.li.factory.method;

public interface CarFactory {
    Car getCar();
}

WuLingFactory.java

package com.li.factory.method;

public class WuLingFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new WuLing();
    }
}

TeslaFactory.java

package com.li.factory.method;

public class TeslaFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new Tesla();
    }
}

MoBaiFactory.java

package com.li.factory.method;

public class MoBaiFactory implements CarFactory {
    @Override
    public Car getCar() {
        return new MoBai();
    }
}

測試
Comsumer.java

package com.li.factory.method;


public class Comsumer {
    public static void main(String[] args) {
        Car car = new WuLingFactory().getCar();
        Car car2 = new TeslaFactory().getCar();

        car.name();
        car2.name();

        Car car3 = new MoBaiFactory().getCar();
        car3.name();

    }
    //結構複雜度:sample
    //代碼複雜度:sample
    //編程複雜度:sample
    //管理上的複雜度: sample

    //根據設計原則: 工廠方法模式!
    //根據實際業務: 簡單工廠模式!
}

控制檯
在這裏插入圖片描述

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