學習:工廠模式

工廠模式

工廠模式(Factory Pattern)是 Java
中最常用的設計模式之一。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,並且是通過使用一個共同的接口來指向新創建的對象。

介紹

  • 定義一個創建對象的接口,讓其子類自己決定實例化哪一個工廠類,工廠模式使其創建過程延遲到子類進行。
  • 主要解決接口選擇的問題

實現

  • 1.創建一個接口
public interface FactoryTest {

    void test();

}
  • 2.創建實現接口的實體類。
public class ATest implements FactoryTest {
    @Override
    public void test() {
        System.out.println("ATest");
    }
}
public class BTest implements FactoryTest {
    @Override
    public void test() {
        System.out.println("BTest");
    }
}

public class CTest implements FactoryTest {
    @Override
    public void test() {
        System.out.println("CTest");
    }
}

  • 3.創建一個工廠,生成基於給定信息的實體類的對象。
public class ChooseFactory {

    //使用 getTest 方法獲取形狀類型的對象
    public FactoryTest getTest(String test){
        if(test == null){
            return null;
        }
        if(test.equals("ATest")){
            return new ATest();
        } else if(test.equals("BTest")){
            return new BTest();
        } else if(test.equals("CTest")){
            return new CTest();
        }
        return null;
    }
}
  • 4.使用該工廠,通過傳遞類型信息來獲取實體類的對象。
public class FactoryDemo {
    public static void main(String[] args) {
        ChooseFactory chooseFactory = new ChooseFactory();

        //獲取 Factory 的對象,並調用它的 getTest 方法
        FactoryTest testA = chooseFactory.getTest("ATest");

        //調用 FactoryTest 的 test方法
        testA.test();

        //獲取 Factory 的對象,並調用它的 getTest 方法
        FactoryTest testB = chooseFactory.getTest("BTest");

        //調用 FactoryTest 的 test方法
        testB.test();

        //獲取 Factory 的對象,並調用它的 getTest 方法
        FactoryTest testC = chooseFactory.getTest("CTest");

        //調用 FactoryTest 的 test方法
        testC.test();
    }
}

  • 5.打印結果
Connected to the target VM, address: '127.0.0.1:0', transport: 'socket'
OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended
ATest
BTest
CTest
Disconnected from the target VM, address: '127.0.0.1:0', transport: 'socket'
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章