簡單工廠
簡單工廠
實現同一個接口,根據類型返回不同的對象值。
- 公共接口
public interface Toy {
void make();
}
- 實現接口
package com.dawn.design.factory;
/**
* @Auther: dawn
* @Date: 2020/1/13 13:17
* @Description:
*/
public class TankToy implements Toy {
@Override
public void make() {
System.out.println("坦克玩具");
}
}
/**
* 工廠實現類
*/
class ToyFactory {
/**
* 根據不同的類型返回不同對象
* type 可以弄成常量
*/
static Toy produce(String type) {
if (type.equals("1")) {
return new TankToy();
}
return null;
}
public static void main(String[] args) {
Toy toy = ToyFactory.produce("1");
toy.make();
}
}
工廠方法模式
如果簡單工廠的type傳錯了就會導致創建實例失敗,所以換一種方式
- 通過方法返回
public class ComplexToyFactory {
static Toy method1(){
return new TankToy();
}
static Toy method2(){
return new ComToy();
}
}
通過不同的方法來設定返回類型。
- 通過抽象工廠類實現
abstract class AbstractFactory{
Toy createToy();
}
class TankFactory extends AbstractFactory{
@Override
Toy createToy(){
return new TankToy();
}
}
兩種方案都可以實現
優點 :
- 更符合開-閉原則。新增一種產品時,只需要增加相應的具體產品類和相應的工廠子類即可
- 符合單一職責原則,每個具體工廠類只負責創建對應的產品
- 不使用靜態工廠方法,可以形成基於繼承的等級結構
缺點:
- 每次新增產品和工廠都會創建類,增加系統開銷和開發成本。
- 一個具體工廠只能創建一種具體產品
- 增加了系統的抽象性和理解難度
總結:工廠模式可以說是簡單工廠模式的進一步抽象和拓展,在保留了簡單工廠的封裝優點的同時,讓擴展變得簡單,讓繼承變得可行,增加了多態性的體現
抽象工廠模型
引用地址
https://blog.csdn.net/qq564425/article/details/81082242
總結
按需要進行選擇,殺雞無用牛刀