java工廠模型小結

    今天看了一篇關於工廠模型的博文。感覺不錯,可謂感觸頗深,對工廠模型的理解有進一步。下面我也簡單介紹一下工廠模型。

工廠模型主要分爲以下三種狀態:

    (1).簡單工廠模型(SimpleFactory)

    (2)工廠方法(Factory Method)

    (3)抽象工廠(Abstract Factory)

1.簡單工廠模型:其實就是定義一個接口,不同的產品類實現這個接口,最後工廠類通過傳入的不同參數去生產不同的產品。這裏的核心就是工廠類。下面介紹一個小例子。

假設我們要生產手機和電腦該怎麼辦呢?

首先先定義一個產品Product接口

public interface Product {
}

要生產手機和電腦就得分別定義電腦類和手機類。

電腦類:

public class Computer implements Product{
public Computer(){
System.out.println("電腦被製造出來了");
}
}

手機類:

public class Phone implements Product{
public Phone(){
System.out.println("電話被製造出來了");
}
}

這個時候呢就需要工廠出面了。根據傳入的參數不同,就代表了不同的需求,生產不同的產品。

簡單工廠類:

public class SimpleFactory {
public static Product Factory(String productName)throws Exception{
if("phone".equals(productName)){
return new Phone();
}else if("computer".equals(productName)){
return new Computer();
}else{
throw new Exception("沒有改產品");
}
}
}

下面我們寫個測試類,看一下運行結果:

測試類:

public class TestSimpleFactory {
public static void main(String[] args) {
try{
SimpleFactory.Factory("computer");
SimpleFactory.Factory("phone");
}catch(Exception e){
e.printStackTrace();
}
}
}

測試結果爲:

電腦被製造出來了
電話被製造出來了

這就是簡單工廠,但是簡單工廠尤其侷限性。簡單工廠的核心就是工廠類。一旦工廠類失效,則整個程序就會失效。所以就有了工廠方法和抽象工廠。下面先介紹一下工廠方法。

2工廠方法:簡單的說工廠方法就是給工廠定義了接口,通過多態的形式削弱了工廠的作用。

工廠的接口:定義了一個抽象方法。

public interface Factory {
public Product create();
}

和上面一樣也定義了一個產品接口:用於實現不同產品的生產。

產品接口:

public interface Product {
}

既然有了產品接口就生產不同的產品吧。

手機類:

public class Phone implements Product{
public Phone(){
System.out.println("電話被製造出來了");
}
}

電腦類:

public class Computer implements Product{
public Computer(){
System.out.println("電腦被製造出來了");
}
}

工廠方法的最主要特點就是定義了工廠接口,可以定義出專門生產電腦的工廠,也可以定義出專門生產手機的工廠等等。。。下面就定義工廠的實現類吧

電腦工廠類:專門生產電腦

public class ComputerFactory implements Factory {
public Product create() {
return new Computer();
}
}

手機工廠類:專門生產手機

public class PhoneFactory implements Factory{
public Product create() {
return new Phone();
}
}

下面我們寫一下工廠方法類:主要創建不同的工廠類,通過不同的工廠生產不同的產品。

工廠方法類:

public class FactoryMethod {
public static void main(String[] args) {
ComputerFactory cf = new ComputerFactory();
cf.create();
PhoneFactory pf = new PhoneFactory();
pf.create();
}
}

下面看一下運行結果:

電腦被製造出來了
電話被製造出來了

接下來介紹一下抽象工廠類。之後在總結一下三者的區別。

3抽象工廠類:就是現在的產品更加豐富,就像聯想電腦還有不同的型號,而不是單一的一種型號。這是對產品的接口就得更加細化。例如手機和電腦不在簡單的定義一個產品接口就可以,而是的對其分別定義不同的接口:下面我們就對其定義接口如下:

手機接口:

public interface Phone {
}

電腦接口:

public interface Computer {
}

有了接口我們就可以通過接口實現不同的產品類了:

手機產品類:

(1)聯想手機類:

public class LenovoPhone implements Phone{
public LenovoPhone(){
System.out.println("聯想手機被生產出來了");
}
}

(2)蘋果手機類:

public class ApplePhone implements Phone{
public ApplePhone(){
System.out.println("蘋果手機被生產出來了");
}
}

電腦產品類:

(1)聯想電腦類:

public class LenovoComputer implements Computer{
public LenovoComputer(){
System.out.println("聯想電腦被生產出來了");
}
}

 

(2)蘋果電腦類:

public class AppleComputer implements Computer{
public AppleComputer(){
System.out.println("蘋果電腦被生產出來了");
}
}

對了我們還需要創建一個工廠類接口:這個接口與前面的有所不同。請看

public interface Factory {
public Computer createComputer();
public Phone createPhone();
}

這個工廠接口不僅有電腦抽象方法還有手機的抽象方法。就像聯想工廠的創建不僅僅是爲了生產電腦,而是爲了能生產聯想的各種電子產品。下面定義聯想工廠實現類:

聯想工廠實現類:

public class LenovoFactory implements Factory{
public Phone createPhone() {
return new LenovoPhone();
}
public Computer createComputer() {
return new LenovoComputer();
}
}

蘋果工廠的實現類:

public class AppleFactory implements Factory{
public Computer createComputer() {
return new AppleComputer();
}
public Phone createPhone() {
return new ApplePhone();
}
}

下面寫個測類,看下結果。

測試類:定義不同的工廠對象,進行產品生產。

public class TestAbstractFactory {
public static void main(String[] args) {
LenovoFactory lf = new LenovoFactory();
lf.createComputer();
lf.createPhone();
AppleFactory af = new AppleFactory();
af.createComputer();
af.createPhone();
}

運行結果:

聯想電腦被生產出來了
聯想手機被生產出來了
蘋果電腦被生產出來了
蘋果手機被生產出來了

三種工廠方法已經介紹了,現在總結一下三個方法的區:

簡單工廠模型就是這個工廠什麼都能生產,工廠的作用比較大,一旦工廠出現問題則所有的產品都不能生產,在這裏工廠是當之無愧的核心所在。而工廠方法呢,則削弱了工廠的核心作用。給工廠定義了接口,可以實現不同工廠類,一旦那個工廠出現問題其他工廠照樣可以生產產品。但是唯一的不足是一個工廠只能生產單一的產品。而抽象工廠類實現一個工廠生產不同的產品。抽象工廠類和工廠方法各有各的特點,各有所長,使用與不同的生產模式。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章