1. 程式人生 > >JAVA 23種設計模式---工廠模式(簡單工廠模式)

JAVA 23種設計模式---工廠模式(簡單工廠模式)

寫在前面的話:

java常用的設計模式有23種,設計模式就是為了重用程式碼、解耦、讓程式碼更容易讓他人理解、保證程式碼可靠性

設計模式遵循的原則有6個:

1、開閉原則(Open Close Principle)

  對擴充套件開放,對修改關閉

2、里氏代換原則(Liskov Substitution Principle)

  只有當衍生類可以替換掉基類,軟體單位的功能不受到影響時,基類才能真正被複用,而衍生類也能夠在基類的基礎上增加新的行為。

3、依賴倒轉原則(Dependence Inversion Principle)

  這個是開閉原則的基礎,對介面程式設計

,依賴於抽象而不依賴於具體。

4、介面隔離原則(Interface Segregation Principle)

  使用多個隔離的藉口來降低耦合度。

5、迪米特法則(最少知道原則)(Demeter Principle)

  一個實體應當儘量少的與其他實體之間發生相互作用,使得系統功能模組相對獨立。

6、合成複用原則(Composite Reuse Principle)

  原則是儘量使用合成/聚合的方式,而不是使用繼承。繼承實際上破壞了類的封裝性,超類的方法可能會被子類修改

下面分享工廠模式(程式碼):

專案說明:

奧迪類:

public class AodiTrunk implements Trunk{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("奧迪汽車啟動!");
    }

}

寶馬類:

public class BwmTrunk implements Trunk{

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("寶馬卡車啟動!");
    }

}

介面類:

public interface Trunk {
    
    public void run();
}

顧客類:

public class Customer {
    
    public static void main(String[] args) {
        /**
         * 顧客只需要說明購買的車型即可,不必要知道車是怎麼造出來的
         */
        //TrunkFactory.produceTrunk("寶馬").run();
        //TrunkFactory.produceTrunk("奧迪").run();
        TrunkFactory.produceTrunk("大眾").run();
    }
}

工廠類:

public class TrunkFactory {
    /**
     * statis為靜態  可以不用通過建立物件直接呼叫
     * @param message
     * @return
     */
    public static Trunk produceTrunk(String message){
        //第一種方法
        if(message.equals("寶馬")){
            return new BwmTrunk();
        }else if(message.equals("奧迪")){
            return new AodiTrunk();
        }else{
            throw new RuntimeException("沒有您要的車型,有可能在火星上");
        }
        //第二種方法
        /*switch(message){
            case "寶馬":
                return new BwmTrunk();
            case "奧迪":
                return new AodiTrunk();
            default :
                throw new RuntimeException("沒有您要的車型,有可能在火星上");//自定義異常
        }*/
    }
}
執行結果: