工廠模式-簡單工廠,工廠方法,抽象工廠 Java

簡單工廠模式:

建立一個工廠類,對實現(xiàn)了同一接口的不同類進行實例的創(chuàng)建。
簡單工廠的實質(zhì)為:由一個工廠類根據(jù)傳入的參數(shù),動態(tài)的決定應(yīng)該創(chuàng)建哪個產(chǎn)品類的示例

public interface Animal {
    public void say();
}

public class Cat implements Animal{
    @Override
    public void say() {
        System.out.println("喵···");
    }
}

public class Dog implements Animal {
    @Override
    public void say() {
        System.out.println("汪汪");
    }
}

public class SampleFactory {
    public static Animal getAnimal(Class c){

        Animal animal = null;

        try {
            animal = (Animal) Class.forName(c.getName()).newInstance();
        }catch (Exception e){

            System.out.println("異常處理。。。");
        }

        return animal;
    }
}

public class Client {
    public static void main(String[] args) {
        Animal cat = SampleFactory.getAnimal(Cat.class);
        cat.say();

        Animal dog = SampleFactory.getAnimal(Dog.class);
        dog.say();
    }
}

運行結(jié)果
image.png

工廠方法模式:

工廠父類(接口)負責定義產(chǎn)品對象的公共接口,子類工廠負責創(chuàng)建具體的產(chǎn)品對象

public interface Car {
     void run();
}

public class Bike implements Car{
    @Override
    public void run() {
        System.out.println("我是自行車");
    }
}

public class Bus implements Car{

    @Override
    public void run() {
        System.out.println("我是公交車");
    }
}

public interface IFactory {
    Car getCar();
}

public class BikeFactory implements IFactory {
    @Override
    public Car getCar() {
        return new Bike();
    }
}

public class BusFactory implements IFactory{
    @Override
    public Car getCar() {
        return new Bus();
    }
}

public class Client {
    public static void main(String[] args) {
        IFactory factory = null;

        factory = new BikeFactory();
        Car bike = factory.getCar();
        bike.run();

        factory = new BusFactory();
        Car bus = factory.getCar();
        bus.run();
    }
}

運行結(jié)果

image.png

抽象工廠模式:

抽象工廠模式是工廠方法的升級版,用來創(chuàng)建一組相關(guān)或互相依賴的對象。
舉個例子:高配汽車使用A類引擎和A類空調(diào),低配汽車使用B類引擎和B類空調(diào),此時需要兩類工廠進行生產(chǎn)

public interface AirCondition {
}

public class AirConditionA implements AirCondition {
    public AirConditionA(){
        System.out.println("制造-->空調(diào)A");
    }

}

public class AirConditionB implements AirCondition {

    public AirConditionB(){
        System.out.println("制造-->空調(diào)B");
    }
}

public interface Engine {
}
public class EngineA implements Engine {
    public EngineA(){
        System.out.println("制造-->引擎A");
    }
}
public class EngineB implements Engine{
    public EngineB(){
        System.out.println("制造-->引擎B");
    }
}

public interface IFactory {
    //制造發(fā)動機
    public Engine createEngine();
    //制造空調(diào)
    public AirCondition createAirCondition();
}

public class FactoryA implements IFactory {

    @Override
    public Engine createEngine() {
        return new EngineA();
    }

    @Override
    public AirCondition createAirCondition() {
        return new AirConditionA();
    }
}

public class FactoryB implements IFactory{

    @Override
    public Engine createEngine() {
        return new EngineB();
    }

    @Override
    public AirCondition createAirCondition() {
        return new AirConditionB();
    }
}

public class Client {
    public static void main(String[] args) {
        FactoryA factoryA = new FactoryA();
        factoryA.createEngine();
        factoryA.createAirCondition();

        FactoryB factoryB = new FactoryB();
        factoryB.createEngine();
        factoryB.createAirCondition();
    }
}

運行結(jié)果

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容