簡單工廠方法模式--水果例項
本文參看了:http://www.cnblogs.com/seesea125/archive/2012/05/02/2478981.html轉載原創一半一半
一、簡單工廠和工廠方法定義:
簡單工廠模式是由一個工廠類根據引數來決定創立出哪一種產品類的例項。簡單工廠方法只有一個工廠方法。
工廠方法模式通過呼叫不同的工廠方法返回需要的類,而不是去例項化具體的類。 對例項建立進行了包裝。 工廠方法是一組方法, 他們針對不同條件返回不同的類例項,這些類一般有共同的父類。
工廠方法模式實施一種按需分配的策略, 即傳入引數進行選擇, 工廠方法根據引數進行選擇,返回具體的例項。
簡單工廠模式屬於類的建立型模式,又叫做靜態工廠方法模式。通過專門定義一個類來負責建立其他類的例項,被建立的例項通常都具有相同的父類。
http://blog.csdn.net/zhengzhb/article/details/7348707
工廠模式:
首先需要說一下工廠模式。工廠模式根據抽象程度的不同分為三種:簡單工廠模式(也叫靜態工廠模式)、本文所講述的工廠方法模式、以及抽象工廠模式。工廠模式是程式設計中經常用到的一種模式。它的主要優點有:
- 可以使程式碼結構清晰,有效地封裝變化。在程式設計中,產品類的例項化有時候是比較複雜和多變的,通過工廠模式,將產品的例項化封裝起來,使得呼叫者根本無需關心產品的例項化過程,只需依賴工廠即可得到自己想要的產品。
- 對呼叫者遮蔽具體的產品類。如果使用工廠模式,呼叫者只關心產品的介面就可以了,至於具體的實現,呼叫者根本無需關心。即使變更了具體的實現,對呼叫者來說沒有任何影響。
- 降低耦合度。產品類的例項化通常來說是很複雜的,它需要依賴很多的類,而這些類對於呼叫者來說根本無需知道,如果使用了工廠方法,我們需要做的僅僅是例項化好產品類,然後交給呼叫者使用。對呼叫者來說,產品所依賴的類都是透明的。
工廠方法模式:
通過工廠方法模式的類圖可以看到,工廠方法模式有四個要素:
- 工廠介面。工廠介面是工廠方法模式的核心,與呼叫者直接互動用來提供產品。在實際程式設計中,有時候也會使用一個抽象類來作為與呼叫者互動的介面,其本質上是一樣的。
- 工廠實現。在程式設計中,工廠實現決定如何例項化產品,是實現擴充套件的途徑,需要有多少種產品,就需要有多少個具體的工廠實現。
- 產品介面。產品介面的主要目的是定義產品的規範,所有的產品實現都必須遵循產品介面定義的規範。產品介面是呼叫者最為關心的,產品介面定義的優劣直接決定了呼叫者程式碼的穩定性。同樣,產品介面也可以用抽象類來代替,但要注意最好不要違反里氏替換原則。
- 產品實現。實現產品介面的具體類,決定了產品在客戶端中的具體行為。
前文提到的簡單工廠模式跟工廠方法模式極為相似,區別是:簡單工廠只有三個要素,他沒有工廠介面,並且得到產品的方法一般是靜態的。因為沒有工廠介面,所以在工廠實現的擴充套件性方面稍弱,可以算所工廠方法模式的簡化版,關於簡單工廠模式,在此一筆帶過。
適用場景:
不管是簡單工廠模式,工廠方法模式還是抽象工廠模式,他們具有類似的特性,所以他們的適用場景也是類似的。
首先,作為一種建立類模式,在任何需要生成複雜物件的地方,都可以使用工廠方法模式。有一點需要注意的地方就是複雜物件適合使用工廠模式,而簡單物件,特別是只需要通過new就可以完成建立的物件,無需使用工廠模式。如果使用工廠模式,就需要引入一個工廠類,會增加系統的複雜度。
其次,工廠模式是一種典型的解耦模式,迪米特法則在工廠模式中表現的尤為明顯。假如呼叫者自己組裝產品需要增加依賴關係時,可以考慮使用工廠模式。將會大大降低物件之間的耦合度。
再次,由於工廠模式是依靠抽象架構的,它把例項化產品的任務交由實現類完成,擴充套件性比較好。也就是說,當需要系統有比較好的擴充套件性時,可以考慮工廠模式,不同的產品用不同的實現工廠來組裝。
工廠類當中直接拿出相應的類,所以裡面的一部分就是透明的了。不需要再main當中直接操作相關的類了。
在企業開發過程當中,大家都直接從工廠裡面去拿出相應的類,就不用詳細瞭解相應的具體實現(new)
public abstract class Fruit { public abstract void get(); } public class Apple extends Fruit{ @Override public void get() { System.out.println("get apple"); } } public class Banana extends Fruit{ @Override public void get() { System.out.println("get Banana"); } }
public class FruitFactory {
public static Fruit getFruit(String type){
if(type.equalsIgnoreCase("apple")){
return new Apple();
}else if(type.equalsIgnoreCase("banana")){
return new Banana();
}else{
System.out.println("沒有找到相應的水果!");
return null;
}
}
}
import java.util.Scanner;
public class MainClass {
public static void main(String args[]){
String type;
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要得到的水果!");
type = sc.next();
try{
Fruit fruit = FruitFactory.getFruit(type);
fruit.get();
}catch(Exception e){
//e.printStackTrace();
//System.out.println("沒有找到水果");
}
}
}
import java.util.Scanner;
public class MainClass {
public static void main(String args[]){
String type;
Scanner sc = new Scanner(System.in);
System.out.println("請輸入你要得到的水果!");
type = sc.next();
try{
Fruit fruit = FruitFactory.getFruit(type);
fruit.get();
}catch(Exception e){
//e.printStackTrace();
//System.out.println("沒有找到水果");
}
}
}
相關推薦
簡單工廠方法模式--水果例項
本文參看了:http://www.cnblogs.com/seesea125/archive/2012/05/02/2478981.html轉載原創一半一半 一、簡單工廠和工廠方法定義: 簡單工廠模式是由一個工廠類根據引數來決定創立出哪一種產品類的例項。簡單工廠方法只有一
工廠方法模式--水果例項
public abstract class Fruit { public abstract void get(); } public class Apple extends Fruit{ @Override public void get() { Syste
工廠方法模式,抽象工廠模式,簡單例項分析
為了更好地理解這兩個模式,自己假設了如下場景,可能有些牽強,但應該還好。嘿嘿。 Acer,Lenovo兩家本本製造商,假設原來有一OEM兩個牌子的本本都做,這時,無論你想買那種牌子的,都可以直接向OEM購買。 可是後來該OEM商發現,如果一次同時做很多個牌子的本本,
【設計模式】簡單工廠模式和工廠方法模式
產生 for plm nbsp osc rbm play stp mage > 簡單工廠模式 顧名思義,此模式的設計結構是簡單的,核心是生產對象。 一般來說,運用工廠模式生產的對象應該是構建對象的過程比較復雜的,獲取構建對象的過程在日後可能發生變更的。 簡單工廠
Note8:C#設計模式—工廠方法模式(VS 簡單工廠模式 & 抽象工廠模式)
工廠方法模式 blog 抽象工廠 nbsp strong str cnblogs note 設計 一、資源說明 (1)本文有參考:http://www.cnblogs.com/zhili/p/FactoryMethod.html 待更!Note8:C#設計模式—工廠方法
iOS經常使用設計模式——工廠方法(簡單工廠模式,工廠方法模式, 抽象工廠模式)
csdn bst 設計 cto mod 基類 load 引用 角色 1. 簡單工廠模式 怎樣理解簡單工廠,工廠方法。 抽象工廠三種設計模式? 簡單工廠的生活場景。賣早點的小攤販。他給你提供包子,饅頭,地溝油烙的煎餅等,小販是一個工廠。它生產包子,饅頭,地溝油烙的
PHP面向對象-設計模式 單例模式 簡單工廠模式 工廠方法模式
單例 nbsp 私有化 {} 意義 pan php代碼 get fun 1.單例模式 單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例。即一個類只有一個對象實例。 要實現每一個類只有一個實例
【JS設計模式】溫習簡單工廠模式、工廠方法模式、抽象工廠模式概念
his mac script 開頭 str new 每一個 簡單工廠 pattern 註:空心箭頭表示的是種繼承關系,工廠類和產品類之間是一種依賴關系。是用箭頭加虛線表示的,以下的模型圖是用的實線是不正確(時間不夠用,在這裏我偷懶了。這個習慣不好,呵呵)簡單工廠模式(S
簡單工廠模式與工廠方法模式
interface ace nal tor sim str bre sys 對象比較 簡單工廠 定義:簡單工廠模式屬於創建型模式,其又被稱為靜態工廠方法模式,這是由一個工廠對象決定創建出哪一種產品類的實例 工廠類 public class CamputerFacto
Java設計模式學習記錄-簡單工廠模式、工廠方法模式
static ip ofa 關心 有一個 就是 con 14. 對比 div 前言 之前介紹了設計模式的原則和分類等概述。今天開啟設計模式的學習,首先要介紹的就是工廠模式,在介紹工廠模式前會先介紹一下簡單工廠模式,這樣由淺入深來介紹。 簡單工廠模式 做法:創建一個工
【設計模式】簡單工廠模式 |工廠方法模式 |抽象工廠模式
簡單工廠模式 由三種角色組成: 1、工廠類角色:是簡單工廠模式的核心,含有一定的商業邏輯和判斷邏輯。 2、抽象產品角色:一般是具體產品繼承的父類或者實現的介面。 3、具體產品角色:工廠類所建立的物件就是此角色的例項。 用一個單獨的類來做這個創在例項的過程,這就
工廠方法模式和簡單工廠模式的區別
簡單工廠模式 就我們的計算器例子來說,簡單工廠模式的思想就是,建立一個運算類,建立一個簡單工廠類。 運算類派生加法類、減法類、乘法類...... 簡單工廠類主要是根據傳入的符號字串,做相應的條件判斷來建立相應的運算物件。 當我們需要增加運算功能的時候,需要在運算類中派生相應的運運
Java設計模式(一)之建立型模式:工廠模式(簡單工廠模式+工廠方法模式)
在面向物件程式設計中, 最通常的方法是一個new操作符產生一個物件例項,new操作符就是用來構造物件例項的。但是在一些情況下, new操作符直接生成物件會帶來一些問題。舉例來說,許多型別物件的建立需要一系列的步驟:你可能需要計算或取得物件的初始位置;選擇生成哪個子物件例項;或在你生成你需要的物件
設計模式--靜態工廠、簡單工廠方法案例分析
簡介 1.學習本篇文章,瞭解簡單工廠設計模式的使用場景。 2.如何使用簡單工廠模式。 3.簡單工廠模式能解決什麼問題? 場景 現在有一家外賣小店需要從生產一份外賣開始進行考慮設計,當客戶在網上點出不同味道的菜時,外賣小店就將按照不同的訂單進行生產出菜品,然後進行打包、等待外賣
java常用設計模式--工廠方法模式簡單例子
package com.ruanyun;/** * @Auther: maxw * @Date: 2018/11/12 11:02 * @Description:工廠方法模式:有四個角色,抽象工廠模式,具體工廠模式,抽象產品模式,具體產品模式。不再是由一個工廠類去例項化具體的產品,而是由抽象工廠的子類去例項化
簡單工廠和工廠方法模式 -- 小案例
簡單工廠 1 public interface Fruit { 2 public void pro(); //生產水果 3 public void eat(); //吃水果 4 } 1 public class Apple implements Frui
簡單工廠模式 工廠方法模式 抽象工廠模式 最顯著的區別
1,簡單工廠模式:一個工廠生產一類產品,通過傳入引數,區分不同型號。這種模式的缺點是當新增新型號產品的時候,需要改動工廠程式碼。 2,工廠方法模式:一個工廠生產一種型號的產品,通過建立多個工廠,完成同一類產品不同型號的生產。這種模式的缺點是當需要新增新的產品組的時候,需要改動工廠程式碼。 3
設計模式(一)從“簡單工廠模式”升級為“工廠方法模式”
工廠模式的引入是為了管理物件的構造,對使用者遮蔽構造過程,使用者只從工廠拿取新物件。 簡單工廠模式 用一個場景介紹簡單工廠模式:某工廠想包攬所有產品生產,不僅提供很多不同型別的產品(iPhone 5,6,7...),還時不時生產新型別的產品(三星S8),而且客戶不關係產品
Java 工廠方法模式的簡單示例
通過 style java 實例 對象 clas implement 屬於 決定 工廠方法模式:也叫工廠模式,屬於類創建型模式,工廠父類(接口)負責定義產品對象的公共接口,而子類工廠則負責創建具體的產品對象。 目的:是為了把產品的實例化操作延遲到子類工廠中完成,通過工廠子類
設計模式學習總結(1)簡單工廠模式、工廠方法模式、抽象工廠模式
設計模式學習 做了幾個專案,發現設計模式的好處還是很多的,這東西就是隻有你真正用到的時候才知道他的好處,否則學了也不知道所以然。所以設計模式學習我認為可以在先進行幾個專案後,再來學習,這樣學習的效果和感受才是最好的。 這次是做一個學習的筆記,內容還是主要以我看的兩本書《大