設計模式之工廠模式

小姜戈發表於2020-12-12

把設計模式擼一遍,先從簡單的開始。工廠模式的三種寫法

 工廠模式分為 簡單工廠,工廠模式,抽象工廠


工廠模式:顧名思義,就是相當於工廠一樣,製造產品一樣,產品都有產品原型。而在程式就想當與是流水線一樣。
工廠都有幾個角色:
1:產品種類(汽水)
2:品牌(可口可樂,百事可樂,雪碧)
3:流水線
4:工人
這樣就可以大概把一個 工廠模型描繪出來了

什麼是工廠模式:
場景,一家工廠,有好幾家訂單,都是生成汽水的。同樣的流水線就可以生成出不同的品牌。那幹嘛還要把品牌的概念換成產品的概念。同一產品只是品牌不同(同樣的功能,只是 功能實現的差別,當程式有同樣功能但是這實現的方法或者使用上有差別的時候,就相當於汽水和百事可樂的概念)
為什麼要使用工廠模式:
通過上面的場景就知道,當有不同實現但功能作用是一樣的時候,方便得到這個品牌,也能節約成本
怎麼實現 如下:
簡單工廠

設計模式之工廠模式

Persi 和 coca-cola都是 汽水 soda 。當繼承了soda的時候 就可以被plant生產出來

程式碼如下

public interface Soda {
    public void goodFlavour();
}

public class Coco implements Soda {
    public void goodFlavour() {
        System.out.println("Coco");
    }
}

public class Pepsi implements Soda {
    public void goodFlavour() {
        System.out.println("Pepsi");
    }
}複製程式碼

工廠

public class Plant {

    public static Soda getPepsi(String type){
        if ("百事可樂".equals(type)){
            return new Pepsi();
        }else if ("可口可樂".equals(type)){
            return new Coco();
        }
        return new Pepsi();
    }

}複製程式碼

main

public class Main {

    public static void main(String[] age){
        Soda 百事可樂 = Plant.getPepsi("百事可樂");
        百事可樂.goodFlavour();
    }
}複製程式碼

當指定百事可樂的時候就可以生成出指定的白色可樂出來


工廠模式

設計模式之工廠模式

簡單工廠 缺點:當種類不斷增多的時候,程式碼不斷堆積也不好維護,就需要這種方式。

把工廠也抽象化,抽象工廠擁有生成抽象的產品能力。從而讓實現工廠類有有相匹配生成產品的能力

就好比IFactory是擁有生成汽水的證明,IFactoryPepsi需要有這個證明才能生成Pepsi

程式碼如下

工廠抽象類和對應的實現類

public interface IFactory {

    public Soda getSoda();
}
public class FactoryPepsi implements IFactory {
    public Soda getSoda() {
        return new Pepsi();
    }
}
public class FactoryCoco implements IFactory {
    public Soda getSoda() {
        return new Coco();
    }
}複製程式碼

抽象產品和實現類

public class Coco implements Soda {
    public void goodFlavour() {
        System.out.println("Coco");
    }
}
public class Pepsi implements Soda {
    public void goodFlavour() {
        System.out.println("Pepsi");
    }
}複製程式碼

main

public class Main {

    public static void main(String[] age){
        FactoryCoco factoryCoco = new FactoryCoco();
        FactoryPepsi factoryPepsi = new FactoryPepsi();
        Soda soda1 = factoryPepsi.getSoda();
        soda1.goodFlavour();
        Soda soda = factoryCoco.getSoda();
        soda.goodFlavour();
    }
}複製程式碼

抽象工廠:

設計模式之工廠模式

抽象工廠模式:更加把工廠概念抽象出來。工廠模式是把能生成產品工廠抽象出來,而抽象工廠更像是一個組合。比如工廠A能生產可樂也能生成怡寶。把工廠概念抽象,工廠模式是把生成功能抽象列出來。

程式碼如下:

工廠:

public interface Factory {

    public Water getWater();

    public Soda getSoda();

}
public class FactoryA implements Factory {
    public Water getWater() {
        return new WaHaHa();
    }

    public Soda getSoda() {
        return new Coco();
    }
}
public class FactoryB implements Factory {
    public Water getWater() {
        return new YiBao();
    }

    public Soda getSoda() {
        return new Pepsi();
    }
}複製程式碼

不同的產品:

public interface Soda {
    public void goodFlavour();
}
public interface Water {

    public void goodWater();
}
public class WaHaHa implements Water {
    public void goodWater() {
        System.out.println("WaHaHa");
    }
}
public class Coco implements Soda {
    public void goodFlavour() {
        System.out.println("Coco");
    }
}public class Pepsi implements Soda {
    public void goodFlavour() {
        System.out.println("Pepsi");
    }
}public class YiBao implements Water {
    public void goodWater() {
        System.out.println("YiBao");
    }
}複製程式碼

main

public class Main {

    public static void main(String[] age){
        FactoryA factoryA = new FactoryA();
        Soda soda = factoryA.getSoda();
        soda.goodFlavour();
        FactoryB factoryB = new FactoryB();
        Water water = factoryB.getWater();
        water.goodWater();
    }

}複製程式碼

介紹完成,想簡單點,抽象點。

因為是我自己看了之後,自己理解寫的。不一定對,大家還是找官方文件看。謝謝


相關文章