1. 程式人生 > 其它 >老闆派給李四的新任務-分土豆(抽象工廠)-設計模式篇

老闆派給李四的新任務-分土豆(抽象工廠)-設計模式篇

技術標籤:# 設計模式java設計模式

文章目錄


情景描述

繼上次的西紅柿業務老闆賺大發了之後,這次又給李四分發了一個新的任務,讓他接手土豆分配,由於土豆大小不同,價格也不同,李四此時想,經過上次的任務之後,不可能每次任務都重新建設一個新的工廠,那成本未免也太高了吧,那肯定不行。
這時李四突然想到,為啥不直接建一個抽象工廠呢,到時候有任務就可以直接進行分配,無非就是分車間或生產線而已。


一、明確土豆大小

/**
 * 抽象土豆
 * @author Penglei
 * @date  2020/12/26
 * @version 1.0.0
 * @updateVersion 1.0.0
 */
public interface Patato { /*土豆資訊*/ void tInfo(); } /** * 大土豆 * @author Penglei(紅蜘蛛) * @date 2020/12/26 * @version 1.0.0 * @updateVersion 1.0.0 */ public class BigPotato implements Patato { @Override public void tInfo() { System.out.println("我值5塊一斤"); } } public class
InPotato implements Patato { @Override public void tInfo() { System.out.println("我值3塊一斤"); } }

二、確定抽象工廠

public interface IFactory<T> {
    /*分類*/
    Object sorting(Class<T> t) throws ClassNotFoundException
    ,IllegalAccessException
    ,InstantiationException;
} /** * 工廠實現 * @author Penglei(紅蜘蛛) * @date 2020/12/27 * @version 1.0.0 * @updateVersion 1.0.0 */ public class PotatoFactory implements IFactory<Patato>{ @Override public Object sorting(Class t) throws ClassNotFoundException ,IllegalAccessException ,InstantiationException { return (Patato) Class.forName(t.getName()).newInstance(); } }

開始生產

public class Client {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        IFactory factory = new PotatoFactory();
        Patato p = (Patato) factory.sorting(BigPotato.class);
        p.tInfo();
    }
}

public class Client {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        IFactory factory = new PotatoFactory();
        Patato p = (Patato) factory.sorting(InPotato.class);
        p.tInfo();
    }
}

在這裡插入圖片描述

在這裡插入圖片描述

開始新生產線

public class BigTomato implements Tomato {
    @Override
    public void tInfo() {
        System.out.println("顏色比較紅");
    }
}


public class InTomato implements Tomato {
    @Override
    public void tInfo() {
        System.out.println("顏色比較淺");
    }
}

public class SmallTomato implements Tomato {
    @Override
    public void tInfo() {
        System.out.println("還沒成熟");
    }
}



public class Client {
    public static void main(String[] args) throws IllegalAccessException, InstantiationException, ClassNotFoundException {
        /*土豆大小*/
        IFactory factory = new PotatoFactory();
        Patato p = (Patato) factory.sorting(InPotato.class);
        p.tInfo();
        System.out.println("---------------------------------------");
        /*挑揀西紅柿顏色*/
        factory = new TomatoFactory1();
        Tomato tomato = (Tomato) factory.sorting(BigTomato.class);
        tomato.tInfo();
    }
}

在這裡插入圖片描述

說明:
抽象工廠模式通常適的場景:
當需要建立的物件是一系列相互關聯或相互依賴的產品族時,如蔬菜工廠中的土豆,西紅柿,花椰菜等。
系統中有多個產品族,但每次只使用其中的某一族產品。如有人只喜歡穿某一個品牌的衣服和鞋。
系統中提供了產品的類庫,且所有產品的介面相同,客戶端不依賴產品例項的建立細節和內部結構。

如果產品族中只有一類產品,則不需要用到抽象工廠,只需要使用簡單工廠或工廠方法模式

結尾

李四考慮充分完善,給老闆節省了一大筆建設費用,老闆送給了李四一輛奧迪。