java工廠模式(java工廠模式和抽象工廠模式的區別)

本文目錄一覽:

Java的工廠模式有哪一些,分別有什麼作用,一般用在哪些地方?

我簡單的說下,舉個例子,當我們的程序結構比較繁雜時,比如有100個類,而類中又有很多方法,這些方法之間都互相有依賴關係,也就是一個方法之間的某段邏輯處理需要用到另一個類中的代碼邏輯,這種時候對於整個程序而言是非常不利於開發的(我們需要考慮到很多類、方法之間的耦合問題),那麼就有一個概念了,也就是面對介面編程。通俗的說就是把類中的方法封裝起來,外部調用的人完全不需要考慮方法是如何實現的,但是這樣做也有一個不好的地方,我們的介面是不提供方法實現的,而需要在類中實現介面的方法。那麼問題產生了,我們在new介面對象的時候需要明確的知道他的實例類。

想像一下,如果程序在繼續龐大,介面非常多,介面實例類非常多,這樣又會產生我們之前的問題(我們需要考慮到很多類、方法之間的耦合問題)那麼這個時候就產生了一中設計思想,也就是工廠模式,這種模式的核心思想就是管理介面的實例對象,把介面和實例對象之間的關係封裝起來處理,外部需要用到某個介面的實例時,由工廠進行分配,而不需要關注具體是哪個實例。

如果你做到比較複雜的程序時你應該就能體會到了。

用java 編寫程序寫出簡單的工廠模式?

java中工廠模式分為:

簡單工廠模式(Simple Factory) 

2. 工廠方法模式(Factory Method) 

3. 抽象工廠模式(Abstract Factory)

每種方法的實現不同

提供一個簡單工廠模式的案例:

public abstract class Woman {

private String mySkill;

public String getMySkill() {

return mySkill;

}

public Woman() {

//System.out.println(“我是女人”);

}

public void setMySkill(String mySkill) {

this.mySkill = mySkill;

}

}

—————————-

public class LovelinessWoman extends Woman{

/*

* 可愛型女人

*/

  public LovelinessWoman()

  {

  String mySkill=”撒過嬌、出過軌、勾引領導下過水”;

      this.setMySkill(mySkill);

  }

}

—————————–

public class SteelinessWoman extends Woman{

/*

* 冷酷型女人

*/

  public SteelinessWoman()

  {

  String mySkill=”裝過神、弄過鬼,跟別人老公親過嘴”;

      this.setMySkill(mySkill);

  }

}

————————————–

public class WomanMakeFactory {

public Woman findWoman(int typeID) {

switch (typeID) {

case 1:

return new LovelinessWoman();

case 2:

return new VirtuousWoman();

case 3:

return new SteelinessWoman();

default:

return null;

}

}

public Woman findWoman(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

/*

* Type t = Type.GetType(“SimpleFactory.” + type);

* Woman wm =

* (Woman)Activator.CreateInstance(t); return wm;

*/

String string=”cn.jbit.design.simplefactory.”+type;

Class c = Class.forName(string);

Woman wm = (Woman) c.newInstance();

return wm;

}

}

————————-

調用

public class Test2 {

/**

* @param args

* @throws IllegalAccessException

* @throws InstantiationException

* @throws ClassNotFoundException

*/

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

Scanner input=new Scanner(System.in);

boolean sel=false;

do {

System.out.println(“請選擇你要找的女人的類型”);

System.out.println(“LovelinessWoman:可愛型女人 VirtuousWoman:善良型女人 SteelinessWoman:冷酷型女人”);

String typeid=input.next();

       WomanMakeFactory factory = new WomanMakeFactory();

       Woman wm=factory.findWoman(typeid);

       System.out.println(“該類型女人的新標準:”);

       System.out.println(wm.getMySkill());

     

       System.out.println(“還想看看別的類型嗎?y代表想,n代表再也不想了”);

     

       sel=input.next().equals(“y”);

} while (sel);

}

}

java中的工廠模式是什麼意思?

工廠模式簡單的講就是用工廠方法代替了new的操作,

在通俗點就是說,你new一個對象的時候直接調用工廠方法就行了,

在編程時,需要定義一個工廠介面,由不同的的子類去實現,再定一個具體工廠類,定義一個產生實例的方法,我們通過這個方法來獲得實例就行了,

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/280463.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-21 13:03
下一篇 2024-12-21 13:03

相關推薦

  • Python中new和init的區別

    new和init都是Python中常用的魔法方法,它們分別負責對象的創建和初始化,本文將從多個角度詳細闡述它們的區別。 一、創建對象 new方法是用來創建一個對象的,它是一個類級別…

    編程 2025-04-29
  • Sublime Test與Python的區別

    Sublime Text是一款流行的文本編輯器,而Python是一種廣泛使用的編程語言。雖然Sublime Text可以用於編寫Python代碼,但它們之間有很多不同之處。接下來從…

    編程 2025-04-29
  • Shell腳本與Python腳本的區別

    本文將從多個方面對Shell腳本與Python腳本的區別做詳細的闡述。 一、語法差異 Shell腳本和Python腳本的語法存在明顯差異。 Shell腳本是一種基於字元命令行的語言…

    編程 2025-04-29
  • Python中while語句和for語句的區別

    while語句和for語句是Python中兩種常見的循環語句,它們都可以用於重複執行一段代碼。然而,它們的語法和適用場景有所不同。本文將從多個方面詳細闡述Python中while語…

    編程 2025-04-29
  • Web程序和桌面程序的區別

    Web程序和桌面程序都是進行軟體開發的方式,但是它們之間存在很大的區別。本文將從多角度進行闡述。 一、運行方式 Web程序運行於互聯網上,用戶可以通過使用瀏覽器來訪問它。而桌面程序…

    編程 2025-04-29
  • TensorFlow和Python的區別

    TensorFlow和Python是現如今最受歡迎的機器學習平台和編程語言。雖然兩者都處於機器學習領域的主流陣營,但它們有很多區別。本文將從多個方面對TensorFlow和Pyth…

    編程 2025-04-28
  • 麥語言與Python的區別

    麥語言和Python都是非常受歡迎的編程語言。它們各自有自己的優缺點和適合的應用場景。本文將從語言特性、語法、生態系統等多個方面,對麥語言和Python進行詳細比較和闡述。 一、語…

    編程 2025-04-28
  • MySQL bigint與long的區別

    本文將從數據類型定義、存儲空間、數據範圍、計算效率、應用場景五個方面詳細闡述MySQL bigint與long的區別。 一、數據類型定義 bigint在MySQL中是一種有符號的整…

    編程 2025-04-28
  • Python與C語言的區別和聯繫

    Python與C語言是兩種常用的編程語言,雖然兩者都可以用於編寫軟體程序,但是它們之間有很多不同之處。本文將從多個方面對Python與C語言的區別和聯繫進行詳細的闡述。 一、語法特…

    編程 2025-04-28
  • 手機安全模式怎麼解除?

    安全模式是一種手機自身的保護模式,它會禁用第三方應用程序並使用僅限基本系統功能。但有時候,安全模式會使你無法使用手機上的一些重要功能。如果你想解除手機安全模式,可以嘗試以下方法: …

    編程 2025-04-28

發表回復

登錄後才能評論