老闆派給李四的新任務-分土豆(抽象工廠)-設計模式篇
阿新 • • 發佈:2021-01-12
文章目錄
情景描述
繼上次的西紅柿業務老闆賺大發了之後,這次又給李四分發了一個新的任務,讓他接手土豆分配,由於土豆大小不同,價格也不同,李四此時想,經過上次的任務之後,不可能每次任務都重新建設一個新的工廠,那成本未免也太高了吧,那肯定不行。
這時李四突然想到,為啥不直接建一個抽象工廠呢,到時候有任務就可以直接進行分配,無非就是分車間或生產線而已。
一、明確土豆大小
/**
* 抽象土豆
* @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();
}
}
說明:
抽象工廠模式通常適的場景:
當需要建立的物件是一系列相互關聯或相互依賴的產品族時,如蔬菜工廠中的土豆,西紅柿,花椰菜等。
系統中有多個產品族,但每次只使用其中的某一族產品。如有人只喜歡穿某一個品牌的衣服和鞋。
系統中提供了產品的類庫,且所有產品的介面相同,客戶端不依賴產品例項的建立細節和內部結構。
如果產品族中只有一類產品,則不需要用到抽象工廠,只需要使用簡單工廠或工廠方法模式
結尾
李四考慮充分完善,給老闆節省了一大筆建設費用,老闆送給了李四一輛奧迪。