工廠模式
Phone類:手機標準規範類(AbstractProduct)
abstract class Phone {
public abstract void make();
}
MiPhone類:製造小米手機
public class MiPhone extends Phone {
public void make() {
System.out.println("make xiaomi phone!");
}
}
IPhone類:製造蘋果手機
public class IPhone extends Phone {
public void make() {
System.out.println("make iphone!");
}
}
1. 簡單工廠模式
-
從簡單工廠中我們可以看出使用一個靜態方法將實例化的創建和使用分離開。我們只需要調用方法傳遞參數就可以獲得我們需要的對象。
-
缺點:我們不難看出如果我們想要增加一個形狀類的產品不僅需要添加一個導出類而且我們必須要修改靜態方法get,這樣就違背了開閉原則
方法一:傳入參數,用分支語句判斷
public class PhoneFactory {
public Phone getPhone(String phoneType) {
if(phoneType.equalsIgnoreCase("MiPhone")){
return new MiPhone();
}else if(phoneType.equalsIgnoreCase("iPhone")) {
return new IPhone();
}
return null;
}
}
方法二:提供不同類的靜態方法
public class PhoneFactory {
public static Phone getMiPhone(){
new MiPhone();
}
public static Phone getMiPhone(){
new IPhone();
}
}
2. 工廠方法模式(Factory Method)
- 工廠方法模式是產生一個抽象的工廠類,工廠類有一個生產的方法。
- 在調用是不需要關係對象怎麼實現,直接調用方法就可以了,因爲工廠類都實現了這個抽象工廠類
- **缺點:**每個類都要有自己的工廠,類數量增加
- **優點:**不需要修改代碼,隨意拓展
AbstractFactory類:生產不同產品的工廠的抽象類
public interface AbstractFactory {
Phone makePhone();
}
XiaoMiFactory類:生產小米手機的工廠
public class XiaoMiFactory implements AbstractFactory{
public Phone makePhone() {
return new MiPhone();
}
}
AppleFactory類:生產蘋果手機的工廠
public class AppleFactory implements AbstractFactory {
public Phone makePhone() {
return new IPhone();
}
}
----------------------------------------------------------分割線------------------------------------------------------------
抽象工廠模式(Abstract Factory)
- 工廠的工廠
手機抽象類(產品)
abstract class Phone {
public abstract void make();
}
電腦抽象類(產品)
abstract class Pc {
public abstract void run();
}
工廠抽象類(工廠)
abstract class AbstractFactory{
public abstract Phone getPhone();
public abstract Pc getPc();
}
小米手機,蘋果手機都實現手機類
public class MiPhone extends Phone {
public void make() {
System.out.println("make xiaomi phone!");
}
}
public class IPhone extends Phone {
public void make() {
System.out.println("make IPhone phone!");
}
}
小米電腦,蘋果電腦都實現電腦類
public class MiPc extends Pc {
public void run() {
System.out.println("run xiaomi pc!");
}
}
public class IPc extends Pc {
public void run() {
System.out.println("run IPhone pc!");
}
}
小米工廠實現工廠類,可以造手機和電腦
public class MiFactory extends AbstractFactory {
public Phone getPhone() {
new MiPhone();
}
public Pc getPc() {
new MiPc();
}
}
蘋果工廠實現工廠類,可以造手機和電腦
public class IPhoneFactory extends AbstractFactory {
public Phone getPhone() {
new IPhone();
}
public Pc getPc() {
new IPc();
}
}