鍦ㄤ笂綃囨枃绔犱腑鎴戜滑鐢ㄨ倝閾鴻繖鏍蜂竴涓満鏅弿榪頒簡綆鍗曞伐鍘傛ā寮忥紝鑲夐摵鑰佹澘鍗栫殑涓嶅悓鍝佺鐨勭尓鑲夛紝璁炬兂闅忕潃鏃墮棿鐨勬秷閫濓紝鑲夐摵鐨勭敓鎰忔棩瓚嬬孩鐏紝瀹㈡埛瑕佹眰澧炲姞楦侀浮銆佺墰絳変箣綾葷殑鑲夛紝榪欐牱鎴戜滑灝辮鍒嗗埆寮曡繘浜氭床楦侀潪媧查腑錛屼簹媧查浮銆侀潪媧查浮絳夌瓑錛屽緢鏄庢樉鍘熷厛鐨勮蔣浠惰璁″氨鏄劇殑寰堟棤鍔涗簡錛屾牴鏈傚簲涓嶄簡鐜頒粖鐨勭姸鎬併傛墍浠ュ氨寮曡繘浜嗘娊璞″伐鍘傛ā寮忋?/p>
鎶借薄宸ュ巶妯″紡鏄墍鏈夊艦鎬佺殑宸ュ巶妯″紡涓渶涓烘娊璞″拰鏈鍏蜂竴鑸х殑涓縐嶅艦鎬併?/p>
涓轟簡鏂逛究寮曡繘鎶借薄宸ュ巶妯″紡錛屽紩榪涗竴涓柊姒傚康錛?font color="#000080">浜у搧鏃忥紙Product Family錛?/font>銆傛墍璋撲駭鍝佹棌錛屾槸鎸囦綅浜庝笉鍚屼駭鍝佺瓑綰х粨鏋勶紝鍔熻兘鐩稿叧鑱?/span>鐨勪駭鍝?/span>緇勬垚鐨勫鏃忋傚鍥撅細

鍥句腑涓鍏辨湁鍥涗釜浜у搧鏃忥紝鍒嗗竷浜庝笁涓笉鍚岀殑浜у搧絳夌駭緇撴瀯涓傚彧瑕佹寚鏄庝竴涓駭鍝佹墍澶勭殑浜у搧鏃忎互鍙婂畠鎵灞炵殑絳夌駭緇撴瀯錛屽氨鍙互鍞竴鐨勭‘瀹氳繖涓駭鍝併?/p>
鎵璋撶殑鎶借薄宸ュ巶鏄寚涓涓伐鍘傜瓑綰х粨鏋勫彲浠ュ垱寤哄嚭鍒嗗睘浜庝笉鍚屼駭鍝佺瓑綰х粨鏋勭殑涓涓駭鍝佹棌涓殑鎵鏈夊璞°傚鏋滅敤鍥炬潵鎻忚堪鐨勮瘽錛屽涓嬪浘錛?/p>

AbstractFactory妯″紡鐨勭粨鏋勫涓嬶細

鍥句腑AfricanPig鍜孉siaPig鏋勬垚涓涓瓑綰х粨鏋勶紝AfiricanPorkFactory鐢熶駭鍑烘潵鐨勫寘鎷珹fricanPig鍜孉fricanDuck鏋勬垚涓涓駭鍝佹棌銆?/p>
鎶借薄宸ュ巶錛圓bstract Factory錛夎鑹詫細鎷呬換榪欎釜瑙掕壊鐨勬槸宸ュ巶鏂規硶妯″紡鐨勬牳蹇冿紝瀹冩槸涓庡簲鐢ㄧ郴緇熷晢涓氶昏緫鏃犲叧鐨勩?
鍏蜂綋宸ュ巶錛圕oncrete Factory錛夎鑹詫細榪欎釜瑙掕壊鐩存帴鍦ㄥ鎴風鐨勮皟鐢ㄤ笅鍒涘緩浜у搧鐨勫疄渚嬨傝繖涓鑹插惈鏈夐夋嫨鍚堥傜殑浜у搧瀵硅薄鐨勯昏緫錛岃岃繖涓昏緫鏄笌搴旂敤緋葷粺鐨勫晢涓氶昏緫绱у瘑鐩稿叧鐨勩?/p>
鎶借薄浜у搧錛圓bstract Product錛夎鑹詫細鎷呬換榪欎釜瑙掕壊鐨勭被鏄伐鍘傛柟娉曟ā寮忔墍鍒涘緩鐨勫璞$殑鐖剁被錛屾垨瀹冧滑鍏卞悓鎷ユ湁鐨勬帴鍙c?/p>
鍏蜂綋浜у搧錛圕oncrete Product錛夎鑹詫細鎶借薄宸ュ巶妯″紡鎵鍒涘緩鐨勪換浣曚駭鍝佸璞¢兘鏄煇涓涓叿浣撲駭鍝佺被鐨勫疄渚嬨傝繖鏄鎴風鏈緇堥渶瑕佺殑涓滆タ錛屽叾鍐呴儴涓瀹氬厖婊′簡搴旂敤緋葷粺鐨勫晢涓氶昏緫銆?br />
涓婂浘鐨勭▼搴忓涓嬶細
public interface Duck {
public void send();
}
public class AsiaDuck implements Duck {
public void send() {
System.out.println("send Asia duck");
}
}
public class AfricanDuck implements Duck {
public void send() {
System.out.println("send African duck");
}
}
public interface Pig {
public void send();
}
public class AsiaPig implements Pig {
public void send() {
System.out.println("send Asia pig");
}
}
public class AfricanPig implements Pig {
public void send() {
System.out.println("send African pig");
}
}
public abstract class AbstractFactory {
public abstract Pig createPig();
public abstract Duck createDuck();
}
public class AfricanPorkFactory extends AbstractFactory {
@Override
public Duck createDuck() {
return new AfricanDuck();
}
@Override
public Pig createPig() {
return new AfricanPig();
}
}
public class AsiaPorkFactory extends AbstractFactory {
@Override
public Duck createDuck() {
return new AsiaDuck();
}
@Override
public Pig createPig() {
return new AsiaPig();
}
}
public class PorkStoreClient {
private Pig pig = null;
private Duck duck = null;
public PorkStoreClient(AbstractFactory factory) {
pig = factory.createPig();
duck = factory.createDuck();
}
public void send() {
pig.send();
duck.send();
}
public static void main(String[] args) {
AbstractFactory africanFactory = new AfricanPorkFactory();
PorkStoreClient africanPorkStore = new PorkStoreClient(africanFactory);
africanPorkStore.send();
AbstractFactory asiaFactory = new AsiaPorkFactory();
PorkStoreClient asiaPorkStore = new PorkStoreClient(asiaFactory);
asiaPorkStore.send();
}
}
涓婅堪鐨勫満鏅彲鑳戒笉鏄緢濂界殑闃愯堪浜嗘娊璞″伐鍘傜殑搴旂敤錛屼絾鎴戜滑濡傛灉鎹釜鍦烘櫙鍛紵鎶妕ext鍜宐utton浣滀負浜у搧錛岃孶nixText鍜孶nixButton鏋勬垚Unix浜у搧鏃忥紝WinText鍜學inButton浣滀負Window浜у搧鏃忋傝繕鏈夋苯杞︾殑闆墮儴浠剁瓑絳夊満鏅兘鑳借浣犳洿鍔犱簡瑙f娊璞″伐鍘傜殑搴旂敤銆?br />
鎶借薄宸ュ巶妯″紡涓庡伐鍘傛柟娉曟ā寮忕殑鍖哄埆
宸ュ巶鏂規硶妯″紡鏄竴縐嶆瀬绔儏鍐電殑鎶借薄宸ュ巶妯″紡錛岃屾娊璞″伐鍘傛ā寮忓彲浠ョ湅鎴愭槸宸ュ巶鏂規硶妯″紡鐨勪竴縐嶆帹騫褲?
(1)銆佸伐鍘傛柟娉曟ā寮忔槸鐢ㄦ潵鍒涘緩涓涓駭鍝佺殑絳夌駭緇撴瀯鐨勶紝鑰屾娊璞″伐鍘傛ā寮忔槸鐢ㄦ潵鍒涘緩澶氫釜浜у搧鐨勭瓑綰х粨鏋勭殑銆傚伐鍘傛柟娉曞垱寤轟竴鑸彧鏈変竴涓柟娉曪紝鍒涘緩涓縐嶄駭鍝併傛娊璞″伐鍘備竴鑸湁澶氫釜鏂規硶錛屽垱寤轟竴緋誨垪浜у搧銆?
(2)銆佸伐鍘傛柟娉曟ā寮忓彧鏈変竴涓娊璞′駭鍝佺被錛岃屾娊璞″伐鍘傛ā寮忔湁澶氫釜銆傚伐鍘傛柟娉曟ā寮忕殑鍏蜂綋宸ュ巶綾誨彧鑳藉垱寤轟竴涓叿浣撲駭鍝佺被鐨勫疄渚嬶紝鑰屾娊璞″伐鍘傛ā寮忓彲浠ュ垱寤哄涓?

]]>