一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 23種設計模式(2) java工廠模式

23種設計模式(2) java工廠模式

2021-02-02 11:24阿木俠 Java教程

這篇文章主要為大家詳細介紹了23種設計模式之java工廠模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下

23種設計模式第二篇:java工廠模式

定義:

工廠模式是 Java 中最常用的設計模式之一。這種類型的設計模式屬于創建型模式,它提供了一種創建對象的最佳方式。

工廠模式主要是為創建對象提供過渡接口,以便將創建對象的具體過程屏蔽隔離起來,達到提高靈活性的目的。

工廠模式根據抽象程度的不同分為三種:

簡單工廠模式(也叫靜態工廠模式)
工廠方法模式(也叫多形性工廠)
抽象工廠模式(也叫工具箱)

簡單工廠模式

       實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類(這些產品類繼承自一個父類或接口)的實例。簡單工廠模式的創建目標,所有創建的對象都是充當這個角色的某個具體類的實例。 

工廠方法模式

       工廠方法是粒度很小的設計模式,因為模式的表現只是一個抽象的方法。 提前定義用于創建對象的接口,讓子類決定實例化具體的某一個類,即在工廠和產品中間增加接口,工廠不再負責產品的創建,由接口針對不同條件返回具體的類實例,由具體類實例去實現。 

抽象工廠模式

        當有多個抽象角色時使用的一種工廠模式。抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況下,創建多個產品對象。它有多個抽象產品類,每個抽象產品類可以派生出多個具體產品類,一個抽象工廠類,可以派生出多個具體工廠類,每個具體工廠類可以創建多個具體產品類的實例。 

工廠方法模式應該在實際中用的較多,我們以工廠方法模式舉例
(例子來源百度,幫助理解)

抽象的產品類:定義car  交通工具類

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

定義實際的產品類,總共定義兩個,bike 和bus 分別表示不同的交通工具類

?
1
2
3
4
5
6
7
8
9
10
11
12
public class Bike implements Car {
 @Override
 public void gotowork() {
  System.out.println("騎自行車去上班!");
 }
}
public class Bus implements Car {
 @Override
 public void gotowork() {
  System.out.println("坐公交車去上班!");
 }
}

定義抽象的工廠接口

?
1
2
3
public interface ICarFactory {
 Car getCar();
}

具體的工廠子類,分別為每個具體的產品類創建不同的工廠子類

?
1
2
3
4
5
6
7
8
9
10
11
12
public class BikeFactory implements ICarFactory {
 @Override
 public Car getCar() {
  return new Bike();
 }
}
public class BusFactory implements ICarFactory {
@Override
 public Car getCar() { 
  return new Bus();
 }
}

簡單的測試類,來驗證不同的工廠能夠產生不同的產品對象

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class TestFactory {
 @Test
 public void test() {
  ICarFactory factory = null;
  // bike
  factory = new BikeFactory();
  Car bike = factory.getCar();
  bike.gotowork();
 
  // bus
  factory = new BusFactory();
  Car bus = factory.getCar();
  bus.gotowork();
 }
}

工廠模式的優點:

        1、一個調用者想創建一個對象,只要知道其名稱就可以了,降低了耦合度。
        2、擴展性高,如果想增加一個產品,只要擴展一個工廠類就可以。使得代碼結構更加清晰。
        3、屏蔽產品的具體實現,調用者只關心產品的接口。 

工廠模式的缺點:

        每次增加一個產品時,都需要增加一個具體類和對象實現工廠(這里可以使用反射機制來避免),使得系統中類的個數成倍增加,在一定程度上增加了系統的復雜度,同時也增加了系統具體類的依賴。所以對于簡單對象來說,使用工廠模式反而增加了復雜度。 

工廠模式的適用場景:

        1、  一個對象擁有很多子類。
        2、創建某個對象時需要進行許多額外的操作。
        3、系統后期需要經常擴展,它把對象實例化的任務交由實現類完成,擴展性好。 

關于Java中的工廠模式的一些常見問題:

        利用父類的向下轉型(使用父類類型的引用指向子類的對象)是可以達到類似于工廠模式的效果的,那為什么還要用工廠模式呢?
        把指向子類對象的父類引用賦給子類引用叫做向下轉型,如:

?
1
2
3
Class Student extends Person 
Person s = new Student();
s = (Student)person ;

        使用向下轉型在客戶端實例化子類的時候,嚴重依賴具體的子類的名字。當我們需要更改子類的構造方法的時候,比如增加一個參數,或者更改了子類的類名,所有的new出來的子類都需要跟著更改。   
        但如果我們使用工廠模式,我們僅僅需要在工廠中修改一下new的代碼,其余項目中用到此實例的都會跟著改,而不需要我們手動去操作。(???) 

總結:

        無論是簡單工廠模式、工廠模式還是抽象工廠模式,它們本質上都是將不變的部分提取出來,將可變的部分留作接口,以達到最大程度上的復用。究竟用哪種設計模式更適合,這要根據具體的業務需求來決定。

轉自:java知音

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 色天天综合网色鬼综合 | 日产乱码卡1卡2卡三卡四在线 | 亚洲国内精品 | 欧美一级视 | 搓光美女衣 | 好逼天天有 | 91插视频| 92在线视频 | 亚洲国产精品久久精品怡红院 | juy_661佐佐木明希在线播放 | 色婷婷在线播放 | 免费高清视频在线观看 | 色婷婷婷丁香亚洲综合不卡 | 国产亚洲精品综合在线网址 | 天天躁夜夜躁很很躁 | 俄罗斯引擎首页进入 | 色综合伊人色综合网亚洲欧洲 | 甜蜜惩罚小说 | 免费观看国产视频 | 午夜免费小视频 | 9久热这里只有精品免费 | 韩国三级在线 | 亚洲国产精品综合一区在线 | 性xxxxbbbbxxxx中国 | japanesemoms乱熟 | 青丝视频免费版在线看 | 国产精品怡红院永久免费 | 朝鲜美女免费一级毛片 | 99久久国产亚洲综合精品 | 久久精品亚洲国产AV涩情 | 日本漫画工囗全彩番在线 | 亚洲ⅴa偷拍在线影院 | 免费永久视频 | 欧美精品亚洲精品日韩1818 | 调教催眠改造np总攻 | 精品国产欧美精品v | 国产在线看片网站 | 67194久久| 欧美精品99久久久久久人 | 99r视频在线观看 | 男人狂躁女人下面狂叫图片 |