工廠模式

簡單工廠

簡單工廠
實現同一個接口,根據類型返回不同的對象值。

  1. 公共接口
public interface Toy {
	void	make();
}
  1. 實現接口
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傳錯了就會導致創建實例失敗,所以換一種方式

  1. 通過方法返回
public class ComplexToyFactory {

	static Toy method1(){
		return  new TankToy();
	}
	static Toy method2(){
		return new ComToy();
	}
}

通過不同的方法來設定返回類型。

  1. 通過抽象工廠類實現
abstract class AbstractFactory{
	Toy createToy();
}
class TankFactory extends AbstractFactory{
	@Override
	Toy createToy(){
	return new TankToy();
	}
}

兩種方案都可以實現

優點 :

  • 更符合開-閉原則。新增一種產品時,只需要增加相應的具體產品類和相應的工廠子類即可
  • 符合單一職責原則,每個具體工廠類只負責創建對應的產品
  • 不使用靜態工廠方法,可以形成基於繼承的等級結構

缺點:

  1. 每次新增產品和工廠都會創建類,增加系統開銷和開發成本。
  2. 一個具體工廠只能創建一種具體產品
  3. 增加了系統的抽象性和理解難度

總結:工廠模式可以說是簡單工廠模式的進一步抽象和拓展,在保留了簡單工廠的封裝優點的同時,讓擴展變得簡單,讓繼承變得可行,增加了多態性的體現

抽象工廠模型

引用地址

https://blog.csdn.net/qq564425/article/details/81082242

總結

按需要進行選擇,殺雞無用牛刀

發佈了8 篇原創文章 · 獲贊 0 · 訪問量 2039
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章