1. 程式人生 > >Java 設計模式之工廠方法模式

Java 設計模式之工廠方法模式

本文為筆者學習《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 設計模式之單例模式