# 工廠方法模式
工廠方法模式可以在不改變原來代碼的情況下引入新的產品,滿足開閉原則、迪米特法則、依賴倒置法則和里氏替換原則。
## 組成
1. 抽象工廠(Abstract Factory):提供了創建產品的接口,調用者通過它訪問具體工廠的工廠方法 newProduct() 來創建產品。
2. 具體工廠(ConcreteFactory):主要是實現抽象工廠中的抽象方法(newProduct),完成具體產品的創建。
3. 抽象產品(Product):定義了產品的規范,描述了產品的主要特性和功能。
4. 具體產品(ConcreteProduct):實現了抽象產品角色所定義的接口,由具體工廠來創建,**它同具體工廠之間一一對應**。
結構圖:
:-: 
【圖片來源:http://c.biancheng.net/view/1348.html】
實現:
~~~
package FactoryMethod;
public class AbstractFactoryTest {
public static void main(String[] args) {
try {
Product a;
AbstractFactory af;
af = (AbstractFactory) ReadXML1.getObject();
a = af.newProduct();
a.show();
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
//抽象產品:提供了產品的接口
interface Product {
public void show();
}
//具體產品1:實現抽象產品中的抽象方法
class ConcreteProduct1 implements Product {
public void show() {
System.out.println("具體產品1顯示...");
}
}
//具體產品2:實現抽象產品中的抽象方法
class ConcreteProduct2 implements Product {
public void show() {
System.out.println("具體產品2顯示...");
}
}
//抽象工廠:提供了廠品的生成方法
interface AbstractFactory {
public Product newProduct();
}
//具體工廠1:實現了廠品的生成方法
class ConcreteFactory1 implements AbstractFactory {
public Product newProduct() {
System.out.println("具體工廠1生成-->具體產品1...");
return new ConcreteProduct1();
}
}
//具體工廠2:實現了廠品的生成方法
class ConcreteFactory2 implements AbstractFactory {
public Product newProduct() {
System.out.println("具體工廠2生成-->具體產品2...");
return new ConcreteProduct2();
}
}
~~~
- 第一章 Java基礎
- ThreadLocal
- Java異常體系
- Java集合框架
- List接口及其實現類
- Queue接口及其實現類
- Set接口及其實現類
- Map接口及其實現類
- JDK1.8新特性
- Lambda表達式
- 常用函數式接口
- stream流
- 面試
- 第二章 Java虛擬機
- 第一節、運行時數據區
- 第二節、垃圾回收
- 第三節、類加載機制
- 第四節、類文件與字節碼指令
- 第五節、語法糖
- 第六節、運行期優化
- 面試常見問題
- 第三章 并發編程
- 第一節、Java中的線程
- 第二節、Java中的鎖
- 第三節、線程池
- 第四節、并發工具類
- AQS
- 第四章 網絡編程
- WebSocket協議
- Netty
- Netty入門
- Netty-自定義協議
- 面試題
- IO
- 網絡IO模型
- 第五章 操作系統
- IO
- 文件系統的相關概念
- Java幾種文件讀寫方式性能對比
- Socket
- 內存管理
- 進程、線程、協程
- IO模型的演化過程
- 第六章 計算機網絡
- 第七章 消息隊列
- RabbitMQ
- 第八章 開發框架
- Spring
- Spring事務
- Spring MVC
- Spring Boot
- Mybatis
- Mybatis-Plus
- Shiro
- 第九章 數據庫
- Mysql
- Mysql中的索引
- Mysql中的鎖
- 面試常見問題
- Mysql中的日志
- InnoDB存儲引擎
- 事務
- Redis
- redis的數據類型
- redis數據結構
- Redis主從復制
- 哨兵模式
- 面試題
- Spring Boot整合Lettuce+Redisson實現布隆過濾器
- 集群
- Redis網絡IO模型
- 第十章 設計模式
- 設計模式-七大原則
- 設計模式-單例模式
- 設計模式-備忘錄模式
- 設計模式-原型模式
- 設計模式-責任鏈模式
- 設計模式-過濾模式
- 設計模式-觀察者模式
- 設計模式-工廠方法模式
- 設計模式-抽象工廠模式
- 設計模式-代理模式
- 第十一章 后端開發常用工具、庫
- Docker
- Docker安裝Mysql
- 第十二章 中間件
- ZooKeeper