把設計模式擼一遍,先從簡單的開始。工廠模式的三種寫法
工廠模式分為 簡單工廠,工廠模式,抽象工廠
工廠模式:顧名思義,就是相當於工廠一樣,製造產品一樣,產品都有產品原型。而在程式就想當與是流水線一樣。
工廠都有幾個角色:
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();
}
}複製程式碼
介紹完成,想簡單點,抽象點。
因為是我自己看了之後,自己理解寫的。不一定對,大家還是找官方文件看。謝謝