(二)設計模式——簡單工廠、工廠方法

一、簡單工廠模式

注意: 簡單工廠實際上不算設計模式中的一種
角色: 抽象產品角色、具體產品角色AB等、唯一的一個工廠(通過傳遞一個參數給工廠,返回具體的產品)
缺點: 只有一個工廠,其職責過重
在這裏插入圖片描述
實例: 電視

================================1、抽象產品=================================
// 抽象產品(可以是抽象類或者接口)
public abstract class TV {
    public abstract void play();
}
================================2、具體產品=================================
// 具體產品A
public class HaierTV extends TV {
    @Override
    public void play() {
        System.out.println("HaierTV is playing.");
    }
}
// 具體產品B
public class HisenseTV extends TV {
    @Override
    public void play() {
        System.out.println("HisenseTV is playing.");
    }
}
================================3、工廠=================================
// 唯一的工廠(根據參數,生產具體的產品)
public class TVFactory {
    public static TV productTV(String brand) {
        TV tv = null;
        switch (brand) {
            case "HaierTV":
                tv = new HaierTV();
                break;
            case "HisenseTV":
                tv = new HisenseTV();
                break;
        }
        return tv;
    }
}
================================客戶端類=================================
public class Main {
    public static void main(String[] args) {
        TV haierTV = TVFactory.productTV("HaierTV");
        haierTV.play();

        TV hisenseTV = TVFactory.productTV("HisenseTV");
        hisenseTV.play();
    }
}
>>>>>> HaierTV is playing.
>>>>>> HisenseTV is playing.

二、工廠方法

角色: 抽象產品角色、具體產品角色AB等、抽象工廠角色、具體工廠角色AB
區別於簡單工廠模式: 每個產品由該產品具體的工廠生產,避工廠職責過重

在這裏插入圖片描述

實例: 電視

================================1、抽象產品=================================
// 抽象產品(可以是抽象類或者接口)
public abstract class TV {
    public abstract void play();
}
================================2、具體產品=================================
// 具體產品A
public class HaierTV extends TV {
    @Override
    public void play() {
        System.out.println("HaierTV is playing.");
    }
}
// 具體產品B
public class HisenseTV extends TV {
    @Override
    public void play() {
        System.out.println("HisenseTV is playing.");
    }
}
================================3、抽象工廠=================================
// 抽象工廠
public abstract class TVFactory {
    public abstract TV productTV();
}
================================4、具體工廠=================================
// 具體工廠A
public class HaierTVFactory extends TVFactory {
    @Override
    public TV productTV() {
        return new HaierTV();
    }
}
// 具體工廠B
public class HisenseTVFactory extends TVFactory {
    @Override
    public TV productTV() {
        return new HisenseTV();
    }
}
================================客戶端類=================================
public class Main {
    public static void main(String[] args) {
        TVFactory haierTVFactory = new HaierTVFactory();
        TV haierTV = haierTVFactory.productTV();
        haierTV.play();

        TVFactory hisenseTVFactory = new HaierTVFactory();
        TV hisenseTV = hisenseTVFactory.productTV();
        hisenseTV.play();
    }
}
>>>>>> HaierTV is playing.
>>>>>> HisenseTV is playing.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章