Java 設計模式之工廠方法模式
阿新 • • 發佈:2018-12-07
本文為筆者學習《Head First設計模式》的筆記,並加入筆者自己的理解和歸納總結
工廠方法模式定義了一個建立物件的介面,但由子類決定要例項化的類是哪一個。工廠方法讓類把例項化推遲到子類。
結構圖
不同的車(Car
)擁有不同的輪胎(Tyre
),但輪胎由車自由選擇。
public abstract class Car { String name; Tyre tyre; public Car(String name) { this.name = name; tyre = createTyre(); } public abstract Tyre createTyre(); public void description() { System.out.println(name + " use " + tyre.getDescription()); } } public interface Tyre { String getDescription(); }
輪胎廠商有普利司通(Bridgestone
)、韓泰(Hankook
)、米其林(Michelin
)等。
public class Bridgestone implements Tyre { @Override public String getDescription() { return "Bridgestone"; } } public class Hankook implements Tyre { @Override public String getDescription() { return "Hankook"; } } public class Michelin implements Tyre { @Override public String getDescription() { return "Michelin"; } }
汽車型號有朗逸(Lavida
)、凌渡(Lamando
)、桑塔納(Santana
),在各個子類內部分別建立不同的輪胎。
public class Lavida extends Car { public Lavida() { super("Lavida"); } @Override public Tyre createTyre() { return new Bridgestone(); } } public class Lamando extends Car { public Lamando() { super("Lamando"); } @Override public Tyre createTyre() { return new Michelin(); } } public class Santana extends Car { public Santana() { super("Santana"); } @Override public Tyre createTyre() { return new Hankook(); } }
執行
public static void main(String[] args) {
Car car = new Lamando();
car.description();
car = new Lavida();
car.description();
car = new Santana();
car.description();
}
輸出
Lamando use Michelin
Lavida use Bridgestone
Santana use Hankook
相關文章
Java 設計模式之策略模式
Java 設計模式之觀察者模式
Java 設計模式之裝飾者模式
Java 設計模式之工廠方法模式
Java 設計模式之抽象工廠模式
Java 設計模式之單例模式