锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
1錛変嬌鐢ㄧ殑鍦版柟錛氭爲(wèi)褰㈢粨鏋勶紝鍒嗘敮緇撴瀯絳?/p>
2錛変嬌鐢ㄧ殑濂藉錛氶檷浣庡鎴風(fēng)鐨勪嬌鐢紝涓轟簡杈懼埌鍏冧歡涓庣粍鍚堜歡浣跨敤鐨勪竴鑷存э紝澧炲姞浜嗗厓浠剁殑緙栫爜
3錛変嬌鐢ㄥ悗鐨勫潖澶勶細(xì)浠g爜涓嶅鏄撶悊瑙o紝闇瑕佷綘璁ょ湡鍘葷爺絀訛紝鍙戠幇鍏冧歡涓庣粍鍚堜歡鏄庝箞緇勫悎鐨?br />
浜岋細(xì)涓涓疄闄呯殑渚嬪瓙
鐢誨浘褰紝榪欎釜妯″紡錛岀◢寰闅劇悊瑙d竴鐐癸紝鏈変簡渚嬪瓙灝辮鏄庝簡涓鍒囷紝鎴戠敾鐨勫浘鏄敤鎺ュ彛鍋氱殑錛屼唬鐮佸疄鐜版槸鎶借薄綾諱負(fù)鍩虹被錛屼綘鑷繁閫夋嫨浜嗭紝鎺ュ彛涔熷彲浠ャ?/p>
1錛夊厛寤虹珛鍥懼艦鍏冧歡
package com.mike.pattern.structure.composite;
/**
* 鍥懼艦鍏冧歡
*
* @author taoyu
*
* @since 2010-6-23
*/
public abstract class Graph {
/**鍥懼艦鍚嶇О*/
protected String name;
public Graph(String name){
this.name=name;
}
/**鐢誨浘*/
public abstract void draw()throws GraphException;
/**娣誨姞鍥懼艦*/
public abstract void add(Graph graph)throws GraphException;
/**縐繪帀鍥懼艦*/
public abstract void remove(Graph graph)throws GraphException;
}
2)寤虹珛鍩虹鍥懼艦鍦?/strong>
package com.mike.pattern.structure.composite;
import static com.mike.util.Print.print;
/**
* 鍦嗗浘褰?br />*
* @author taoyu
*
* @since 2010-6-23
*/
public class Circle extends Graph {
public Circle(String name){
super(name);
}
/**
* 鍦嗘坊鍔犲浘褰?br />* @throws GraphException
*/
@Override
public void add(Graph graph) throws GraphException {
throw new GraphException("鍦嗘槸鍩虹鍥懼艦錛屼笉鑳芥坊鍔?);
}
/**
* 鍦嗙敾鍥?br />*/
@Override
public void draw()throws GraphException {
print(name+"鐢誨ソ浜?);
}
/**
* 鍦嗙Щ鎺夊浘褰?br />*/
@Override
public void remove(Graph graph)throws GraphException {
throw new GraphException("鍦嗘槸鍩虹鍥懼艦錛屼笉鑳界Щ鎺?);
}
}
3錛夊緩绔嬪熀紜鍥懼艦闀挎柟褰?/strong>
package com.mike.pattern.structure.composite;
import static com.mike.util.Print.print;
/**
* 闀挎柟褰?br />*
* @author taoyu
*
* @since 2010-6-23
*/
public class Rectangle extends Graph {
public Rectangle(String name){
super(name);
}
/**
* 闀挎柟褰㈡坊鍔?br />*/
@Override
public void add(Graph graph) throws GraphException {
throw new GraphException("闀挎柟褰㈡槸鍩虹鍥懼艦錛屼笉鑳芥坊鍔?);
}
/**
* 鐢婚暱鏂瑰艦
*/
@Override
public void draw() throws GraphException {
print(name+"鐢誨ソ浜?);
}
@Override
public void remove(Graph graph) throws GraphException {
throw new GraphException("闀挎柟褰㈡槸鍩虹鍥懼艦錛屼笉鑳界Щ鎺?);
}
}
4錛夋渶鍚庣畝鍘嗙粍鍚堝浘褰?/strong>
package com.mike.pattern.structure.composite;
import java.util.ArrayList;
import java.util.List;
import static com.mike.util.Print.print;
/**
* 鍥懼艦緇勫悎浣?br />*
* @author taoyu
*
* @since 2010-6-23
*/
public class Picture extends Graph {
private List<Graph> graphs;
public Picture(String name){
super(name);
/**榛樿鏄?0涓暱搴?/
graphs=new ArrayList<Graph>();
}
/**
* 娣誨姞鍥懼艦鍏冧歡
*/
@Override
public void add(Graph graph) throws GraphException {
graphs.add(graph);
}
/**
* 鍥懼艦鍏冧歡鐢誨浘
*/
@Override
public void draw() throws GraphException {
print("鍥懼艦瀹瑰櫒錛?+name+" 寮濮嬪垱寤?);
for(Graph g : graphs){
g.draw();
}
}
/**
* 鍥懼艦鍏冧歡縐繪帀鍥懼艦鍏冧歡
*/
@Override
public void remove(Graph graph) throws GraphException {
graphs.remove(graph);
}
}
5錛夋渶鍚庢祴璇?/strong>
public static void main(String[] args)throws GraphException {
/**鐢諱竴涓渾錛屽渾閲屽寘鍚竴涓渾鍜岄暱鏂瑰艦*/
Picture picture=new Picture("绔嬫柟浣撳渾");
picture.add(new Circle("鍦?));
picture.add(new Rectangle("闀挎柟褰?));
Picture root=new Picture("鎬墿鍥懼艦");
root.add(new Circle("鍦?));
root.add(picture);
root.draw();
}
6)浣跨敤蹇冨緱錛氱殑紜檷浣庝簡瀹㈡埛绔殑浣跨敤鎯呭喌錛岃鏁翠釜鍥懼艦鍙帶浜嗭紝褰撴槸浣犺娣卞叆鍘葷悊瑙o紝鎵嶇湡鍚嶆槑鐧介噰鐢ㄨ妯″紡鐨勫惈涔夛紝涓嶅お瀹規(guī)槗鐞嗚В銆?/p>
1錛変嬌鐢ㄧ殑鍦版柟錛氭垜鎯充嬌鐢ㄤ袱涓笉鍚岀被鐨勬柟娉曪紝榪欎釜鏃跺欎綘闇瑕佹妸瀹冧滑緇勫悎璧鋒潵浣跨敤
2錛夌洰鍓嶄嬌鐢ㄧ殑鎯呭喌錛氭垜浼?xì)鎶婁袱涓c葷敤鎴風(fēng)粍鍚堢殑鏂瑰紡鏀懼埌涓璧鳳紝緙栫▼鎬濇兂think in java閲屽凡緇忔彁鍒頒釜錛岃兘灝介噺鐢ㄧ粍鍚堝氨鐢ㄧ粍鍚堬紝緇ф壙涓鑸冭檻鍐嶅悗銆?/p>
3錛変嬌鐢ㄥ悗鐨勫ソ澶勶細(xì)浣犱笉闇瑕佹敼鍔ㄤ互鍓嶇殑浠g爜錛屽彧鏄柊灝佽浜嗕竴鏂扮被錛岀敱榪欎釜綾繪潵鎻愪緵涓や釜綾葷殑鏂規(guī)硶錛岃繖涓椂鍊欙細(xì)涓瀹氫細(xì)鎯沖埌facade澶栬妯″紡錛屾湰鏉ユ槸澶氫釜綾諱嬌鐢ㄧ殑鎯呭喌錛屾垜鏂板皝瑁呮垚涓涓被鏉ヤ嬌鐢紝鑰岃繖涓被鎴戦噰鐢ㄧ粍鍚堢殑鏂瑰紡鏉ュ寘瑁呮柊鐨勬柟娉曘傛垜鐨勭悊瑙f槸錛岃璁℃ā寮忔湰韜氨鏄負(fù)浜嗗府鍔╄В鍐崇壒瀹氱殑涓氬姟鍦烘櫙鑰屾晠鎰忔妸妯″紡鍒掑垎瀵瑰簲鐨勬ā寮忕被鍒紝鍏跺疄澶у鏁版儏鍐碉紝閮借В鍐充簡鍚屾牱鐨勯棶棰橈紝榪欎釜鏃跺欏叾瀹炴病鏈夊繀瑕佽繃澶氱殑綰犵紶鍒版ā寮忕殑鍚嶅瓧涓婁簡錛屼綘鏈夊ソ鐨勬敞鎰忥紝浣犵敋鑷沖彇涓涓柊鐨勫悕瀛楁潵姒傛嫭榪欐牱鐨勪嬌鐢ㄥ満鏅?/p>
4錛変嬌鐢ㄧ殑鍧忓錛氶傞厤鍣ㄦā寮忥紝鏈変袱縐嶆柟寮忔潵瀹炵幇銆備竴涓槸緇勫悎涓涓槸緇ф壙錛屾垜瑙夊緱錛岄鍏堝簲璇ヨ冭檻緇勫悎錛岃兘鐢ㄧ粍鍚堝氨涓嶈鐢ㄧ戶鎵匡紝榪欐槸絎竴涓傜浜屼釜錛屼綘閲囩敤緇ф壙鏉ュ疄鐜幫紝閭h偗瀹氫細(xì)鍔犲ぇ緇ф壙鏍?wèi)缁撴瀯锛屽鏋滀綘鐨劸lф壙鍏崇郴鏈韓灝卞緢澶嶆潅浜嗭紝榪欒偗瀹氫細(xì)鍔犲ぇ緇ф壙鍏崇郴鐨勭淮鎶わ紝涓嶆湁鍒╀簬浠g爜鐨勭悊瑙o紝鎴栧垯鏇村姞綣佺悙銆傜戶鎵挎槸涓轟簡瑙e喅閲嶇敤鐨勪負(fù)棰樿屽嚭鐜扮殑錛屾墍浠ユ垜瑙夊緱涓嶅簲璇ユ互鐢ㄧ戶鎵匡紝鏈夋満浼?xì)鍙互鑰冭檻鍚屾牱鍒殑鏂規(guī)銆?br />
浜岋細(xì)涓涓疄闄呯殑渚嬪瓙
鍏寵仈钀ラ攢鐨勪緥瀛愶紝鐢ㄦ埛璐拱瀹屽晢鍝佸悗錛屾垜鍙堟帹鑽愪粬鐩稿叧鍒殑鍟嗗搧
鐢變簬鍑忓皯浠g爜錛屾柟娉曟垜閮戒笉閲囩敤鎺ュ彛錛岀洿鎺ョ敱綾繪潵鎻愪緵錛屼唬鐮佸彧鏄竴涓寖渚嬭屽凡錛岄兘綺劇畝浜嗐?/p>
1)鍒涘緩璁㈠崟淇℃伅
public class Order {
private Long orderId;
private String nickName;
public Order(Long orderId,String nickName){
this.orderId=orderId;
this.nickName=nickName;
}
/**
* 鐢ㄦ埛涓嬭鍗?br />*/
public void insertOrder(){
}
}
2錛夊晢鍝佷俊鎭?/strong>
public class Auction {
/**鍟嗗搧鍚嶇О*/
private String name;
/**鍒墮犲晢*/
private String company;
/**鍒墮犳棩鏈?/
private Date date;
public Auction(String name,String company, Date date){
this.name=name;
this.company=company;
this.date=date;
}
/**
* 鎺ㄥ箍鐨勫晢鍝佸垪琛?br />*/
public void commendAuction(){
}
}
3錛夎喘鐗?/strong>
public class Trade {
/**鐢ㄦ埛璁㈠崟*/
private Order order;
/**鍟嗗搧淇℃伅*/
private Auction auction;
public Trade(Order order ,Auction auction){
this.order=order;
this.auction=auction;
}
/**
* 鐢ㄦ埛浜х敓璁㈠崟浠ュ強鍚庣畫鐨勪簨鎯?br />*/
public void trade(){
/**涓嬭鍗?/
order.insertOrder();
/**鍏寵仈鎺ㄨ崘鐩稿叧鐨勫晢鍝?/
auction.commendAuction();
}
}
4錛変嬌鐢ㄥ績寰楋細(xì)鍏跺疄澶栭潰閲囩敤浜嗗緢澶氱戶鎵跨殑鏂瑰紡錛宱rder緇ф壙auction涔嬪悗錛屽埄鐢╯uper .inserOrder()鍐嶅姞涓涓猘uction.recommendAuction(),瀹為檯涓婂ぇ鍚屽皬寮傦紝鎴戝埌瑙夊緱閲囩敤緇勫悎鏇村鏄撶悊瑙d互鍙婁唬鐮佹洿鍔犱紭緹庣偣銆?/p>
1)浣跨敤鍒扮殑鍦版柟錛氬鏋滀綘鎯沖垱寤虹被浼兼苯杞﹁繖鏍風(fēng)殑瀵硅薄錛岄鍏堣鍒涘緩杞瓙錛岀幓鐠冿紝妗屾錛屽彂鍔ㄦ満錛屽寤撶瓑錛岃繖浜涢儴浠墮兘鍒涘緩濂藉悗錛屾渶鍚庡垱寤烘苯杞︽垚鍝侊紝閮ㄤ歡鐨勫垱寤哄拰姹借濺鐨勭粍瑁呰繃紼嬫湰韜兘寰堝鏉傜殑鎯呭喌錛屽笇鏈涙妸閮ㄤ歡鐨勫垱寤哄拰鎴愬搧鐨勭粍瑁呭垎寮鏉ュ仛錛岃繖鏍鋒妸瑕佸仛鐨勪簨鎯呭垎鍓插紑鏉ワ紝闄嶄綆瀵硅薄瀹炵幇鐨勫鏉傚害錛屼篃闄嶄綆浠ュ悗鎴愭湰鐨勭淮鎶わ紝鎶婃苯杞︾殑閮ㄤ歡鍒涘緩鍜岀粍瑁呰繃紼嬬嫭绔嬪嚭涓や釜瀵瑰簲鐨勫伐鍘傛潵鍋氾紝鏈夌偣綾諱技寤虹珛涓や釜瀵瑰簲鐨勯儴浠跺垱寤哄伐鍘傚拰姹借濺緇勮宸ュ巶涓や釜宸ュ巶錛岃屽伐鍘傚彧鏄垱寤轟竴涓垚鍝侊紝騫舵病鏈夋妸閲岄潰鐨勬楠や篃鐙珛鍑烘潵錛屽簲璇ヨBuilder妯″紡姣斿伐鍘傛ā寮忓張榪涗簡涓姝ャ?/p>
2錛夐噰鐢˙uilder妯″紡鍚庣殑濂藉錛氭妸涓涓礋璐g殑瀵硅薄鐨勫垱寤鴻繃紼嬪垎瑙o紝鎶婁竴涓璞$殑鍒涘緩鍒嗘垚涓や釜瀵硅薄鏉ヨ礋璐e垱寤猴紝浠g爜鏇存湁鍒╀簬緇存姢錛屽彲鎵╂ф瘮杈冨ソ銆?/p>
3錛夐噰鐢˙uilder妯″紡鍚庣殑鍧忓錛氬疄鐜拌搗鏉ワ紝瀵瑰簲鐨勬帴鍙d互鍙婇儴浠剁殑瀵硅薄鐨勫垱寤烘瘮杈冨錛屼唬鐮佺浉瀵規(guī)潵璁詫紝姣旇緝澶氫簡錛屼及璁″垰寮濮嬩綘浼?xì)鏈夌傄?guī)檿錛岃繖涓彲浠ヨ冭檻浠g爜綺劇畝鐨勯棶棰橈紝澧炲姞浠g爜鐨勫彲璇繪с?
浜岋細(xì)涓涓疄闄呯殑渚嬪瓙
姹借濺鐨勭粍瑁?/strong>
1)棣栧厛鍒涘緩姹借濺榪欎釜鎴愬搧瀵硅薄錛屽寘鍚粈涔堢殑鎴愬憳
public class Car implements Serializable{
/**
* 姹借濺搴忓垪鍙?br />*/
private static final long serialVersionUID = 1L;
/**姹借濺杞瓙*/
private Wheel wheel;
/**姹借濺鍙戝姩鏈?/
private Engine engine;
/**姹借濺鐜葷拑*/
private Glass glass;
/**姹借濺搴ф*/
private Chair chair;
public Wheel getWheel() {
return wheel;
}
public void setWheel(Wheel wheel) {
this.wheel = wheel;
}
public Engine getEngine() {
return engine;
}
public void setEngine(Engine engine) {
this.engine = engine;
}
public Glass getGlass() {
return glass;
}
public void setGlass(Glass glass) {
this.glass = glass;
}
public Chair getChair() {
return chair;
}
public void setChair(Chair chair) {
this.chair = chair;
}
}
2錛夊垱寤哄搴旀苯杞﹂浂閮ㄤ歡
public class Wheel {
public Wheel(){
print("--姹借濺杞瓙鏋勫緩瀹屾瘯--");
}
}
public class Engine {
public Engine(){
print("--姹借濺鍙戝姩鏈烘瀯寤哄畬姣?-");
}
}
public class Glass {
public Glass(){
print("--姹借濺鐜葷拑鏋勫緩瀹屾瘯--");
}
}
public class Chair {
public Chair(){
print("--姹借濺搴ф鏋勫緩瀹屾瘯--");
}
}
3錛夊紑濮嬮噸鐐逛簡錛屾苯杞︽垚鍝佺殑緇勮榪囩▼
public interface Builder {
/**緇勮姹借濺杞瓙*/
public void buildWheel();
/**緇勮姹借濺鍙戝姩鏈?/
public void buildEngine();
/**緇勮姹借濺鐜葷拑*/
public void buildGlass();
/**緇勮姹借濺搴ф*/
public void buildChair();
/**榪斿洖緇勮濂界殑姹借濺*/
public Car getCar();
}
浠ュ強瀹炵幇綾?/p>
public class CarBuilder implements Builder {
/**姹借濺鎴愬搧*/
private Car car;
public CarBuilder(){
car=new Car();
}
/**緇勮姹借濺杞瓙*/
@Override
public void buildChair() {
car.setChair(new Chair());
}
/**緇勮姹借濺鍙戝姩鏈?/
@Override
public void buildEngine() {
car.setEngine(new Engine());
}
/**緇勮姹借濺鐜葷拑*/
@Override
public void buildGlass() {
car.setGlass(new Glass());
}
/**緇勮姹借濺搴ф*/
@Override
public void buildWheel() {
car.setWheel(new Wheel());
}
/**榪斿洖緇勮濂界殑姹借濺*/
@Override
public Car getCar() {
buildChair();
buildEngine();
buildGlass();
buildWheel();
print("--鏁翠釜姹借濺鏋勫緩瀹屾瘯--");
return car;
}
}
4錛夋渶鍚庢苯杞﹀垱寤烘祴璇?/strong>
public static void main(String[] args) {
/**鍒涘緩姹借濺緇勮*/
Builder carBuilder=new CarBuilder();
Car car=carBuilder.getCar();
}
鏈鍚庤緭鍑猴細(xì)
--姹借濺搴ф鏋勫緩瀹屾瘯--
--姹借濺鍙戝姩鏈烘瀯寤哄畬姣?-
--姹借濺鐜葷拑鏋勫緩瀹屾瘯--
--姹借濺杞瓙鏋勫緩瀹屾瘯--
--鏁翠釜姹借濺鏋勫緩瀹屾瘯--
5錛?strong>浣撲細(xì)蹇冨緱錛?/strong>Builder妯″紡瀹為檯鐨勯噸鐐瑰氨鎶婃苯杞︾殑緇勮榪囩▼鍜岄浂閮ㄤ歡鐨勭敓浜у垎寮鏉ュ疄鐜幫紝闆墮儴浠剁殑鐢熸垚涓昏闈犺嚜宸辯殑瀵硅薄鏉ュ疄鐜幫紝鎴戜笂闈㈠彧鏄湪鏋勯犲嚱鏁伴噷鍒涘緩浜嗭紝姣旇緝綆鍗曪紝鑰岄噸鐐規(guī)苯杞︾殑緇勮鍒欎氦緇機(jī)arBuilder鏉ュ疄鐜幫紝鏈緇堢敱builder鏉ュ厛璐熻矗闆墮儴浠剁殑鍒涘緩錛屾渶鍚庤繑鍥炲嚭鎴愬搧鐨勬苯杞︺?/p>
1錛夌粡甯鎬嬌鐢ㄧ殑鍦版柟錛氫竴涓被鍙湁涓涓疄渚嬶紝eg:欏甸潰璁塊棶緇熻pv錛岀粺璁$殑涓暟灝卞彧鑳戒繚璇佷竴涓疄渚嬬殑緇熻銆?/p>
2錛夋垜浠洰鍓嶄嬌鐢ㄧ殑鎯呭喌錛氭瘮濡傛垜鎯沖垱寤轟竴涓璞★紝榪欎釜瀵硅薄甯屾湜鍙湁涓浠藉疄渚嬬殑緇存姢錛屽湪鍐呭瓨鐨勪繚瀛樹篃鍙湁涓浠斤紝涔熷氨鏄湪鍚屼竴涓猨vm鐨刯ava鍫嗛噷鍙繚瀛樹竴浠藉疄渚嬪璞★紝鎵浠ヤ綘浼?xì)鎯充竴鍔炴硶錛屽湪鍒涘緩榪欎釜瀵硅薄鐨勬椂鍊欙紝灝卞凡緇忚兘淇濊瘉鍙湁涓浠姐?/p>
3錛夋庝箞鏀硅繘錛氬畾涔夎瀵硅薄鐨勬椂鍊欙紝灝變繚璇佹槸鍚屼竴浠藉疄渚嬶紝姣斿錛氬畾涔変負(fù)縐佹湁鏋勯犲嚱鏁幫紝闃叉閫氳繃new鐨勬柟寮忓彲浠ュ垱寤哄璞★紝鐒跺悗鍦ㄥ璞¢噷瀹氫箟涓涓潤鎬佺殑縐佹湁鎴愬憳錛堟湰韜璞$殑涓涓疄渚嬶級錛岀劧鍚庡啀鍒涘緩涓涓闈㈣闂瀵硅薄鐨勬柟娉曞氨濂戒簡銆?/p>
4錛夋敼榪涚殑濂藉錛氫唬鐮佸湪緙栬瘧浠g爜榪欎釜綰у埆灝辮鎺у埗浜嗭紝涓嶈嚦浜庡湪jvm閲岃繍琛岀殑鏃跺欐墠鏉ヤ繚璇侊紝鎶婂敮涓瀹炰緥鐨勫垱寤轟繚璇佸湪緙栬瘧闃舵錛沯vm閲屽唴瀛樺彧鏈変竴浠斤紝浠庤屽唴瀛樺崰鏈夌巼鏇翠綆錛屼互鍙婃洿鏂逛究java鍨冨溇鍥炴敹
5錛夋敼榪涘悗鐨勫潖澶勶細(xì)鍙兘鏄唬鐮佺◢寰渶瑕佹洿澶氱偣錛屽叾瀹炲ぇ瀹舵渶鍚庡彂鐜版敼榪涘悗鐨勫潖澶勶紝閮芥槸浠g爜瀹氫箟姣斾箣闂磋澶氫竴鐐癸紝浣嗕互鍚庣殑緇存姢浠g爜灝遍檷涓嬫潵浜嗭紝涔熺煭鏆傜殑浠g爜閲忓亸澶ф潵鎹㈠彇浠ュ悗浠g爜鐨勭簿綆銆?br />
浜岋細(xì)涓涓疄闄呯殑渚嬪瓙
鎬諱綋鐨勪緥瀛?/p>
package com.mike.pattern.singleton;
/**
* 鎬葷粺
*
* @author taoyu
*
* @since 2010-6-22
*/
public class President {
private President(){
System.out.println("鎬葷粺宸茬粡閫変婦鍑烘潵浜?);
}
/**鎬葷粺鍙湁涓涓?/
private static President president=new President();
/**
* 榪斿洖鎬葷粺
*/
public static President getPresident(){
return president;
}
/**
* 鎬葷粺瀹e竷閫変婦鎴愬姛
*/
public void announce(){
System.out.println("浼熷ぇ鐨勪腑鍥戒漢姘戯紝鎴戝皢鎴愪綘浠柊鐨勬葷粺");
}
}
/**
* @param args
*/
public static void main(String[] args) {
President president=President.getPresident();
president.announce();
}
1錛夊瓙綾昏繃澶氾紝涓嶅鏄撶鐞嗭紱鏋勯犲璞¤繃紼嬭繃闀匡紱綺劇畝浠g爜鍒涘緩錛?br />
2)鐩墠鎴戜滑浠g爜鎯呭喌錛?緙栧啓浠g爜鐨勬椂鍊欙紝鎴戜滑緇忓父閮藉湪new瀵硅薄錛屽垱寤轟竴涓釜鐨勫璞★紝鑰屼笖榪樻湁寰堝楹葷儲鐨勫垱寤烘柟寮忥紝eg:HashMap<String,Float> grade=new HashMap<String,Float>(),榪欐牱鐨勪唬鐮佸垱寤烘柟寮忓お鍐楅暱浜嗭紝闅鵑亾浣犳病鏈夋兂榪囨妸榪欎釜鍒涘緩鍙樼殑鐭竴鐐逛箞錛屾瘮濡傦細(xì)HashMap<String,Float>grade=HashMapFactory.new(),鍙互鎶婁綘鍒涘緩綺劇畝涓鐐癸紱浣犱篃鍙互榪樻湁鍒殑闇姹傦紝鍦ㄥ垱寤哄璞$殑鏃跺欙紝浣犻渶瑕佷笉鍚岀殑鎯呭喌錛屽垱寤虹粺涓縐嶇被鍒殑瀵硅薄錛宔g:鎴戞兂鐢熸垚涓嶅悓鐨勬苯杞︼紝鍒涘緩灝忚嬌杞︼紝鍒涘緩鍗¤濺錛屽垱寤哄叕浜ゆ苯杞︾瓑絳夛紝閮藉睘浜庡悓縐嶇被鍒細(xì)姹借濺錛屼綘闅鵑亾娌℃湁鎯寵繃錛屾垜鎶婅繖浜涘垱寤虹殑瀵硅薄鍦ㄤ竴涓伐鍘傞噷鏉ヨ礋璐e垱寤猴紝鎴戞妸鍒涘緩鍒嗗紑鍖栵紝浜ょ粰涓浜烘潵璐熻矗錛岃繖鏍峰彲浠ヨ浠g爜鏇村姞瀹規(guī)槗綆$悊錛屽垱寤烘柟寮忎篃鍙互綆鍗曠偣銆?/p>
姣斿錛欳ar BMW=CarFactory.create(bmw); 鎶婂垱寤簄ew鐢變竴涓粺涓璐熻矗錛岃繖鏍風(fēng)鐞嗚搗鏉ョ浉褰撴柟渚?/p>
3錛夋庝箞鏀硅繘錛氳繖涓椂鍊欙紝浣犱細(xì)鎯沖埌錛屽垱寤鴻繖鏍峰悓綾誨埆鐨勪笢瑗匡紝鎴戞妸榪欎釜鏉冨埄鍒嗗嚭鍘伙紝璁╀竴涓漢鏉ュ崟鐙鐞嗭紝瀹冨彧璐熻矗鍒涘緩鎴戠殑瀵硅薄榪欎釜浜嬫儏錛屾墍浠ヤ綘鍗曠嫭綆鍘嗕竴涓璞℃潵鍒涘緩鍚岀被鐨勫璞★紝榪欎釜鏃跺欙紝浣犳兂榪欎釜涓滆タ鏈夌偣鍍忓伐鍘備竴鏍鳳紝鐢熸垚鍚屾牱鐨勪駭鍝侊紝鎵浠ュ彇浜嗕釜鍚嶅瓧錛氬伐鍘傛ā寮忥紝欏懼悕鎬濅箟錛屽彧璐熻矗瀵硅薄鐨勫垱寤?/p>
4錛夋敼榪涘悗鐨勫ソ澶勶細(xì)浠g爜鏇村姞瀹規(guī)槗綆$悊浜嗭紝浠g爜鐨勫垱寤鴻綆媧佸緢澶氥?/p>
5錛夋敼榪涘悗鐨勫潖澶勶細(xì)閭e氨鏄綘闇瑕佸崟鐙姞涓涓伐鍘傚璞℃潵璐熻矗鍒涘緩錛屽闇瑕佸啓鐐逛唬鐮併?br />
2.涓涓疄闄呯殑渚嬪瓙
鍒涘緩瀹濋┈姹借濺涓庡椹版苯杞︾殑渚嬪瓙
1錛夊厛鎻愬彇鍑轟竴涓苯杞︾殑鍏敤鎺ュ彛Car
public interface Car{
/**琛岄┒*/
public void drive();
}
2)瀹濋┈鍜屽椹版苯杞﹀璞?/p>
public class BMWCar implements Car {
/**
* 姹借濺鍙戝姩
*/
public void drive(){
System.out.println("BMW Car drive");
}
}
public class BengCar implements Car {
/**
* 姹借濺鍙戝姩
*/
public void drive(){
System.out.println("BengChi Care drive");
}
}
3)鍗曠嫭涓涓苯杞﹀伐鍘傛潵璐熻矗鍒涘緩
public class FactoryCar {
/**
* 鍒墮犳苯杞?br />*
* @param company 姹借濺鍏徃
* @return 姹借濺
* @throws CreateCarException 鍒墮犳苯杞﹀け璐ュ紓甯?br />*/
public static Car createCar(Company company)throws CreateCarException{
if(company==Company.BMW){
return new BMWCar();
}else if(company==Company.Beng){
return new BengCar();
}
return null;
}
}
4錛夋渶鍚庣殑浠g爜瀹炵幇錛?/p>
Car BMWCar=FactoryCar.createCar(Company.BMW);
BMWCar.drive();
2. 榪欎釜鏃跺欙紝浣犲彂鐜頒簡錛屾湰韜潰鍚戝璞$殑璇█閲岋紝宸茬粡鏆楄棌浜嗗緢澶氬ソ澶勶紝浣犺偗瀹氫細(xì)浠旂粏鍘誨垎鏋愰潰鍚戝璞¤繖涓璦錛岃鐪熷幓鎸栨帢閲岄潰鏇村鐨勫ゥ縐橈紝鏈鍚庯紝浣犲彂鐜頒簡錛屽師鏉ヤ綘鍙互鎶婇潰鍚戝璞$殑鐗規(guī)ф彁鍙栨垚涓涓叕鐢ㄧ殑瀹炵幇妗堜緥錛岃繖浜涙渚嬮噷鑳藉府鍔╀綘瑙e喅浣犲鉤鏃剁紪鍐欎唬鐮佺殑鍥版壈錛岃岃繖鏍蜂竴緹や漢錛屽氨鏄墍璋揼of鐨勬垚鍛橈紝浠栦滑浠庡鉤鏃惰璁″緩絳戞柟闈㈡壘鍒頒簡鐏墊劅錛屽緩絳戠殑璁捐涔熷彲浠ュ叕鐢ㄥ寲浠ュ強閲嶇敤鍖栵紝鎵浠ヤ粬浠篃鎻愬彇浜嗙浉鍏崇殑杞歡璁捐鏂歸潰鐨勫叕鐢ㄦ渚嬶紝涔熷氨鏈変簡涓嬮潰鐨勭浉鍏崇殑鎵璋?3縐嶈璁℃ā寮忥紝鑰岄噷闈㈣繖涔堝妯″紡錛屼綘涔熷彲浠ユ妸浠栦滑褰掔被璧鋒潵錛屾渶鍚庡彂鐜板氨鍑犵被妯″紡錛氬垱寤猴紝緇撴瀯錛岃涓虹瓑妯″紡綾誨埆錛岃岃繖浜涚幇鎴愮殑鏂規(guī)錛屼篃鍙互鍦ㄥ疄闄呭簲鐢ㄤ腑鍏呭垎鍙戞尌浣滅敤錛岄殢鐫澶у鐨勪嬌鐢ㄤ互鍙婄悊瑙o紝鍙戠幇鍏跺疄榪欎簺鎵璋撶殑妯″紡閲岋紝浣犵殑紜彲浠ヨ浣犵殑浠g爜鍙樼殑鏇村姞浼樼編涓庣畝緇冦?/p>
3. 鎴戞瘮杈冨枩嬈㈡妸浠g爜鍙樼殑鏇村姞浼樼編涓庣畝緇冿紝浼樼編鐨勪唬鐮佸氨鏄竴鐪嬪氨鎳傦紝緇撴瀯寰堟竻鏅幫紝鑰岀畝鍘嗗氨鏄竴鐩簡鐒訛紝鍙堝彲浠ヨВ鍐充綘鐨勯棶棰橈紝灝辨槸浠g爜鍙堝皯鏁堢巼鍙堥珮錛屾墍浠ュ鉤鏃惰鍏繪垚鍐檍ava doc鐨勪範(fàn)鎯紝榪欐牱鐨勪唬鐮佹墠涓烘竻鏅幫紝鎵浠ユ墠浼?xì)鏇村姞浼樉煄銆?/p>
4. 榪欎簺灝辨槸鎴戝璁捐妯″紡鐨勭悊瑙o紝鎵浠ヨ繖涔堝ソ鐨勫疂璐濓紝鎴戜滑涓嶅幓娣卞叆鐨勪簡瑙o紝鐨勭‘鍙儨浜嗭紝榪欏氨鍙珯鍒板法浜虹殑鑲╄唨涓?....