锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲日韩中文字幕无码一区,亚洲综合色7777情网站777,伊人久久大香线蕉亚洲五月天http://www.tkk7.com/jesson2005/category/21662.html鍚鵑潪鏂囦漢錛屼箖甯?jìng)浜曚竴淇椾漢涔燂紝璇葷?rùn)惧嵎涔﹀Q岃法姹熸渤鍗冮噷錛屾晠鐢沖煄涓娓革紱 涓涓ゆ淮杈涢吀錛屼笁鍥涘勾瀛︿笟錛屼簲鍏偣綺楀ⅷ錛屼竷鍏瑪涔板崠錛屼節(jié)鍗侀亾浜烘儏銆?/description>zh-cnThu, 19 Apr 2007 13:18:06 GMTThu, 19 Apr 2007 13:18:06 GMT60Design Pattern: Prototype 妯″紡http://www.tkk7.com/jesson2005/articles/111168.html寮犻噾楣?/dc:creator>寮犻噾楣?/author>Tue, 17 Apr 2007 02:35:00 GMThttp://www.tkk7.com/jesson2005/articles/111168.htmlhttp://www.tkk7.com/jesson2005/comments/111168.htmlhttp://www.tkk7.com/jesson2005/articles/111168.html#Feedback0http://www.tkk7.com/jesson2005/comments/commentRss/111168.htmlhttp://www.tkk7.com/jesson2005/services/trackbacks/111168.html
Prototype妯″紡鐨勪綔鐢ㄦ湁浜涢浼間笂闈㈢殑鎻忚堪錛屾?zhèn)ㄥ湪鐖稒鍨鍒ヤ腑瀹毦煩涓鍊媍lone()鏂規(guī)硶錛岃屽湪瀛愰鍒ヤ腑閲嶆柊瀹氱京瀹冿紝鐣跺鎴剁灝嶆柤鎵鐢㈢敓鐨勭墿浠舵湁鑸堣叮涓︽兂鍔犱互鍒╃敤錛岃屾?zhèn)ㄥ張涓嶆兂鐮村鍘熶締鐨勭墿錃g錛屾?zhèn)ㄥ彲浠ョ敘鐢熶竴鍊嬬墿浠剁殑瑜囨湰緄﹀畠銆?br>
Prototype鍏鋒湁灞曠ず鐨勬剰鍛籌紝灝卞儚鏄睍瑕芥渻涓婄殑鍘熷瀷杌婃錛岀暥鎮(zhèn)ㄥ皪鏌愬嬭粖嬈炬劅鑸堣叮鏅傦紝鎮(zhèn)ㄥ彲浠ヨ臣璨風(fēng)浉鍚屾紺虹殑杌婏紝鑰屼笉鏄粖灞曚笂鐨勮粖銆?br>
鍦ㄨ粺楂旇ō璦堜笂鐨勪緥瀛愭渻鏇存竻妤氱殑瑾槑鐐轟綍瑕侀茶鐗╀歡瑜囪=錛屽亣璦?zhèn)ㄨ瑷a堜竴鍊嬪鍏цō璦堣粺楂旓紝杌熼珨涓湁涓鍊嬪睍紺哄鍏風(fēng)殑宸ュ叿鍒楋紝鎮(zhèn)ㄥ彧瑕侀粸閬稿伐鍏峰垪灝卞彲浠ョ敘鐢熶竴鍊嬪鍏瘋鏈紝渚嬪涓寮?jí)|瀛愭垨妗屽瓙錛屾?zhèn)ㄥ彲浠ユ嫋鏇抽欏嬭瑁界殑鐗╀歡鑷寵ō璦堝湒涓紝闅ㄦ檪鏀硅畩瀹冪殑浣嶇疆銆侀鑹茬瓑絳夛紝鐣舵?zhèn)ㄦ敼璁姯a▓鍦栦腑鐨勭墿浠舵檪錛屽伐鍏峰垪涓婄殑鍘熷瀷宸ュ叿鍒楁槸涓嶆渻璺熻憲涓璧鋒敼璁婄殑錛岄欏嬮亾鐞嗘槸鐒¢渶瑙i噵鐨勩?br>
涓嬮潰鐨?UML 欏炲垾鍦栬〃紺轟簡(jiǎn)涓婅堪鐨勭啊鍠蹇碉細(xì)
Prototype

Prototype妯″紡鐨勯噸榛炲湪鏂糲lone()錛屽畠璨犺鉑瑜囪=鐗╀歡鏈韓涓﹀偝鍥烇紝浣嗛欏媍lone()鏈韓鍦ㄥ浣滀笂瀛樺湪涓浜涘洶闆o紝灝ゅ叾鏄暥鐗╀歡鏈韓鍙堢辜鎵垮彟涓鍊嬬墿浠舵檪錛屽浣曠⒑淇濊瑁界殑鐗╀歡瀹屾暣鐒¤錛屽湪涓嶅悓鐨勭▼寮忚獮璦涓湁涓嶅悓鐨勪綔娉曘?br>
鍦↗ava涓殑浣滄硶鏄忛亷瀵︿綔涓鍊婥loneable浠嬮潰錛屽畠鍙槸涓鍊嬭伈鏄庣殑浠嬮潰錛屼甫鐒¤瀹氫換浣曞浣滅殑鏂規(guī)硶錛屾?zhèn)ㄧ殑鐩殑鏄敼瀵玂bject鐨刢lone ()鏂規(guī)硶錛屼嬌鍏跺叿鍌欐湁瑜囪=鐗╀歡鐨勫姛鑳斤紝閫欏嬫柟闈㈠緩璀版?zhèn)ㄥ弮鑰冿細(xì)How to avoid traps and correctly override methods from java.lang.Object銆?br>
鐢ㄤ竴鍊嬬啊鍠殑渚嬪瓙渚嗗浣滀笂鍦栦腑鐨勭祼妲嬶紝閫欏嬩緥瀛愬埄鐢ㄤ簡(jiǎn)Java瑾炶█鏈韓鐨刢lone鐗規(guī)э細(xì)
  • AbstractFurniture.java
public abstract class AbstractFurniture 
implements Cloneable {
public abstract void draw();

// 鍦―esign Pattern涓婏紝浠ヤ笅鐨刢lone鏄娊璞℃湭瀵︿綔鐨?br> // 瀵﹂殯涓婂湪Java涓璫lass閮界辜鎵胯嚜Object
// 鎵浠ュ湪閫欓倞鎴戝戠洿鎺ラ噸鏂板畾緹ヽlone()
// 閫欐槸鐐轟簡(jiǎn)絎﹀悎Java鐝捐鐨刢lone姍熷埗
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

CircleTable鑸嘢quareTable綣兼壙浜?jiǎn)AbstractFurniture錛屼甫瀵︿綔clone鏂規(guī)硶錛岀敤鏂煎偝鍥炴湰韜殑瑜囪=鍝侊細(xì)
  • CircleTable.java
import java.awt.*;

public class CircleTable extends AbstractFurniture {
protected Point center;

public void setCenter(Point center) {
this.center = center;
}

protected Object clone ()
throws CloneNotSupportedException {
Object o = super.clone();
if(this.center != null) {
((CircleTable) o).center = (Point) center.clone();
}

return o;
}

public void draw() {
System.out.println("\t鍦撴\t涓績(jī)錛?" + center.getX()
+ ", " + center.getY()+ ")");
}
}

  • SquareTable.java
import java.awt.*;

public class SquareTable extends AbstractFurniture {
protected Rectangle rectangle;

public void setRectangle(Rectangle rectangle) {
this.rectangle = rectangle;
}

protected Object clone ()
throws CloneNotSupportedException {
Object o = super.clone();
if(this.rectangle != null) {
((SquareTable) o).rectangle = (Rectangle) rectangle.clone();
}

return o;
}

public void draw() {
System.out.print("\t鏂規(guī)\t浣嶇疆錛?" + rectangle.getX()
+ ", " + rectangle.getY()+ ")");
System.out.println(" / 瀵珮錛?" +
rectangle.getWidth()
+ ", " + rectangle.getHeight()+ ")");
}
}

House鏄嬭櫅鎿殑鎴垮眿鐗╀歡錛屽緸Prototype瑜囪=鍑轟締鐨勭墿浠跺姞鍏ヨ嚦House涓細(xì)
  • House.java
import java.util.*;

public class House {
private Vector vector;

public House() {
vector = new Vector();
}

public void addFurniture(AbstractFurniture furniture) {
vector.addElement(furniture);

System.out.println("鐝炬湁瀹跺叿....");

Enumeration enumeration = vector.elements();
while(enumeration.hasMoreElements()) {
AbstractFurniture f =
(AbstractFurniture) enumeration.nextElement();
f.draw();
}
System.out.println();
}
}

鍐嶄締鏄噳鐢ㄧ▼寮忔湰韜細(xì)
  • Application.java
import java.awt.*;

public class Application {
private AbstractFurniture circleTablePrototype;

public void setCircleTablePrototype(
AbstractFurniture circleTablePrototype) {
this.circleTablePrototype = circleTablePrototype;
}

public void runAppExample() throws Exception {
House house = new House();
CircleTable circleTable = null;

// 寰炲伐鍏峰垪閬告搰涓鍊嬪鍏峰姞鍏ユ埧瀛愪腑
circleTable =
(CircleTable) circleTablePrototype.clone();
circleTable.setCenter(new Point(10, 10));
house.addFurniture(circleTable);

// 寰炲伐鍏峰垪閬告搰涓鍊嬪鍏峰姞鍏ユ埧瀛愪腑
circleTable =
(CircleTable) circleTablePrototype.clone();
circleTable.setCenter(new Point(20, 30));
house.addFurniture(circleTable);
}

public static void main(String[] args) throws Exception {
Application application = new Application();
application.setCircleTablePrototype(
new CircleTable());
application.runAppExample();
}
}

Java涓殑clone()鏂規(guī)硶鏄辜鎵胯嚜Object錛孉bstractFurniture鐨勫瓙欏炲垾鍓噊verride閫欏媍lone()鏂規(guī)硶錛屼互瑜囪=鍏舵湰韜甫鍌沖洖銆?br>
涓嬪湒鐐篜rototype妯″紡鐨勯鍒ョ祼妲嬪湒錛?
Prototype
鍦?Gof 鐨勮ō璦堟ā寮忔浉涓鄲鍑轟竴鍊嬪師鍨嬫ā寮忕殑鎳夌敤錛氫竴鍊嬮氱敤鐨勫湒鍨嬬法杓櫒 Framework銆傚湪閫欏?Framework涓湁涓鍊嬪伐鍏峰垪錛屾?zhèn)ㄥ彲浠ュ湪涓婇潰閬告搰闊虫▊绗﹁櫉浠ュ姞鍏ユ▊璀滀腑锛屼甫鍙互闅ㄦ檪瑾挎暣闊虫▊绗﹁櫉鐨勪綅缃{夌瓑銆?br>
鍦栧瀷綬ㄨ集鍣‵ramework鏄氱敤鐨勶紝鐒惰屽畠涓︿笉鐭ラ亾閫欎簺闊蟲(chóng)▊絎﹁櫉鐨勫瀷鎱嬶紝鏈変漢鎴栬ū鏈冩兂鍒扮辜鎵垮湒鍨嬬法杓櫒Framework渚嗙偤姣忓嬮煶妯傜铏熻ō璦堜竴鍊嬫鏋跺瓙欏炲垾錛屼絾鐢辨柤闊蟲(chóng)▊絎﹁櫉鐨勭ó欏炲緢澶氾紝閫欐渻鐢㈢敓鐩哥暥澶氱殑瀛愰鍒ワ紝鐐轟簡(jiǎn)閬垮厤閫欑ó鎯呮硜錛屽彲浠ラ忛亷Prototype妯″紡渚嗘笡灝戝瓙欏炲垾鐨勬暩鐩紝鍙互璦▓鍑轟互涓嬬殑緄愭錛?br>
Prototype

渚濈収閫欏嬬祼妲嬶紝鍦栧瀷綬ㄨ集鍣ㄧ殑Framework鍙互鐛ㄧ珛鏂艱濂楃敤鐨勭壒瀹氶鍒ヤ箣澶栵紝闆栫劧涓嶇煡閬撹瑜囪=鍌沖洖鐨勫皪璞″瀷鎱嬫槸浠楹鹼紝浣嗙附鍙互鎸夌収 Graphics鎵瀹氱京鐨勪粙闈締鎿嶄綔閫欎簺鐗╀歡銆?br>

]]>
Design Pattern: Builder 妯″紡http://www.tkk7.com/jesson2005/articles/111169.html寮犻噾楣?/dc:creator>寮犻噾楣?/author>Tue, 17 Apr 2007 02:35:00 GMThttp://www.tkk7.com/jesson2005/articles/111169.htmlhttp://www.tkk7.com/jesson2005/comments/111169.htmlhttp://www.tkk7.com/jesson2005/articles/111169.html#Feedback0http://www.tkk7.com/jesson2005/comments/commentRss/111169.htmlhttp://www.tkk7.com/jesson2005/services/trackbacks/111169.html
鎮(zhèn)ㄥ彲浠ュ湪紼嬪紡涓畾緹╁叐鍊嬭鑹詫紝涓鍊嬫槸鎸囧皫榪峰寤虹珛鐨凞irector瑙掕壊錛屼竴鍊嬫槸鎸夌収鎸囧皫鑰呮寚紺哄緩绔嬭糠瀹殑Builder瑙掕壊錛孌irector鏍規(guī)摎瀹氱京鐨勮糠瀹櫍鍒椾締鎸囧皫Builder錛屽彧瑕佹洿鎻汢uilder錛屽氨鍙互瀹屾垚涓嶅悓鏉愯唱鐨勮糠瀹?br>
鍙互浣跨敤涓嬮潰鐨刄ML 欏炲垾鍦栦締琛ㄧず涓婅堪鐨勬蹇碉細(xì)
Builder
瀵﹂殯涓婄殑紼嬪紡璦▓濡備笅錛?br>
  • MazeDirector.java
public class MazeDirector {
private int[][] maze;
private IMazeBuilder mazeBuilder;

public void setMaze(int[][] maze) {
this.maze = maze;
}

public void setMazeBuilder(IMazeBuilder mazeBuilder) {
this.mazeBuilder = mazeBuilder;
}

public void buildMaze() {
for(int i = 0; i < maze.length; i++) {
for(int j = 0; j < maze[i].length; j++) {
// 鐢辨柤mazeBuilder鏄疘MazeBuilder鍨嬫厠
// 鎵浠ョ劇璜朆uilder瀵︿緥鐐轟綍錛岄欓倞鐨勭▼寮忛兘鐒¢渶璁婂嫊
 switch (maze[i][j]) {
case 0:
mazeBuilder.createRoadBlock();
break;
case 1:
mazeBuilder.createWallBlock();
break;
case 2:
mazeBuilder.createTreasureBlock();
break;
default:
System.out.println("undefined");
}
}
mazeBuilder.nextRow();
}
}
}

  • IMazeBuilder.java
public interface IMazeBuilder {
public void createRoadBlock();
public void createWallBlock();
public void createTreasureBlock();
public void nextRow();
}

  • SoliderMazeBuilder.java
public class SolidMazeBuilder implements IMazeBuilder {
public void createWallBlock() {
System.out.print("鈻?);
}

public void createRoadBlock() {
System.out.print("銆");
}

public void createTreasureBlock() {
System.out.print("$ ");
}

public void nextRow() {
System.out.println();
}
}

  • DiamondMazeBuilder.java
public class DiamondMazeBuilder implements IMazeBuilder {
public void createWallBlock() {
System.out.print("鈼?);
}

public void createRoadBlock() {
System.out.print("銆");
}

public void createTreasureBlock() {
System.out.print("* ");
}

public void nextRow() {
System.out.println();
}
}

浣跨敤涓嬮潰鐨勭▼寮忎締娓│涓涓嬶紝瀹冨皣鐢㈢敓鍏╁嬭糠瀹湒褰細(xì)
public class Main {
public static void main(String[] args) {
int[][] maze = {{1, 1, 1, 1, 1, 1, 1},
{1, 0, 0, 0, 0, 2, 1},
{1, 0, 1, 0, 1, 0, 1},
{1, 0, 2, 1, 0, 1, 1},
{1, 1, 0, 1, 0, 1, 1},
{1, 0, 0, 2, 0, 0, 1},
{1, 1, 1, 1, 1, 1, 1}};

MazeDirector mazeDirector = new MazeDirector();
mazeDirector.setMaze(maze);

System.out.println("Build SolidMaze....");
mazeDirector.setMazeBuilder(new SolidMazeBuilder());
mazeDirector.buildMaze();

System.out.println("Build DiamondMaze....");

mazeDirector.setMazeBuilder(
new DiamondMazeBuilder());
mazeDirector.buildMaze();
}
}

Builder

鍦ㄨ糠瀹緥瀛愪腑涓︽矑鏈夌敘鐢熸垨榪斿洖鐢㈠搧鐗╀歡錛岄欒鎮(zhèn)ㄧ殑闇姹傝屽畾錛岃糠瀹緥瀛愬彧鏄皣緄愭灉杓稿嚭鑷充富鎺у彴錛屾?zhèn)ㄤ篃鍙互瑷a堜竴鍊嬬敘鍝佺墿浠訛紝鎴栨槸灝囩祼鏋滅洿鎺ヨ幾鍑虹偤鏂囦歡銆?br>
鍦?a > Gof 涓湁緄﹀嚭浜?jiǎn)涓鍊嬩笉閷殑渚嬪瓙錛屼互璦▓鏂囦歡鍓栨瀽鍣ㄧ偤渚嬶紝瑭插墫鏋愬櫒鍙互灝囨枃浠惰綁鎻涚偤鍏跺畠鐨勬牸寮忥紝浠OC鏂囦歡鍓栨瀽鍣ㄧ偤渚嬪ソ浜?jiǎn)锛屽亣瑷笇鏈涙瀽鍓栧櫒鍙互灏嘍OC鏂囦歡杞夋彌鐐篟TF鎴栨槸PDF鏂囦歡錛屽彲浠ュ涓嬭ō璦堢祼妲嬶細(xì)
Builder

綈″柈渚嗚錛屽緩綃夎呮ā寮忛仼鐢ㄧ殑鍫村悎錛屽湪鏂間嬌寰楁?zhèn)ㄥ彲浠ヤ緷璩存娊璞$殑寰徑媺钘嶅湒锛岃屽闅涘緩閫犳檪鍙互浣跨敤涓嶅悓鐨勫渚嬶紝閫欐槸鍏朵箣鎵浠ュ懡鐐築uilder鐨勫師鍥?

]]>
Design Pattern: Singleton 妯″紡http://www.tkk7.com/jesson2005/articles/111166.html寮犻噾楣?/dc:creator>寮犻噾楣?/author>Tue, 17 Apr 2007 02:33:00 GMThttp://www.tkk7.com/jesson2005/articles/111166.htmlhttp://www.tkk7.com/jesson2005/comments/111166.htmlhttp://www.tkk7.com/jesson2005/articles/111166.html#Feedback0http://www.tkk7.com/jesson2005/comments/commentRss/111166.htmlhttp://www.tkk7.com/jesson2005/services/trackbacks/111166.html
寰堝鏅傚欙紝鎮(zhèn)ㄦ渻闇瑕丼ingleton妯″紡錛屼緥濡傚嵃琛ㄦ綆$悊錛屾?zhèn)ㄥ笇鏈浗E嬪紡涓彧鑳芥湁涓鍊婸rint Spooler錛屼互閬垮厤鍏╁嬪垪鍗板嫊浣滃悓鏅傝幾鍏ヨ嚦鍗拌〃姍熶腑錛涗緥濡傝硣鏂欏韓綆$悊錛屽洜鐐哄緩绔嬮f帴錛圕onnection錛夌墿浠舵渻鑰楃敤璩囨簮錛屾?zhèn)ㄥ笇鏈浗E嬪紡涓彧鑳芥湁涓鍊嬮f帴鐗╀歡錛屾墍鏈夊叾瀹冪殑紼嬪紡閮介忛亷閫欏嬬墿浠朵締閫f帴璩囨枡搴紝浠ラ伩鍏嶉f帴鐗╀歡鐨勯噸瑜囬枊鍟熼犳垚璩囨簮鐨勮楃敤錛涗緥濡傜郴緄辯▼寮忓爆鎬ф獢鐨勮畝鍙栵紝鎮(zhèn)ㄤ嬌鐢ㄥ柈涓鍊嬬墿浠朵締璁鍙栧爆鎬у収瀹癸紝鑰岀▼寮忕殑鍏跺畠閮ㄤ喚閮藉悜閫欏嬬墿浠惰姹傚爆鎬ц硣鏂欙紝鑰屼笉鏄嚜琛岃畝鍙栧爆鎬ц硣鏂欍?br>
浠ュ嵃琛ㄦ璦▓鐐轟緥錛屾湁鐨勮ō璦堜漢鍝℃渻鎺″彇鍏ㄥ煙璁婃暩鐨勬柟寮忎締寤虹珛瀵︿緥錛屼甫鍦ㄧ▼寮忎腑闅ㄦ鍙栫敤閫欏嬪渚嬶紝Java闆栫劧涓嶆敮鎻村叏鍩熻畩鏁革紝浣嗛忛亷灝囩墿浠跺寘瑁濆湪涓鍊嬮鍒ヤ箣涓紝涔熸湁浜烘渻鎺$敤閫欐ǎ鐨勫娉曪細(xì)
 public class PrintSpooler {
    public PrintSpooler() {
        // ....
    }

    public Connection getSpooler(){
       ....
    }
}

 public class GlobalObject {
    private PrintSpooler printSpooler;
    public GlobalObject () {
        printSpooler = new PrintSpooler();
        ...
    }
   
    public void getPrintSpooler() {
        return printSpooler;
    }
 }

鐒¤珫鍏ㄥ煙璁婃暩鎴栨槸浠ヤ笂鐨勪緥瀛愶紝閮界劇娉曚繚璀夊彧鐢㈢敓鍞竴鍊嬪渚嬶紝鎮(zhèn)ㄤ篃璦辨渻娉ㄦ剰涓嶇姱閫欏嬮尟瑾わ紝浣嗚垏鎮(zhèn)ㄥ叡鍚屽伐浣滅殑澶ヤ即涔熻ū鏈冪洿瑕虹殑浣跨敤寤烘鏂規(guī)硶渚嗙敘鐢熶竴鍊?PrintSpooler瀵︿緥銆?br>
Singleton妯″紡鍙互淇濊瓑涓鍊嬮鍒ュ彧鏈変竴鍊嬪渚嬶紝涓︽彁渚涗竴鍊嬭í鍟忥紙visit錛夐欏嬪渚嬬殑鏂規(guī)硶銆?br>
涓鍊婼ingleton瀵︿綔鍗崇偤Java涓殑java.lang.Runtime欏炲垾錛屾瘡鍊婮ava紼嬪紡鍩瘋鏅傞兘鏈変竴鍊嬪敮涓鐨凴untime鐗╀歡錛屽彲浠ラ忛亷瀹冩彁渚涚殑闈滄厠鏂規(guī)硶getRuntime()鏂規(guī)硶渚嗗彇寰楅欏嬬墿浠訛紝渚嬪錛?
Runtime runtime = Runtime.getRuntime();

鍙栧緱Runtime鐗╀歡涔嬪緦錛屾?zhèn)ㄥ彲浠ラ忛亷瀹冮茶涓浜涘閮ㄥ懡浠ょ殑鍩瘋銆侀茶鍨冨溇铏曠悊絳夌瓑鎸囦護(hù)錛屾?zhèn)ㄥ彲浠ラ枊鍟烺untime.java欏炲垾錛岄枊闋殑騫捐鏄欐ǎ瀵殑錛?br>
public class Runtime {
    private static Runtime currentRuntime = new Runtime();

    public static Runtime getRuntime() {
        return currentRuntime;
    }

   /** Don't let anyone else instantiate this class */
   private Runtime() {}

    // 浠ヤ笅鐣?
}
 
涓婇潰緄愭鍗蟲(chóng)帯鐢⊿ingleton妯″紡璦▓錛屽叾緄愭浣跨敤 UML 渚嗚〃鍗沖涓嬫墍紺猴細(xì)
Singleton
濡備笂鎵紺虹殑錛孞ava浣跨敤 闈滄厠宸ュ粻 渚嗗彇寰桼untime鐗╀歡錛屽叾涓璕untime鐨勫緩妲嬪嚱寮忚瀹e憡鐐簆rivate錛岄欐ǎ鍙互闃繪鍏朵粬浜轟嬌鐢ㄥ緩妲嬫柟娉曚締寤虹珛瀵︿緥錛涗嬌鐢ㄦ洿涓鑸寲鐨勮〃紺哄柈渚嬬殑UML緄愭錛屽涓嬪湒鎵紺猴細(xì)
Singleton

鏈夊咕鍊嬪浣滀笂闈㈢祼妲嬬殑鏂規(guī)硶錛屽彲浠ュ湪絎竴嬈¢渶瑕佸渚嬫檪鍐嶅緩绔嬬墿浠訛紝涔熷氨鏄帯鐢ㄦ墍瓔傜殑Lazy Initialization錛?br>
public class Singleton {
    private static Singleton instance = null;

    private Singleton() {
        // ....
    }

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }

        return instance;
    }

    // .. 鍏跺畠瀵︿綔
}

涓婇潰鐨勫浣滈仼鐢ㄦ柤鍠煼琛岀窉鐨勭▼寮忥紝鍦ㄥ鍩瘋綬掔殑紼嬪紡涓嬶紝浠ヤ笅鐨勫娉曞湪澶氬嬪煼琛岀窉鐨勭鐖硣婧愪笅錛屽皣浠嶆湁鍙兘鐢㈢敓鍏╁嬩互涓婄殑瀵︿緥錛屼緥濡備笅闈㈢殑鎯呮硜錛?br>
Thread1: if(instance == null) // true
Thread2: if(instance == null) // true

Thread1: instance = new Singleton(); // 鐢㈢敓涓鍊嬪渚?/span>
Thread2: instance = new Singleton(); // 鍙堢敘鐢熶竴鍊嬪渚?/span>

Thread1: return instance; // 鍥炲偝涓鍊嬪渚?/span>
Thread2: return instance; // 鍙堝洖鍌充竴鍊嬪渚?/span>

鍦ㄥ鍩瘋綬掔殑鐠板涓嬶紝鐐轟簡(jiǎn)閬垮厤璩囨簮鍚屾檪绔剁埈鑰屽皫鑷村涓婄敘鐢熷鍊嬪渚嬬殑鎯呮硜錛屽姞涓婂悓姝ワ紙synchronized錛夋鍒訛細(xì)
public class Singleton {
    private static Singleton instance = null;
    private Singleton(){}
    synchronized static public Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}
 
涓嶉亷閫欑ó綈″柈鐨勫娉曚笉閬╁悎鐢ㄦ柤鍍忎己鏈嶅櫒閫欑ó鏈嶅嫏寰堝鍩瘋綬掔殑紼嬪紡涓婏紝鍚屾姍熷埗鏈冮犳垚鐩哥暥鐨勬晥鑳戒綆钀斤紝鐐轟簡(jiǎn)欏у強(qiáng)Singleton銆丩azy Initialization鑸囨晥鑳藉晱欏岋紝鍥犺屾湁浜?jiǎn)Double-check Locking鐨勬ā寮忥細(xì)
public class Singleton {
    private static Singleton instance = null;
    private Singleton(){}
    public static Singleton getInstance() {
        if (instance == null){
            synchronized(Singleton.class){
                if(instance == null) {
                     instance = new Singleton();
                }
            }
        }
        return instance;
    }
}
 
Java涓璕untime欏炲垾鐨勪綔娉曞氨綈″柈澶氫簡(jiǎn)錛屽畠鎹ㄦ浜?jiǎn)Lazy Initialization錛屽鏋滄?zhèn)ㄧ殑瀵︿緥鍒濆鍖栦笉鏄緢涔呯殑瑭卞Q屽彲浠ョ敤閫欑ó鏂瑰紡錛?br>
public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {
        // ....
    }

    public static Singleton getInstance() {
        return instance;
    }

    // 鍏跺畠瀵︿綔
}
 
Singleton鏈韓鐨勮蹇電啊鍠絾鎳夌敤寰堝唬錛屽洜鑰屽緢澶氭檪鍊欏繀闋堝皪瀵﹂殯鐠板浣滀竴浜涜冮噺鑸囪鏁達(dá)紝寤鴻鎮(zhèn)ㄤ篃鐪嬬湅鏈夐棞鏂糞ingleton鐨勯欑瘒 璦庤珫銆?br>

]]>
Design Pattern: Registry of Singleton 妯″紡http://www.tkk7.com/jesson2005/articles/111167.html寮犻噾楣?/dc:creator>寮犻噾楣?/author>Tue, 17 Apr 2007 02:33:00 GMThttp://www.tkk7.com/jesson2005/articles/111167.htmlhttp://www.tkk7.com/jesson2005/comments/111167.htmlhttp://www.tkk7.com/jesson2005/articles/111167.html#Feedback0http://www.tkk7.com/jesson2005/comments/commentRss/111167.htmlhttp://www.tkk7.com/jesson2005/services/trackbacks/111167.htmlSingleton 妯″紡 鏅傛搧鏈夊瓙欏炲垾鐨勫晱欏岋紝鍦⊿ingleton妯″紡涓殑getInstance()閫氬父鏄竴鍊嬮潨鎱嬫柟娉曪紝涓嶈兘鍦ㄥ瓙欏炲垾涓噸鏂板畾緹╁畠錛岄棞鏂煎瓙欏炲垾瀵︿緥鐨勭敘鐢熶氦鐢眊etInstance()渚嗛茶鏄渶濂界殑閬告搰錛屼緥濡傦細(xì)
public class Singleton {
    private static Singleton instance = null;
    private Singleton() {
        // ....
    }

    public static Singleton getInstance() {
        if (instance == null) {
            // getEnv琛ㄧず緋葷當(dāng)鐠板璁婃暩
            String style = getEnv("style");

            if (style.equals("child1"))
                instance = new ChildSingleton1();
            else if (style.equals("child2r"))
                instance = new ChildSingleton2();
            else
                instance = new Singleton();
        }

        return _instance;
    }

    // ....
}

涓婇潰閫欏嬬▼寮忕墖孌墊敼瀵嚜 Gof 鏇?/a>涓棞鏂糞ingleton鐨勪緥瀛愶紝涓︾敤Java瀵︾従錛涘湪鏇鎬腑鎸囧嚭錛岄欏嬩緥瀛愮殑緙洪粸鏄瘡澧炲姞涓鍊嬪瓙欏炲垾錛実etInstance()灝卞繀闋堥噸鏂頒慨鏀癸紝閫欏嬪晱欏屽湪Java涓彲浠ヤ嬌鐢≧eflection姍熷埗渚嗚В姹猴細(xì)
public class Singleton {
    private static Singleton instance = null;
    private Singleton() {
        // ....
    }

    public static Singleton getInstance() {
        if (instance == null) {
            // getEnv琛ㄧず鐠板璁婃暩
            String style = getEnv("style");

            try {
                instance = (Singleton)
                          Class.forName(style).newInstance();
            }
            catch(Exception e) {
                System.out.println(
                   "Sorry! No such class defined!");
            }
        }

        return instance;
    }

    // ....
}

涓婇潰鐨勬柟寮忎嬌鐢ㄤ簡(jiǎn)Java鐨凴eflection姍熷埗錛屼甫閫忛亷鐠板璁婃暩璦畾瑕佺敘鐢熺殑瀛愰Singleton錛屽鏋滀笉浣跨敤Reflection鐨勮┍錛孏of 鏇鎬腑鎻愬嚭鐨勬敼閫叉柟娉曟槸浣跨敤Registry of Singleton鏂規(guī)硶錛?br>
import java.util.*;

public class Singleton {
    // 璦誨唺琛紝鐢ㄦ柤璦誨唺瀛愰鍒ョ墿浠?/span>
    private static Map registry = new HashMap();
    private static Singleton instance;

    public static void register(
                 String name, Singleton singleton) {
        registry.put(name, singleton);
    }

    public static Singleton getInstance() {
        if (instance == null) {
            // getEnv琛ㄧず鍙栧緱鐠板璁婃暩
            String style = getEnv("style");
            instance = lookup(style);
        }

        return instance;
    }

    protected static Singleton lookup(String name) {
        return (Singleton) registry.get(name);
    }
}

鍦℅of鏇鎬腑浣跨敤List渚嗗鐝捐ɑ鍐婅〃錛岃屽湪閫欓倞浣跨敤HasMap欏炲垾渚嗗鐝撅紝瀹冩槸鐢盝ava SE鎵鎻愪緵鐨勶紱鍦ㄧ埗欏炲垾涓彁渚涗竴鍊媟egister() 浠ヨɑ鍐奡ingleton鐨勫瓙欏炲垾鎵鐢㈢敓涔嬪渚嬶紝鑰岃ɑ鍐婄殑鏅傛鍙互鏀懼湪瀛愰鍒ョ殑寤烘鏂規(guī)硶涓姞浠ュ鐝撅紝渚嬪錛?
public class ChildSingleton1 extends Singleton {
    public ChildSingleton1() {
        // ....
        // 璦誨唺瀛愰鍒ョ墿浠?/span>
        register(getClass().getName(), this); 
    }
}
 
鑻ヨ鍒╃敤Singleton錛屽墖鍏堜嬌鐢ㄩ欏嬪瓙欏炲垾鐢㈢敓鐗╀歡錛岄欐渻鍚戠埗欏炲垾璦誨唺鐗╀歡錛屼箣寰岄忛亷Singleton鐖墮鍒ヤ締鍙栧緱鐗╀歡錛?br>
// 蹇呴爤鍏堝暉濮嬮欐璦誨唺紼嬪簭
// 鐢㈢敓涓﹁ɑ鍐奀hildSingleton1鐗╀歡
new ChildSingleton1();
// 鐢㈢敓涓﹁ɑ鍐奀hildSingleton2鐗╀歡
new ChildSingleton2();

// 璦誨唺瀹屾垚錛屽彲浠ヤ嬌鐢ㄧ埗欏炲垾渚嗗彇寰楀瓙欏炵殑Singleton
// 鑷蟲(chóng)柤鍙栧洖浣曞摢涓鍊嬶紝瑕栨?zhèn)ㄧ殑鐠板璁婃暩瑷|焙瀹?/span>
Singleton childSingleton = Singleton.getInstance();
 

閫欑ó鏂瑰紡鐨勭己榛炴槸鎮(zhèn)ㄥ繀闋堝湪紼嬪紡涓暉濮嬩竴孌電▼搴忥紝鍏堝悜鐖墮鍒ヨɑ鍐婂瓙欏炵殑Singleton錛屼箣寰屾墠鑳介忛亷鐖墮鍒ヤ締鍙栧緱鎸囧畾鐨勫瓙欏炲垾Singleton瀵︿緥錛屽ソ铏曟槸鍙互閬╃敤鏂兼矑鏈塕eflection姍熷埗鐨勮獮璦錛屽鏋滄?zhèn)ㄦ儗櫐佹敼璁奡ingleton鐖墮鍌沖洖鐨勫瓙欏濻ingleton錛屽彲浠ュ湪涓婇潰鐨?Singleton欏炲垾涓姞鍏ヤ竴鍊媟eset()鏂規(guī)硶錛屽皣instance璦畾鐐簄ull錛岀劧寰岄噸鏂拌ō瀹氱挵澧冭畩鏁革紝涔嬪緦鍐嶅埄鐢?Singleton鐖墮鐨刧etInstance()鏂規(guī)硶閲嶆柊鍙栧緱璦誨唺琛ㄤ腑鐨勫叾瀹冨瓙欏炪?br>
浜嬪涓奟egistry of Singleton鐨勭湡姝e劒榛炴鍦ㄦ柤姝わ紝鎮(zhèn)ㄥ彲浠ヤ嬌鐢ㄧ埗欏炲垾渚嗙當(dāng)涓綆$悊澶氬嬬辜鎵跨殑瀛愰鍒ヤ箣Singleton瀵︿緥錛屾?zhèn)ㄥ彲浠ュ湪闇瑕佺殑鏅傚欏啀鍚戠埗欏炲垾璦誨唺瀛愰 Singleton錛屽繀瑕佹檪闅ㄦ檪瑾挎暣鍌沖洖鐨勫瓙欏炲垾Singleton銆?br>

]]>
Design Pattern: Factory Method 妯″紡http://www.tkk7.com/jesson2005/articles/111165.html寮犻噾楣?/dc:creator>寮犻噾楣?/author>Tue, 17 Apr 2007 02:32:00 GMThttp://www.tkk7.com/jesson2005/articles/111165.htmlhttp://www.tkk7.com/jesson2005/comments/111165.htmlhttp://www.tkk7.com/jesson2005/articles/111165.html#Feedback0http://www.tkk7.com/jesson2005/comments/commentRss/111165.htmlhttp://www.tkk7.com/jesson2005/services/trackbacks/111165.html
鎮(zhèn)ㄤ笉鑳藉皣鐢熺敘閫插害鍋滀笅浜?jiǎn)锛岀浉鍙嶇殑鎮(zhèn)ㄥ繀闋埣労瀹氫竴浜涗簨鎯咃紝鎮(zhèn)ㄧ煡閬撴湁闂滄柤铻㈠箷鎺у埗鐨勬墍鏈変粙闈紝鎮(zhèn)ㄥ彲浠ュ皣閫欎簺灝嶄粙闈㈢殑鎿嶄綔婧濋氬厛瀵︾従錛岀瓑鍒拌灑騫曞埌浜?jiǎn)锛岀洿鎺畤铻Ⅱq曡垏鎮(zhèn)ㄧ殑鍗婃垚鍝佺祫鍚堣搗渚嗭紝涓鍊嬪畬鏁寸殑鎴愬搧鍗沖彲鍑哄粻銆?br>
Factory Method妯″紡鍦ㄤ竴鍊嬫娊璞¢涓暀涓嬫煇鍊嬪壍寤哄厓浠剁殑鎶借薄鏂規(guī)硶娌掓湁瀵︿綔錛屽叾瀹冭垏鍏冧歡鎿嶄綔鐩擱棞鑱殑鏂規(guī)硶閮藉厛渚濊炒鏂煎厓浠舵墍瀹氱京鐨勪粙闈紝鑰屼笉鏄緷璩存柤鍏冧歡鐨勫鐝撅紝鐣舵?zhèn)ㄧ殑鎴愬搧涓湁涓鍊嬫垨澶氬嬪厓浠剁劇娉曠⒑瀹氭檪錛屾?zhèn)ㄥ厛纰哄畾鑸囬欎簺鍏冧歡鐨勬搷浣滀粙闈紝鐒跺緦鐢ㄥ厓浠剁殑鎶借薄鎿嶄綔浠嬮潰鍏堝畬鎴愬叾瀹冪殑宸ヤ綔錛屽厓浠剁殑瀵︿綔錛堝鐝撅級(jí)鍓囨帹閬茶嚦瀵︾従鍏冧歡浠嬮潰鐨勫瓙欏炲畬鎴愶紝涓鏃﹀厓浠跺姞鍏ワ紝鍗沖彲瀹屾垚鎮(zhèn)ㄧ殑鎴愬搧銆?br>
鍐嶈垑涓鍊嬩緥瀛愶紝鍋囪ō鎮(zhèn)ㄨ瀹屾垚涓鍊嬫枃浠剁法杓櫒錛屾?zhèn)ㄥ笇鏈涢欏嬬法杓櫒鍙互閬╃敤鏂兼墍鏈夐鍨嬬殑妾旀綬ㄨ集錛屼緥濡俁TF銆丏OC銆乀XT絳夌瓑錛屽剺綆¢欎簺鏂囦歡鏈夎憲涓嶅悓鐨勬牸寮忥紝鎮(zhèn)ㄥ厛紕哄畾鐨勬槸閫欎簺鏂囦歡蹇呯劧鍏峰倷鐨勪竴浜涙搷浣滀粙闈紝渚嬪鍎插瓨銆侀枊鍟熴侀棞闁夌瓑絳夛紝鎮(zhèn)ㄧ敤涓鍊婭Document欏炲瀷渚嗛茶鎿嶄綔錛岄欓杭涓渚嗛欏嬫鏋跺氨鐒¢渶鑰冩叜瀵﹂殯鐨勫劜瀛樸侀枊鍟熺瓑绱扮瘈鏄浣曢茶鐨勩?

浠?UML 欏炲垾鍦栦締琛ㄧ従浠ヤ笅鐨勬蹇碉細(xì)
FactoryMethod

AbstractEditor涓殑createDocument()鏂規(guī)硶鏄嬫娊璞℃柟娉曪紝鍥犵偤妗嗘灦涓嶇煡閬撴?zhèn)畤瀵︾従涓鍊嬩粈楹奸鍨嬬殑鏂囦歡錛岄欏嬫娊璞℃柟娉曞皣鎺ㄩ伈鑷崇辜鎵緼bstractEditor鐨勫瓙欏炰腑瀵︾従銆?br>
閫欏嬫灦妲嬪彲鐢ㄤ互涓嬬啊鍠殑紺烘剰紼嬪紡渚嗕綔紺虹瘎錛岀暥涓鐝句簡(jiǎn)涓鍊婻TFDocument錛岄洊鐒跺湪AbstractEditor涓甫涓嶇煡閬撴垜鍊戞渻濂楃敤閫欏婻TFDocument錛屼絾鎮(zhèn)ㄥ彲浠ョ湅鍒幫紝閫忛亷澶氬瀷鎿嶄綔錛屾?zhèn)ㄧ殑妗嗘灦鍙互閫茶灝嶆枃浠剁殑鐩擱棞鎿嶄綔銆?br>
  • AbstractEditor.java
public abstract class AbstractEditor {
private IDocument document;
public abstract IDocument createDocument();

public void newDocument() {
document = createDocument();
document.open();
}

public void saveDocument() {
if(document != null)
document.save();
}

public void closeDocument() {
if(document != null)
document.close();
}
}

  • IDocument.java
public interface IDocument {
public void open();
public void save();
public void close();
}

  • RTFEditor.java
public class RTFEditor extends AbstractEditor { 
public IDocument createDocument() {
return new RTFDocument();
}
}

  • RTFDocument.java
public class RTFDocument implements IDocument {
public RTFDocument() {
System.out.println("寤虹珛RTF鏂囦歡");
}

public void open() {
System.out.println("闁嬪暉鏂囦歡");
}

public void save() {
System.out.println("鍎插瓨鏂囦歡");
}

public void close() {
System.out.println("闂滈枆鏂囦歡");
}
}

灝嘑actory Method鐨勭祼妲嬬躬鍑哄涓嬶細(xì)
FactoryMethod

Factory Method涓殑AbstractOperator涓搧鏈変竴鍊嬫娊璞$殑factoryMethod()鏂規(guī)硶錛屽畠璨犺鉑鐢熸垚涓鍊婭Product欏炲瀷鐨勭墿浠訛紝鐢辨柤鐩墠閭勪笉鐭ラ亾灝囧浣曞鐝鵑欏嬮鍨嬶紝鎵浠ュ皣涔嬫帹閬茶嚦瀛愰鍒ヤ腑瀵︾従錛屽湪AbstractOperator涓厛瀵︾従IProduct鎿嶄綔浠嬮潰婧濋氱殑閮ㄤ喚錛屽彧瑕佷粙闈㈢當(dāng)涓浜?jiǎn)锛屽埄鐢ㄥ鍨嬫搷浣滃崨_彲瀹屾垚鍚勭ó涓嶅悓鐨処Product欏炲瀷涔嬬墿浠舵搷浣溿?br>
涔熷氨鏄錛屽皪AbstractOperator渚嗚錛屽叾鎿嶄綔鐨処Product鏄彲浠ユ娊鎻涚殑銆?

]]>
Design Pattern: Abstract Factory 妯″紡http://www.tkk7.com/jesson2005/articles/111031.html寮犻噾楣?/dc:creator>寮犻噾楣?/author>Mon, 16 Apr 2007 09:41:00 GMThttp://www.tkk7.com/jesson2005/articles/111031.htmlhttp://www.tkk7.com/jesson2005/comments/111031.htmlhttp://www.tkk7.com/jesson2005/articles/111031.html#Feedback0http://www.tkk7.com/jesson2005/comments/commentRss/111031.htmlhttp://www.tkk7.com/jesson2005/services/trackbacks/111031.html
  • CustomDialog.java
public class CustomDialog {
private IButton button;
private ITextField textField;

public void setButton(IButton button) {
this.button = button;
}

public void setTextField(ITextField textField) {
this.textField = textField;
}

public void layoutAllComponents() {
// ....
}

public void showDialog() {
this.paintDialog();
button.paintButton();
textField.paintTextField();
}

public void paintDialog() {
System.out.println("custom dialog paints....");
}
}

寰堢啊鍠紝閫欐槸鏈鍩烘湰鐨勪粙闈緷璩達(dá)紝Setter渚濊炒鏂糏Button鑸嘔TextField鍏╁嬩粙闈紝鑰屼笉鏄叾瀵︿綔欏炲垾錛屼笉閬庨欓倞閭勬湁鍊嬮蹭竴姝ョ殑瑕佹眰錛屼嬌鐢ㄤ笂闈㈢殑鏂瑰紡閭勫繀闋堣Κ鑷懠鍙玈etter銆乴ayout絳夋柟娉曪紝鎮(zhèn)ㄥ笇鏈涜鎰熺殑鏇存彌鍙互鏇寸啊鍠簺錛屼緥濡傚彧瑕侀忎竴鍊嬪厓浠剁殑鏇挎彌灝卞彲浠ュ畬鎴愬皪瑭辨柟濉婁笂鎵鏈夊厓浠剁殑瑕栨劅鏇存彌銆?br>
鎮(zhèn)ㄥ彲浠ヤ嬌鐢ˋbstract Factory妯″紡錛屽皣鎵鏈夊皪瑭辨柟濉婃墍闇瑕佺殑鐢㈢敓鐨勫厓浠跺姞浠ュ皝瑁濓紝灝嶈┍鏂瑰渚濊炒鏂糀bstract Factory錛屽闅涗笂鍏烽珨鐨凢actory瀵︾従鍓囧垎鍒ョ敘鐢熷皪瑭辨柟濉婃墍闇瑕佺殑瑕栨劅鍏冧歡錛屼笅闈㈢殑 UML 欏炲垾鍦栧睍鐝鵑欑ó姒傚康銆?br>
AbstractFactory

鐝懼湪濡傛灉瑕佹洿鎻涙墍鏈夌殑瑕栨劅鍏冧歡錛屽氨鍙鎶借薄鎺夊叿楂旂殑Factory灝卞彲浠ヤ簡(jiǎn)錛屼緥濡傦細(xì)
CustomDialog windowsDialog =
      new CustomDialog(new WindowsWidgetFactory());
windowsDialog.showDialog();
               
CustomDialog macDialog =
      new CustomDialog(new MacWidgetFactory());
macDialog.showDialog();

渚嗗皣涓婇潰鐨刄ML鍦栧叿楂斿鐝懼嚭渚嗐?br>
  • CustomDialog.java
public class CustomDialog {
private IButton button;
private ITextField textField;

public CustomDialog(IWidgetFactory widgetFactory) {
setWidgetFactory(widgetFactory);
}

// 鐢辨柤瀹㈡埗绔彧渚濊炒鏂兼娊璞$殑宸ュ粻錛屽伐寤犲浣曞浣滀甫鐒¢棞瀹㈡埗绔殑浜?br> // 瑕佹娊鎻涘伐寤犱甫涓嶉渶瑕佹敼鍕曞鎴剁鐨勭▼寮?br> public void setWidgetFactory(IWidgetFactory widgetFactory) {
setButton(widgetFactory.getButton());
setTextField(widgetFactory.getTextField());

}

public void layoutAllComponents() {
// layout all components
}

// 閫欓倞涔熸槸渚濊炒鎶借薄錛屽闅涙敼璁婁簡(jiǎn)鍏冧歡瀵︿緥
// 瀹㈡埗绔唬紕間篃涓嶇敤鏇存敼
public void setButton(IButton button) {
this.button = button;
}

public void setTextField(ITextField textField) {
this.textField = textField;
}

public void showDialog() {
this.paintDialog();
button.paintButton();
textField.paintTextField();
}

public void paintDialog() {
System.out.println("custom dialog paints....");
}
}

  • IButton.java
public interface IButton {
public void paintButton();
}

  • ITextField.java
public interface ITextField {
public void paintTextField();
}

  • IWidgetFactory.java
public interface IWidgetFactory {
public IButton getButton();
public ITextField getTextField();
}

  • MacButton.java
public class MacButton implements IButton {
public void paintButton() {
System.out.println("Mac button paints....");
}
}

  • WindowsButton.java
public class WindowsButton implements IButton {
public void paintButton() {
System.out.println("Windows button paints....");
}
}

  • MacTextField.java
public class MacTextField implements ITextField {
public void paintTextField() {
System.out.println("Mac textField paints....");
}
}

  • WindowsTextField.java
public class WindowsTextField implements ITextField {
public void paintTextField() {
System.out.println("Windows textField paints....");
}
}

  • MacWidgetFactory.java
public class MacWidgetFactory implements IWidgetFactory {
public IButton getButton() {
return new MacButton();
}

public ITextField getTextField() {
return new MacTextField();
}
}

  • WindowsWidgetFactory.java
public class WindowsWidgetFactory 
implements IWidgetFactory {
public IButton getButton() {
return new WindowsButton();
}

public ITextField getTextField() {
return new WindowsTextField();
}
}

涓嬪湒鏄疉bstract Factory妯″紡鐨刄ML緄愭鍦栵細(xì)
AbstractFactory

綈″柈鐨勮錛屽湪Abstract Factory妯″紡涓皣鍏烽珨鐨凱roduct灝佽鍦ㄥ叿楂擣actory瀵︾従涓紝鑰屽鎴朵粛鍙闈㈠皪Factory鑸嘝roduct鐨勬娊璞′粙闈紝閬垮厤渚濊炒鏂煎叿楂旂殑Factory鑸嘝roduct錛岀敱鏂糉actory灝佽浜?jiǎn)鎵蹇呴爤鐨凱roduct錛屾墍浠ヨ鏇存彌鎺夋墍鏈夌殑鍏冧歡錛屽彧瑕佺啊鍠殑鎶芥彌鎺塅actory灝卞彲浠ヤ簡(jiǎn)錛屼笉鐢ㄤ慨鏀瑰鎴剁鐨勭▼寮忋?br>


]]>
Design Pattern: Simple Factory 妯″紡http://www.tkk7.com/jesson2005/articles/111029.html寮犻噾楣?/dc:creator>寮犻噾楣?/author>Mon, 16 Apr 2007 09:39:00 GMThttp://www.tkk7.com/jesson2005/articles/111029.htmlhttp://www.tkk7.com/jesson2005/comments/111029.htmlhttp://www.tkk7.com/jesson2005/articles/111029.html#Feedback0http://www.tkk7.com/jesson2005/comments/commentRss/111029.htmlhttp://www.tkk7.com/jesson2005/services/trackbacks/111029.html
鍋囪ō鏈変竴鍊嬮煶妯傜洅宸ュ粻錛岃臣璨烽煶妯傜洅鐨勫浜轟笉鐢ㄧ煡閬撻煶妯傜洅鏄浣曡=浣滅殑錛屼粬鍙鐭ラ亾濡備綍鎾斁闊蟲(chóng)▊鐩掑氨鍙互浜?jiǎn)锛屼?UML 欏炲垾鍦栦締琛ㄧず浠ヤ笂鐨勬蹇碉細(xì)
SimpleFactory
濡備笂鍦栨墍紺虹殑錛孧usicBoxDemo浠h〃浜?jiǎn)瀹㈡埗鐨勮鑹插Q屽畠鍙緷璩存柤IMusicBox浠嬮潰錛岃屼笉闂滃績(jī)鐗瑰畾鐨勫浣滐紝瀵﹂殯濡備綍鐢㈢敓IMusicBox鐨勫渚嬬敱MusicBoxFactory瀹屾垚錛屼互涓鍊嬬啊鍠殑紼嬪紡渚嗗鐝句笂闈㈤欏婾ML欏炲垾鍦栵細(xì)
  • IMusicBox.java
public interface IMusicBox {
public void play();
}

  • PianoBox.java
public class PianoBox implements IMusicBox {
public void play() {
System.out.println("鎾ユ斁閶肩惔闊蟲(chóng)▊:)");
}
}

  • ViolinBox.java
public class ViolinBox implements IMusicBox {
public void play() {
System.out.println("鎾ユ斁灝忔彁鐞撮煶妯俕_^");
}
}

  • MusicBoxFactory.java
public class MusicBoxFactory {
public static IMusicBox createMusicBox(String name)
throws InstantiationException,
IllegalAccessException,
ClassNotFoundException {
// 閫欓倞浣跨敤鐨勬槸Java鐨凴eflection姍熷埗渚嗙敘鐢熷渚?br> // 涓嶉亷瀹㈡埗绔笉鐢ㄧ鍟?br> // 浠ュ緦灝辯畻鏀硅畩浜?jiǎn)閫欓倞鐨勭▼寮忥紝瀹㈡埗绔▼寮忔槸涓嶇敤鏇存敼鐨?br> return (IMusicBox) Class.forName(name).newInstance();
}
}

  • MusicBoxDemo.java
public class MusicBoxDemo {
public static void main(String[] args) throws Exception {
playMusicBox(MusicBoxFactory.createMusicBox("PianoBox"));
playMusicBox(MusicBoxFactory.createMusicBox("ViolinBox"));
}

public static void playMusicBox(IMusicBox musicBox) {
musicBox.play();
}
}

鐢辨柤瀹㈡埗绔彧渚濊炒鏂糏MusicBox浠嬮潰錛屾墍浠ュ嵆浣挎?zhèn)ㄦ棩寰屾敼璁婁簡(jiǎn)createMusicBox()涓殑瀵︿綔鏂瑰紡錛屽皪瀹㈡埗绔槸涓榛炲獎(jiǎng)闊夸篃娌掓湁鐨勩?br>
渚嗙湅鐪婼imple Factory鐨勯鍒ョ祼妲嬶細(xì)
SimpleFactory

瀹㈡埗鍙闈㈠皪Factory錛屽鎴朵緷璩存柤鐢㈠搧浠嬮潰錛岀敘鍝佺殑鍏烽珨瀵︿綔鏄彲浠ヨ垏瀹㈡埗闅旈枊鐨勶紝瀹冨戜篃鏄彲浠ユ娊鎻涚殑銆?br>


]]>
主站蜘蛛池模板: 亚洲AV无码一区东京热久久| 亚洲欧洲自拍拍偷综合| 一本色道久久88亚洲精品综合| 免费在线看黄网站| 国产一区二区三区无码免费| 亚洲视频在线一区| 久久精品一本到99热免费| 亚洲AV无码乱码国产麻豆穿越| 波霸在线精品视频免费观看| 亚洲级αV无码毛片久久精品| a级毛片免费网站| 亚洲一区无码精品色| 一个人免费观看视频在线中文| 日美韩电影免费看| 在线观看亚洲网站| 色噜噜亚洲精品中文字幕| 一区二区三区免费视频观看| 国产成人精品123区免费视频| 国产亚洲漂亮白嫩美女在线| 亚洲中文字幕第一页在线| 久久免费国产视频| 亚洲日本国产综合高清| 国产大片51精品免费观看| GOGOGO高清免费看韩国| 337p欧洲亚洲大胆艺术| 青青青国产免费一夜七次郎 | 亚洲91精品麻豆国产系列在线 | 特级无码毛片免费视频| 国产亚洲情侣一区二区无| 真实国产乱子伦精品免费| 亚洲av午夜国产精品无码中文字| 亚洲女同成人AⅤ人片在线观看| 久久精品免费观看国产| 亚洲人成网站免费播放| 在线亚洲人成电影网站色www| h视频在线免费看| 日本一线a视频免费观看| kk4kk免费视频毛片| 久久久久亚洲精品日久生情 | 无人视频免费观看免费视频| 国产V亚洲V天堂无码久久久|