格力電器Java面試題_JAVA設計模式學習--工廠模式

今天談一下對工廠模式學習的總結。

看完視頻和文章之后要自己表述工廠模式,總是感覺無從說起,不知道怎么去定義工廠模式,反復看了幾遍之后終于理解一點。

自己理解工廠模式是通過這兩種模式的特點來理解和定義的,首先工廠模式有簡單工廠模式(不在23中設計模式中),工廠方法模式,抽象工廠模式,把三種模式對比來定義,根據不同模式的特點來記憶。

工廠模式是讓對象的創建和使用分離,每次使用時不用自己創建,把創建對象的過程交給工廠來完成。

定義(僅供參考 -- 理解后再形成自己的定義)

工廠方法模式定義:定義創建一個產品的工廠接口,將這一個產品的具體創建方法延遲到子類工廠實現,當需要使用這個產品時通過工廠獲取。

如果只有一類產品定義為簡單工廠模式了.

抽象工廠模式定義:定義創建一系列產品的工廠接口,將這一系列產品的具體創建過程延遲到子類工廠,使用時通過工廠就可以創建一系列的產品。

優缺點對比

工廠方法模式:

優點-可以進行不同產品的擴展,如定義一個水果類工廠就可以創建不同的水果,現在要擴展一個蔬菜類產品就再定義一個蔬菜類工廠。

缺點-單要創建一系列產品類的時候,會出現工廠泛濫,一個產品類就要創建一個產品接口,一個產品工廠,增加系統復雜性。比如我還要創建動物類,工具類等,

工廠將越來越多。

抽象工廠模式:

優點-可以創建一系列的產品,當增加新的產品系列可以不用修改代碼,如建了一個海爾系列的電器,再建一個格力系列的就可以只增加一個名稱。

缺點-當增加一個產品時要改動工廠所有的接口。如工廠創建的是洗衣機,電視,空調,現在要增加一個熱水器的產品,那么所有工廠子類都要增加。

模式結構對比

工廠模式的結構:

1.抽象產品:Product

2.抽象工廠:AbstractFactory

3.具體產品:Concrete Product

4.具體工廠:Conrete Factory

抽象工廠模式結構:

1.抽象產品系列:Product

2.抽象工廠:AbstractFactory

3.具體產品系列:Concrete Product

4.具體工廠:Conrete Factory

上代碼

工廠模式:

//產品

public interfaceProduct {public voidrun();

}//工廠

public interfaceFactory {publicProduct createFactory();

}//車類產品和工廠

public class Car implementsProduct {

@Overridepublic voidrun() {

System.out.println("駕車起飛。。。。。。");

}

}public class CarFactory implementsFactory {

@OverridepublicProduct createFactory() {return newCar();

}

}//食物類產品和工廠

public class Food implementsProduct{

@Overridepublic voidrun() {

System.out.println("eat.......");

}

}public class FoodFactory implementsFactory {

@OverridepublicProduct createFactory() {return newFood();

}

}//測試代碼

public classTestFactory {public static voidmain(String[] args) {

Factory f= newCarFactory();//Factory f = new FoodFactory();

Product p =f.createFactory();

p.run();

}

}

抽象工廠模式:

//產品系列

public interfaceTV {public voidshow();

}public interfaceWashing {public voidwash();

}public interfaceAir {public voidfever();

}//產品工廠

public interfaceAbstractFactory {publicTV crateTV();publicAir createAir();publicWashing createWashing();

}//HR系列產品

public class HRTelevision implementsTV{

@Overridepublic voidshow() {

System.out.println("海爾電視。。。。。");

}

}public class HRWarshing implementsWashing{

@Overridepublic voidwash() {

System.out.println("海爾洗衣機。。。");

}

}public class HRAir implementsAir{

@Overridepublic voidfever() {

System.out.println("海爾空調。。。");

}

}//HR系列產品工廠

public class HRFactory implementsAbstractFactory {

@OverridepublicTV crateTV() {return newHRTelevision();

}

@OverridepublicAir createAir() {return newHRAir();

}

@OverridepublicWashing createWashing() {return newHRWarshing();

}

}//GL系列產品

public class GLTelevision implementsTV{

@Overridepublic voidshow() {

System.out.println("格力電視。。。。");

}

}public class GLAir implementsAir {

@Overridepublic voidfever() {

System.out.println("格力空調。。。。。");

}

}public class GLWashing implementsWashing {

@Overridepublic voidwash() {

System.out.println("格力洗衣機。。。");

}

}//GL系列產品工廠

public class GLFactory implementsAbstractFactory {

@OverridepublicTV crateTV() {return newGLTelevision();

}

@OverridepublicAir createAir() {return newGLAir() ;

}

@OverridepublicWashing createWashing() {return newGLWashing();

}

}//測試代碼

public classTest {public static voidmain(String[] args) {//AbstractFactory f = new GLFactory();

AbstractFactory f = newHRFactory();

TV tv=f.crateTV();

Air air=f.createAir();

Washing warsh=f.createWashing();

tv.show();

air.fever();

warsh.wash();

}

}

測試代碼中只需要修改工廠類就可以實現生產不同的產品和不同的產品系列了, 當工廠可以通過配置文件來取的時候就不用更改任何代碼就實現了,實際生產中工廠都可以通過快速編碼來配置,很多成型的產品都是直接配置就能完成整個系統的初始化了。

這是自己理解并輸入的第二篇關于設計模式的筆記了,只是看一遍和根據自己的思路寫一遍真的是完全不同的感覺,如果只是看一遍過一天可能就忘記了, 如果自己思路清晰之后再自己設計下,根據思路寫一遍如果有問題又回去看看具體細節,一路記下來差不多就能搞定了,希望對路過的你有幫助。

后續繼續學習中。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541865.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541865.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541865.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

為什么玩我的世界老提示Java se錯誤_我的世界error錯誤信息 error could解決方法

我的世界是一個及其開放的沙盒游戲,而在這個游戲中有不少的問題,比如說遇到error該如何解決呢,看小編給大家帶來的我的世界error錯誤的解決方法,希望大家喜歡。error應用程序錯誤信息。包括“Error:Unable to access jarfile mcpc…

Tomcat 服務器只能存有一個正在運行的項目

即使新建了一個new project (在同一個工作空間),啟動Tomcat 還是會出現先前(工程名)一樣的問題/異常。 【原因】: 在底下Server 那里——Tomcat 7.X 底下會有很多工程名,它會紀錄!所…

Java Collections singletonMap()方法與示例

集合類singletonMap()方法 (Collections Class singletonMap() method) singletonMap() method is available in java.util package. singletonMap()方法在java.util包中可用。 singletonMap() method is used to return an immutable map (i.e. immutable map is a map that c…

java訪問登錄網頁_===java怎樣訪問需要登錄才能查看的網頁????急!!===...

java中可以用java.net包下的東西訪問網頁,但是有的網頁要求用戶先輸入用戶名和密碼才能查看,這些網頁java怎么訪問呢???注意:我說的要輸入用戶名和密碼不是瀏覽器彈出一個框的那種,而是象csdn這…

javascript OOP(下)(九)

一、javascript模擬重載 java中根據參數類型和數量的區別來實現重載&#xff0c;javascript弱類型&#xff0c;沒有直接的機制實現重載&#xff0c;javascript中參數類型不確定和參數個數任意&#xff0c;通過判斷實際傳入的參數的個數來實現重載。 <script> function Pe…

java calendar_Java Calendar getDisplayNames()方法與示例

java calendar日歷類的getDisplayNames()方法 (Calendar Class getDisplayNames() method) getDisplayNames() method is available in java.util package. getDisplayNames()方法在java.util包中可用。 getDisplayNames() method is used to return Map that contains all fie…

Linux如何查找大文件或目錄總結

轉載&#xff1a;http://www.cnblogs.com/kerrycode/p/4391859.html 在Windows系統中&#xff0c;我們可以使用TreeSize工具查找一些大文件或文件夾&#xff0c;非常的方便高效&#xff0c;在Linux系統中&#xff0c;如何去搜索一些比較大的文件呢&#xff1f;下面我整理了一下…

java編寫簡單郵件_Javamail,編寫簡單的程序發送郵件

代碼&#xff1a;package com.dai.mail; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.In…

java calendar_Java Calendar getLeastMaximum()方法與示例

java calendarCalendar類的getLeastMaximum()方法 (Calendar Class getLeastMaximum() method) getLeastMaximum() method is available in java.util package. getLeastMaximum()方法在java.util包中可用。 getLeastMaximum() method is used to get the least maximum value …

Shell 標準輸入、輸出和錯誤

防偽碼&#xff1a;桃花潭水深千尺&#xff0c;不及汪倫送我情。文件描述符&#xff08;fd&#xff09;&#xff1a;文件描述符是一個非負整數&#xff0c;在打開現存文件或新建文件時&#xff0c;內核會返回一個文件描述符&#xff0c;讀寫文件也需要使用文件描述符來訪問文件…

java需要會的工具_Java開發者必備的幾款工具,一定要掌握!

原標題&#xff1a;Java開發者必備的幾款工具&#xff0c;一定要掌握&#xff01;NotepadNotepad是用于編輯xml、腳本以及記筆記的最佳工具。這個工具的最好部分在于&#xff0c;你在Notepad上打開的任何一個文檔&#xff0c;在關閉后都會有一個殘留文檔&#xff0c;它有助于在…

java的equals方法_Java LocalDateTime類| 帶示例的equals()方法

java的equals方法LocalDateTime類equals()方法 (LocalDateTime Class equals() method) equals() method is available in java.time package. equals()方法在java.time包中可用。 equals() method is used to check whether this date-time and the given object are equal or…

portlet java_Java Portlet 規范概述

前言1、portlet是一種類似servlet的規范。2、servlet是web組件&#xff0c;portlet也是web組件。參考1、百度百科&#xff1a;portlethttp://baike.baidu.com/link?urlvMzVwpkf5WzOL23GLkgM4C5C7Sarqh1XXShS73L7k-MbGgM0ooZ4Dl2Efor3bb4tZmmLo6v-muG5UW7_CYMTUahttp://hintcnu…

Java LocalDate類| minusWeeks()方法與示例

LocalDate類minusWeeks()方法 (LocalDate Class minusWeeks() method) minusWeeks() method is available in java.time package. minusWeeks()方法在java.time包中可用。 minusWeeks() method is used to subtract the given weeks from this LocalDate and return the LocalD…

Android推薦的幾本書

2019獨角獸企業重金招聘Python工程師標準>>> 第一階段 <<第一行代碼Android>><<瘋狂Android>>第二階段 <<Android開發藝術探索>><<Android群英傳>>Android源碼 第三階段 <<Android開發藝術探索>><&…

java數據類型后綴_java基礎知識---基本數據類型

1)四種整數類型(byte、short、int、long)&#xff1a;byte&#xff1a;8 位&#xff0c;用于表示最小數據單位&#xff0c;如文件中數據&#xff0c;-128~127short&#xff1a;16 位&#xff0c;很少用&#xff0c;-32768 ~ 32767int&#xff1a;32 位、最常用&#xff0c;-2^3…

duration java_Java Duration類| minusMillis()方法與示例

duration java持續時間類minusMillis()方法 (Duration Class minusMillis() method) minusMillis() method is available in java.time package. minusMillis()方法在java.time包中可用。 minusMillis() method is used to subtract the given duration in milliseconds from t…

Thread 和 Runnable創建新線程的區別,Runnable可以共享線程類的實例屬性

Thread實現多線程&#xff1a; public class Thread2 extends Thread{ public int i; public void run(){ for(; i < 100 ;i) { System.out.println(getName() " " i); } } public static void main(String[] args){ for (int j 0; j < 100; j) { System…

java編程求最小公約數_java求最大公約數與最小公倍數

public class Gongyueshu{public static void main(String[] args){//從控制臺輸入兩個數據int m Integer.parseInt(args[0]);int n Integer.parseInt(args[1]);int y 1 ;int b 1;if (m > 0 && n >0){//先判定這兩個數是否為倍數關系&#xff0c;如果是則小數…

tdr上升時間什么設定_TDR的完整形式是什么?

tdr上升時間什么設定TDR&#xff1a;時域反射儀/車票寄存收據/定期存款收據 (TDR: Time Domain Reflectometer/ Ticket Deposit Receipt/ Term Deposit Receipt) 1)TDR&#xff1a;時域反射儀 (1) TDR: Time Domain Reflectometer) TDR is an abbreviation of the "Time D…