1. 程式人生 > 其它 >【已解決】ubuntu20.04安裝ROS Noetic詳細過程

【已解決】ubuntu20.04安裝ROS Noetic詳細過程

工廠模式的介紹

工廠模式(Factory Pattern)是 Java 中最常用的設計模式之一。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。之前我們建立類物件時, 都是使用new 物件的形式建立, 除new 物件方式以外, 工廠模式也可以建立物件.

耦合度: 類與類之間的關係,如果關係比較強,高耦合, 如果關係比較弱,低耦合

10個類:

10個測試類: 每個測試類都要建立這10個類的物件

以前: 在10個測  過new 來建立 10個測試類和這10個類都要關係起來 這樣耦合度比較高,而開發是要低耦合

工廠模式: 定義一個工廠類,專門用來建立這10個類的物件, 並提供獲取的方法,那這個時候測試類只需要跟工廠類關聯 降低低耦合

主要解決:主要解決介面選擇的問題。

何時使用:我們明確地計劃不同條件下建立不同例項時。

如何解決:讓其子類實現工廠介面,返回的也是一個抽象的產品。

關鍵程式碼:建立過程在其子類執行。

應用例項:1、您需要一輛汽車,可以直接從工廠裡面提貨,而不用去管這輛汽車是怎麼做出來的,以及這個汽車裡面的具體實現。 2、Hibernate 換資料庫只需換方言和驅動就可以。

優點:1、一個呼叫者想建立一個物件,只要知道其名稱就可以了。 2、擴充套件性高,如果想增加一個產品,只要擴充套件一個工廠類就可以。 3、遮蔽產品的具體實現,呼叫者只關心產品的介面。

缺點:每次增加一個產品時,都需要增加一個具體類和物件實現工廠,使得系統中類的個數成倍增加,在一定程度上增加了系統的複雜度,同時也增加了系統具體類的依賴。這並不是什麼好事。

使用場景:1、日誌記錄器:記錄可能記錄到本地硬碟、系統事件、遠端伺服器等,使用者可以選擇記錄日誌到什麼地方。 2、資料庫訪問,當用戶不知道最後系統採用哪一類資料庫,以及資料庫可能有變化時。 3、設計一個連線伺服器的框架,需要三個協議,"POP3"、"IMAP"、"HTTP",可以把這三個作為產品類,共同實現一個介面。

注意事項:作為一種建立類模式,在任何需要生成複雜物件的地方,都可以使用工廠方法模式。有一點需要注意的地方就是複雜物件適合使用工廠模式,而簡單物件,特別是只需要通過 new 就可以完成建立的物件,無需使用工廠模式。如果使用工廠模式,就需要引入一個工廠類,會增加系統的複雜度。

工廠模式的作用

將前端程式碼與要建立的物件分開,前端不需要直接建立物件,也就不需要關心建立物件時需要的資料。只需要通過工廠獲取物件即可。

  • 解決類與類之間的耦合問題

實現程式碼

1.編寫一個Car介面, 提供run方法

1 public interface Car {
2     public void run();
3 }

2.編寫一個Falali類實現Car介面,重寫run方法

1 public class FaLaLi implements Car {
2     @Override
3     public void run() {
4         System.out.println("法拉利正在以300邁的速度行駛...");
5     }
6 }

3.編寫一個Benchi類實現Car介面

1 public class BenChi implements Car {
2     @Override
3     public void run() {
4         System.out.println("賓士正在以200邁的速度行駛...");
5     }
6 }

4.提供一個CarFactory(汽車工廠),用於生產汽車物件

 1 public class CarFactory {
 2 
 3     // 提供一個建立汽車物件的方法
 4     public static Car getInstance(String carName){
 5         if ("FaLaLi".equalsIgnoreCase(carName)){
 6             return new FaLaLi();
 7         }else if ("BenChi".equalsIgnoreCase(carName)){
 8             return new BenChi();
 9         }else{
10             return null;
11         }
12     }
13 
14 }

5.定義CarFactoryTest測試汽車工廠

 1 public class Test1 {
 2     public static void main(String[] args) {
 3         // 以前:
 4         FaLaLi f = new FaLaLi();
 5         f.run();
 6 
 7         BenChi b = new BenChi();
 8         b.run();
 9 
10         System.out.println("==============================");
11 
12         // 工廠類
13         Car car1 = CarFactory.getInstance("falali");
14         car1.run();
15 
16         Car car2 = CarFactory.getInstance("benchi");
17         car2.run();
18     }
19 }