工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種類型的設計模式屬於創建型模式,它提供了一種創建對象的最佳方式。
在工廠模式中,我們在創建對象時不會對客戶端暴露創建邏輯,並且是通過使用一個共同的接口來指向新創建的對象。
工廠方法模式角色:
- 抽象工廠(Abstract Factory)角色:是工廠方法模式的核心,與應用程序無關。任何在模式中創建的對象的工廠類必須實現這個接口。
- 具體工廠(Concrete Factory)角色 :這是實現抽象工廠接口的具體工廠類,包含與應用程序密切相關的邏輯,並且受到應用程序調用以創建某一種產品對象。
- 抽象產品(AbstractProduct)角色 :工廠方法模式所創建的對象的超類型,也就是產品對象的共同父類或共同擁有的接口。
- 具體產品(Concrete Product)角色 :這個角色實現了抽象產品角色所定義的接口。某具體產品有專門的具體工廠創建,它們之間往往一一對應
簡單工廠例子中的奶茶接口以及相關奶茶實現類不變。我們只需要增加一個工廠接口以及實現這個接口的工廠類即可。
例子代碼:
package com.example.factorypattern;
public interface MilkyTea {
/**
* 製造奶茶
*/
void makeMilkyTea();
}
package com.example.factorypattern;
public class BoBaMilkyTeam implements MilkyTea {
@Override
public void makeMilkyTea() {
System.out.println("製作波霸奶茶");
}
}
package com.example.factorypattern;
/**
* 紅豆奶茶
*/
public class OrmosiaMilkyTea implements MilkyTea {
@Override
public void makeMilkyTea() {
System.out.println("製作紅豆奶茶");
}
}
package com.example.factorypattern;
public class PearlMilkyTea implements MilkyTea {
@Override
public void makeMilkyTea() {
System.out.println("製作珍珠奶茶");
}
}
package com.example.factorypattern;
public interface Factory {
MilkyTea makeMilkyTea();
}
package com.example.factorypattern;
public class BoBaMilkyTeamFactory implements Factory{
@Override
public MilkyTea makeMilkyTea() {
return new BoBaMilkyTeam();
}
}
package com.example.factorypattern;
public class OrmosiaMilkyTeaFactory implements Factory {
@Override
public MilkyTea makeMilkyTea() {
return new OrmosiaMilkyTea();
}
}
package com.example.factorypattern;
public class PearlMilkyTeaFactory implements Factory {
@Override
public MilkyTea makeMilkyTea() {
return new PearlMilkyTea();
}
}
package com.example.factorypattern;
import com.example.simplefactory.SimpleFactory;
public class Test {
public static void main(String[] args) {
Factory boBaMilkyTeamFactory = new BoBaMilkyTeamFactory();
MilkyTea milkyTea = boBaMilkyTeamFactory.makeMilkyTea();
milkyTea.makeMilkyTea();
}
}