錛夛紙榪欎釜鎬繪帶紼嬪簭涔熷彲浠ユ斁鍒版娊璞$殑宸ュ巶涓級鎸囧畾闇瑕佽皟鐢ㄧ殑鍏蜂綋宸ュ巶銆?/span>
棣栧厛鏉ュ垱寤篜lant.java綾伙紝瀹冨彧鏈変竴涓猲ame灞炴?/p>
public class Plant {
String name;
public Plant(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
鐒跺悗鏄疓arden綾伙紝3涓柟娉曞垎鍒槸寰楀埌涓績澶勩佽竟娌垮鍜岄槾鏆楀鐨勬鐗?/p>
public abstract class Garden {
public abstract Plant getCenter();
public abstract Plant getBorder();
public abstract Plant getShade();
}
涓嬮潰鏄?涓伐鍘傜被
/**
* 涓騫寸敓妞嶇墿鍥伐鍘?br />
* @author Heinvo Lee
*
*/
public class AnnualGarden extends Garden {
@Override
public Plant getCenter() {
// TODO Auto-generated method stub
return new Plant("Marigold");//涓囧鑿?/span>
}
@Override
public Plant getBorder() {
// TODO Auto-generated method stub
return new Plant("Alyssum");//鍗佸瓧鑺辯妞嶇墿錛涘涵鑽?/span>
}
@Override
public Plant getShade() {
// TODO Auto-generated method stub
return new Plant("Coleus");//钖勮嵎縐戞鐗?/span>
}
}
/**
* 甯稿勾鐢熸鐗╁洯宸ュ巶
* @author Heinvo Lee
*
*/
public class PerennialGarden extends Garden {
@Override
public Plant getCenter() {
// TODO Auto-generated method stub
return new Plant("Dicentrum");
}
@Override
public Plant getBorder() {
// TODO Auto-generated method stub
return new Plant("Sedum");//鏅ぉ灞炴鐗╋紱鍏疂
}
@Override
public Plant getShade() {
// TODO Auto-generated method stub
return new Plant("Astilbe");//钀芥柊濡囧睘妞嶇墿
}
}
/**
* 钄彍鍥伐鍘?br />
* @author Heinvo Lee
*
*/
public class VegieGarden extends Garden {
public Plant getCenter() {
return new Plant("Corn");
}
public Plant getBorder() {
return new Plant("Peas");
}
public Plant getShade() {
return new Plant("Broccoli");//鑺辨ぐ鑿?/span>
}
}
鎺ヤ笅鏉ュ垱寤烘繪帶綾籊ardenMaker
public class GardenMaker {
private Garden garden;
public Garden getGarden(String gtype)
{
garden = new VegieGarden(); //default
if(gtype.equals("Perennial"))
garden = new PerennialGarden();
if(gtype.equals("Annual"))
garden = new AnnualGarden();
return garden;
}
}
鐒跺悗鏄竴涓祴璇曠被浜?br />
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
GardenMaker gm=new GardenMaker();
Garden vg=gm.getGarden("Vegie");
Garden ag=gm.getGarden("Annual");
Garden pg=gm.getGarden("Perennial");
System.out.println("Vegie garden, center: "+vg.getCenter().getName());
System.out.println("Vegie garden, border: "+vg.getBorder().getName());
System.out.println("Vegie garden, shade: "+vg.getShade().getName());
System.out.println("------------------------------------");
System.out.println("Annual garden, center: "+ag.getCenter().getName());
System.out.println("Annual garden, border: "+ag.getBorder().getName());
System.out.println("Annual garden, shade: "+ag.getShade().getName());
System.out.println("------------------------------------");
System.out.println("Perennial garden, center: "+pg.getCenter().getName());
System.out.println("Perennial garden, border: "+pg.getBorder().getName());
System.out.println("Perennial garden, shade: "+pg.getShade().getName());
// TODO Auto-generated method stub
}
}
鎵ц榪欎釜嫻嬭瘯綾伙紝鍙互鍦ㄦ帶鍒跺彴鐪嬪埌浠ヤ笅鏁堟灉錛堟垜浠ョ孩鑹叉爣綰級
Vegie garden, center: Corn
Vegie garden, border: Peas
Vegie garden, shade: Broccoli
------------------------------------
Annual garden, center: Marigold
Annual garden, border: Alyssum
Annual garden, shade: Coleus
------------------------------------
Perennial garden, center: Dicentrum
Perennial garden, border: Sedum
Perennial garden, shade: Astilbe
浠庤繖涓緥瀛愭垜鐪嬪嚭浠ヤ笅錛?br />
GardenMaker gm=new GardenMaker();
Garden vg=gm.getGarden("Vegie");
Garden ag=gm.getGarden("Annual");
Garden pg=gm.getGarden("Perennial");
涓婇潰4鍙ヤ唬鐮佹槸嫻嬭瘯綾婚噷闈㈢殑
褰撻渶瑕佺敓浜ф煇涓縐嶆鐗╁洯鐨勫竷灞鏃訛紝鍙渶瑕佸皢妞嶇墿鍥殑綾誨瀷鍛婅瘔鎬繪帶紼嬪簭錛圙ardenMaker.java錛夛紝榪欓噷鏄紶鍏ュ弬鏁癡egie銆丄nnual銆丳erennial錛屾繪帶紼嬪簭鍐沖畾浣跨敤鐢熶駭鎸囧畾綾誨瀷妞嶇墿鍥殑宸ュ巶鐢熶駭鍑洪渶瑕佺殑“浜у搧鏃?#8221;錛岃屽湪姝よ繃紼嬩腑錛屼笉闇瑕佷簡瑙e叿浣撳伐鍘備腑鐨勬柟娉曟槸濡備綍瀹炵幇鐨勩?/span>

]]>