1. 程式人生 > >設計模式之工廠模式和抽象工廠模式

設計模式之工廠模式和抽象工廠模式

工廠模式(Factory Pattern)的意義就跟它的名字一樣,在面向物件程式設計中,工廠通常是一個用來建立其他物件的物件。工廠模式根據不同的引數來實現不同的分配方案和建立物件。

在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立的物件。例如用工廠來建立 人 這個物件,如果我們需要一個男人物件,工廠就會為我們建立一個男人;如果我們需要一個女人,工廠就會為我們生產一個女人。

工廠模式通常分為:
普通工廠模式
多個工廠方法模式

靜態工廠方法模式

/*
 *工廠模式: 在建立物件時不會對客戶端暴露建立裸機,而是通過使用一個共同的介面來指向
 *新建立的物件。
 * 普通工廠模式:
 * 多個工廠方法模式:普通工廠模式中,如果傳遞的字串出錯,則不能正確建立物件,多個宮廣場方法模式是
 *                  提供多個工廠方法,分別建立物件
 * 靜態工廠方法模式:將多個催工廠方法模式裡的方法設定為靜態的,則測試或是使用時不需要建立例項,可以直接呼叫
 */



 interface Person{//兩個類的共同介面
	public void eat();
	public void sleep();
	public void beat();
}

 class Female implements Person{
	public void eat(){
		System.out.println("Female can eat");
	}
	public void sleep(){
		System.out.println("Female can sleep");
		
	}
	public void beat(){
		System.out.println("Female can beat");
	}
}
 class Male implements Person{
	public void eat(){
		System.out.println("Male can eat");
	}
	public void sleep(){
		System.out.println("Male can sleep");
	}
	public void beat(){
		System.out.println("Male can beat");
	}
}

// class HumanFactory{//建立普通工廠類
//	public Person createHuman(String gender){
//		if(gender.equals("male")){
//			return new Male();
//		}else if(gender.equals("female")){
//			return new Female();
//		}else {
//			System.out.println("請輸入正確的型別:");
//			return null;
//		}
//	}
//}
//
//public class Main {//普通工廠測試類
//	public static void main(String[] args){
//		HumanFactory factory=new HumanFactory();
//		Person male=factory.createHuman("male");
//		male.eat();
//		male.sleep();
//		male.beat();
//	}
//}
 
/*
 * 測試結果:
 * 	Male can eat
 	Male can sleep
	Male can beat 
 */

//  class HumanFactory{//建立多個工廠方法
//	 public Male createMale(){
//		 return new Male();
//	 }
//	 public Female createFemale(){
//		 return new Female();
//	 }
// }
//  public class Main{//多個工廠方法測試類
//	  public static void main(String args[]){
//		  HumanFactory factory = new HumanFactory();
//		  Person male= factory.createMale();
//		  male.eat();
//		  male.sleep();
//		  male.beat();
//	  }
//  }
//  /*
//   * 測試結果:
//   * Male can eat
//   	 Male can sleep
//  	 Male can beat 
//   */

 class HumanFactory{//靜態工廠方法
	 public static Male createMale(){
		 return new Male();
	 }
	 public static Female createFemale(){
		 return new Female();
	 }
 }
 public class Main{//靜態工廠方法模式測試
	 public static void main(String args[]){
		 Person male=HumanFactory.createMale();
		 male.eat();
		 male.sleep();
		 male.beat();
	 }
 }
 /*
  * 測試結果:
  * Male can eat
	Male can sleep
	Male can beat

  */
 

/*
 * 抽象工廠模式:
 * 工廠方法模式有一個問題就是,類的建立依賴工廠類,也就是說,如果想要拓展程式,
 * 必須對工廠類進行修改,這違背了閉包原則,所以,從設計角度考慮,有一定的問題,
 * 如何解決?就用到抽象工廠模式,建立多個工廠類,這樣一旦需要增加新的功能,
 * 直接增加新的工廠類就可以了,不需要修改之前的程式碼。
 */
interface Sender{
	public void Send();
}
 class MailSender implements Sender{

	@Override
	public void Send() {
		// TODO Auto-generated method stub
		System.out.println("It's a mailSender!");
	}
	
}
 class SmsSender implements Sender{

	@Override
	public void Send() {
		// TODO Auto-generated method stub
		System.out.println("It's a SmsSender");
	}
	 
 }
 
 interface Provider{
	 public Sender produce();
 }
 
class SendMailFactory implements Provider{

	@Override
	public Sender produce() {
		// TODO Auto-generated method stub
		return new MailSender();
	}
	 
 }
 class SendSmsFactory implements Provider{

	@Override
	public Sender produce() {
		// TODO Auto-generated method stub
		return new SmsSender();
	}
	 
 }

public class Main {
	public static void main(String args[]){
		Provider provider = new SendMailFactory();
		Sender sender = provider.produce();
		sender.Send();
	}

}

/*
 * 測試結果:It's a mailSender!
 */

Reference: https://blog.csdn.net/doymm2008/article/details/13288067

相關推薦

設計模式禪》-5.抽象工廠模式

抽象工廠模式 定義: 為建立一組相關或相互依賴的物件提供一個介面,而且無需指定它們的具體類 抽象產品類 public abstract class AbstractProductA { //每個產品的共有方法 public void shareMethod () {

設計模式(四):從“兵工廠”中探索簡單工廠工廠方法抽象工廠模式

前面陸陸續續的更新了三篇關於設計模式的部落格,是關於“策略模式”、“觀察者模式”、“裝飾者模式”的,今天這篇部落格就從“兵工廠”中來探索一下“工廠模式”(Factory Pattern)。“工廠模式”又可以分為“簡單工廠模式”(Simple Factory Pattern)、“工廠方法模式”(Factory

簡單工廠工廠方法抽象工廠的區別

工廠模式一般分為簡單工廠、工廠方法和抽象工廠三種,看了很多資料,好多講的都是雲裡霧裡的。要麼是概念太多,讓人看得一臉懵逼,要麼是舉得例子不太恰當,看了更讓人迷惑了。經過自己一番研究,通過一個簡單的例子,終於搞明白了它們之間的區別。 下面以生產寶馬、賓士汽車的工廠為例,講解它們之間的區別。 一、簡單工廠模式 建

java 設計模式01簡單工廠抽象工廠模式

總結一下: 簡單工廠:工廠根據條件去建立對應的具體實現物件,如果需要增加新的物件,就必須修改建立物件的介面,增加判斷條件,另外可能建立的物件下面的方法也可能有其他物件去實現相同的功能,造成混亂,比如,amd可以造cpu,也可以造網絡卡,不能建立了一個amd造cpu的

設計模式工廠模式抽象工廠模式

工廠模式(Factory Pattern)的意義就跟它的名字一樣,在面向物件程式設計中,工廠通常是一個用來建立其他物件的物件。工廠模式根據不同的引數來實現不同的分配方案和建立物件。在工廠模式中,我們在建立物件時不會對客戶端暴露建立邏輯,並且是通過使用一個共同的介面來指向新建立

Java設計模式工廠模式(二):抽象工廠模式

mar 模式 blank http left taxi ref www. app 2碳依5FVL冒傲3http://t.docin.com/etw488 am懦7鈉N山段9慌Q闌http://shequ.docin.com/ipu5657 iK1諾5N鍛認EUK剖嘲肆h

走進設計模式的世界4:我不是你,但是大家都把我當成你-工廠模式抽象工廠模式

工廠模式和抽象工廠模式: 工廠方法模式:定義了一個建立物件的介面,但由子類決定要例項化的類是哪一個。工廠方法讓類把例項化推遲到之類。 抽象工廠模式:提供一個介面,用於建立相關或以來物件的家族,而不需要明確指定具體類。 解釋:工廠方法使用繼承把物件的建立交給之類,子類實現工廠方法來建立

JAVA設計模式-工廠抽象工廠

摘抄至https://www.jianshu.com/p/3c3f6c95d7e7 本文講解GOF-23種設計模式其中的工廠方法模式和抽象工廠模式。 由於本人愛國情懷高漲,所以本文都以長安汽車作為示例,閱讀本文需要對長安汽車有一定了解。 長安悅翔V7:長安旗下一款價效比超高的緊湊型家用轎

設計模式簡單工廠工廠方法,抽象工廠模式

目錄 1.簡單工廠模式 1)最基本的實現         簡單工廠常用的方法就是一個工廠類,裡面包含很多if else結構 或者switch case 、如下程式碼ProductA和ProductB是分別的兩個不同的類: public cl

C++設計模式——工廠方法模式抽象工廠方法模式

一、工廠方法模式 上面的簡單工廠模式的缺點是當新增產品的時候就要去修改工廠的類,這就違反了開放封閉原則,(類、模組、函式)可以擴充套件,但是不可以修改,於是,就出現了工廠方法模式。所謂工廠方法模式,是指定義一個用於建立物件的介面,讓子類決定例項化哪一個類。 #d

設計模式】C#版三大工廠簡單工廠工廠方法與抽象工廠

引言         簡單工廠、工廠方法、抽象工廠都屬於設計模式中的建立型模式。其主要功能都是幫助我們把物件的例項化部分抽象取了出來,優化了系統的架構,並且增強了系統的擴充套件性。此篇部落格是筆者對學完這三種模式之後一個小小的總結 簡單工廠         簡單工廠模式的工

設計模式(c++)筆記二(AbstractFactory抽象工廠模式

一、簡介:     抽象工廠,提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。對於工廠方法來說,抽象工廠可實現一系列產品的生產,抽象工廠更注重產品的組合。 AbstractFactory 模式典型的結構圖為:  圖 2-1

設計模式:簡單工廠工廠方法、抽象工廠小結與區別

簡單工廠,工廠方法,抽象工廠都屬於設計模式中的建立型模式。其主要功能都是幫助我們把物件的例項化部分抽取了出來,優化了系統的架構,並且增強了系統的擴充套件性。 本文是本人對這三種模式學習後的一個小結以及對他們之間的區別的理解。 簡單工廠 簡單工廠模式的工廠類一般是使

c++ 設計模式9 (Abstract Factory 抽象工廠模式

構建 數據庫 strac 無需 div exec oracl dfa tle 5.2 抽象工廠模式 動機:在軟件系統中,經常面臨著“一系列相互依賴的對象”的創建工作;同時,由於需求的變化,往往存在更多系列對象的創建工作。 代碼示例: 實現利用數據庫的業務邏輯,支持多數據

設計模式系列---簡單工廠工廠方法、抽象工廠

nds top exc .cn 原則 而在 類圖 opp sop 前言,最近看spring的源代碼。發現之前沒有完全弄懂(工廠方法、抽象工廠)的區別。 spring中代理對象的產生,是通過代理工廠(工廠模式),首先spring中的代理是使用jdk或者cglib的代理,只要看

設計模式:學習筆記(6)——抽象工廠模式

方法 組成 pat AR ID 指定 ride 抽象工廠模式 nds 設計模式:學習筆記(6)——抽象工廠模式 快速開始 介紹   抽象工廠模式(Abstract Factory Pattern)是圍繞一個超級工廠創建其他工廠。該超級工廠又稱為其他工廠的工廠。這種類型的設計

23種設計模式(3):抽象工廠模式

如果 劃分 產品 升級版本 特點 client 形式 inter system 定義:為創建一組相關或相互依賴的對象提供一個接口,而且無需指定他們的具體類。 類型:創建類模式。 類圖: 抽象工廠模式與工廠方法模式的區別 抽象工廠模式是工廠方法模式的升級版本,他用來創

設計模式簡單工廠工廠方法、抽象工廠

夢想 吃水果 system 水果 com 種類 spa pub rri 簡單工廠模式 舉個例子: 小Z喜歡吃水果(Fruit)更喜歡喝果汁(juice),喜歡三類水果哈密瓜(Hami melon)、香蕉(banana)、桃子(peach)利用簡單的工廠實現小Z喝果汁夢想

簡單工廠模式工廠模式抽象工廠模式區別

下面例子中滑鼠,鍵盤,耳麥為產品,惠普,戴爾為工廠。 簡單工廠模式(面向單個產品,不符合開閉原則,要點:產品面向介面) 簡單工廠模式不是 23 種裡的一種,簡而言之,就是有一個專門生產某個產品的類。 比如下圖中的滑鼠工廠,專業生產滑鼠,給引數 0,生產戴爾滑鼠,給引數

簡單工廠工廠模式抽象工廠

  工廠可以分為三種:簡單工廠、工廠模式和抽象工廠,三者的關係是遞進的,以做包子為例,剛開始只有兩種包子:豆腐包和牛肉包,可以使用簡單工廠(或者叫靜態工廠)來解決,隨著包子種類的越來越多,發現沒新增一種包子,就需要改工廠類,擴充套件性太差,因此出現了工廠模式,提取一個公共的做包子介面,然後針對每一種包子建一個