国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

《轉》java設計模式--工廠方法模式(Factory Method)

2019-11-14 23:44:59
字體:
來源:轉載
供稿:網友
《轉》java設計模式--工廠方法模式(Factory Method)

本文轉自:http://m.survivalescaperooms.com/archimedes/p/java-factory-method-pattern.html

工廠方法模式(別名:虛擬構造)

定義一個用于創建對象的接口,讓子類決定實例化哪一個類。Factory Method使一個類的實例化延遲到其子類。

概述

當系統準備為用戶提供某個類的子類的實例,又不想讓用戶代碼和該子類形成耦合時,就可以使用工廠方法模式來設計系統。工廠方法模式的關鍵是在一個接口或抽象類中定義一個抽象方法,該方法返回某個類的子類的實例,該抽象類或接口讓其子類或實現該接口的類通過重寫這個抽象方法返回某個子類的實例。

適用性

1.當一個類不知道它所必須創建的對象的類的時候。

2.當一個類希望由它的子類來指定它所創建的對象的時候。

3.當類將創建對象的職責委托給多個幫助子類中的某一個,并且你希望將哪一個幫助子類是代理者這一信息局部化的時候。

參與者

1.PRoduct 定義工廠方法所創建的對象的接口。

2.ConcreteProduct 實現Product接口。

3.Creator 聲明工廠方法,該方法返回一個Product類型的對象。 Creator也可以定義一個工廠方法的缺省實現,它返回一個缺省的ConcreteProduct對象。 可以調用工廠方法以創建一個Product對象。

4.ConcreteCreator 重定義工廠方法以返回一個ConcreteProduct實例。

工廠方法模式的結構與使用

模式的結構中包括四種角色:

•抽象產品(Product)

•具體產品(ConcreteProduct)

•構造者(Creator)

•具體構造者(ConcreteCreator)

模式的UML類圖

實戰部分

例1】:假設有三個筆芯,分別是紅筆芯、藍筆芯和黑筆芯。用戶希望通過圓珠筆來明確筆芯的顏色。

模式的結構的描述與使用

1.抽象產品(Product):PenCore.java

public abstract class PenCore{   String color;   public abstract void writeWord(String s);}

2.具體產品(ConcreteProduct)_1 :RedPenCore.java

public class RedPenCore extends PenCore{    RedPenCore(){      color="紅色";    }    public void writeWord(String s){       System.out.println("寫出"+color+"的字:"+s);    }}

具體產品(ConcreteProduct)_2 :BluePenCore.java

public class BluePenCore extends PenCore{    BluePenCore(){      color="藍色";    }    public void writeWord(String s){       System.out.println("寫出"+color+"的字:"+s);    }}

具體產品(ConcreteProduct)_3:BlackPenCore.java

public class BlackPenCore extends PenCore{    BlackPenCore(){      color="黑色";    }    public void writeWord(String s){       System.out.println("寫出"+color+"的字:"+s);    }}

3.構造者(Creator):BallPen.java

public abstract class BallPen{    BallPen(){       System.out.println("生產了一只裝有"+getPenCore().color+"筆芯的圓珠筆");    }    public abstract PenCore getPenCore(); //工廠方法}

4.具體構造者(ConcreteCreator):

RedBallPen.javapublic class RedBallPen extends BallPen{    public PenCore getPenCore(){       return new RedPenCore();    }}BlueBallPen.javapublic class BlueBallPen extends BallPen{    public PenCore getPenCore(){       return new BluePenCore();    }}BlackBallPen.javapublic class BlackBallPen extends BallPen{    public PenCore getPenCore(){       return new BlackPenCore();    }}

5.應用application.java

public class Application{    public static void main(String args[]){       PenCore penCore;       BallPen ballPen=new BlueBallPen();       penCore=ballPen.getPenCore();       penCore.writeWord("你好,很高興認識你");       ballPen=new RedBallPen();       penCore=ballPen.getPenCore();       penCore.writeWord("How are you");       ballPen=new BlackBallPen();       penCore=ballPen.getPenCore();       penCore.writeWord("nice to meet you");    }}
工廠方法模式的優點

•使用工廠方法可以讓用戶的代碼和某個特定類的子類的代碼解耦。

•工廠方法使用戶不必知道它所使用的對象是怎樣被創建的,只需知道該對象有哪些方法即可。

作者:archimedes出處:http://m.survivalescaperooms.com/archimedes/本文版權歸作者和博客園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 绿春县| 衡水市| 镶黄旗| 临澧县| 马尔康县| 威远县| 仁寿县| 洛扎县| 溧水县| 永福县| 中方县| 旬邑县| 巴马| 高碑店市| 左权县| 吕梁市| 西乡县| 阿城市| 四平市| 玉溪市| 稷山县| 县级市| 仙桃市| 南投市| 家居| 克什克腾旗| 桐乡市| 东丰县| 无锡市| 绥芬河市| 桑植县| 松溪县| 邵阳县| 德安县| 锦州市| 云安县| 顺平县| 余干县| 贺州市| 长宁县| 禹城市|