如图上所½C?MusicBoxDemo代表了客æˆïLš„角色,它åªä¾èµ–于IMusicBox界é¢,而ä¸å…›_¿ƒæ˜¯å¦‚何实现的.如何产生IMusicBoxç”±MusicBoxFactory完æˆ.以一个简å•çš„½E‹åºæ¥å®žçŽîC¸Šé¢è¿™ä¸ªUML¾cÕd›¾:
public interface IMusicBox {
public void play();
}
public class PianoBox implements IMusicBox {
public void play() {
System.out.println("æ’æ”¾é’¢ç´éŸ³ä¹:)");
}
}
public class ViolinBox implements IMusicBox {
public void play() {
System.out.println("æ’æ”¾ž®æç´éŸ³ä¹^_^");
}
}
public class MusicBoxFactory {
public static IMusicBox createMusicBox(String name)
throws InstantiationException,
IllegalAccessException,
ClassNotFoundException {
// ˜q™è¾¹ä½¿ç”¨çš„æ˜¯Javaçš„Reflection机制æ¥äñ”生实ä¾?br /> // ä¸è¿‡å®¢æˆ·ç«¯ä¸ç”¨ç®¡å•?br /> // 以厞®Þq®—改å˜äº†è¿™è¾¹çš„½E‹åºåQŒå®¢æˆïL«¯½E‹åºæ˜¯ä¸ç”¨æ›´æ”¹çš„
return (IMusicBox) Class.forName(name).newInstance();
}
}
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();
}
}
ç”׃ºŽå®¢æˆ·ç«¯åªä¾èµ–与IMusicBox介é¢åQŒæ‰€ä»¥å³ä½¿æ‚¨æ—¥åŽæ”¹å˜äº†createMusicBox()ä¸çš„实现方å¼åQŒå¯¹å®¢æˆ·ç«¯æ˜¯ä¸€ç‚¹åª„å“也没有çš?
æ¥çœ‹çœ‹Simple Factory的类¾l“æž„åQ?br />
客户åªè¦é¢å¯¹FactoryåQŒå®¢æˆ·ä¾èµ–于产å“介é¢åQŒäñ”å“的具体实现是å¯ä»¥ä¸Žå®¢æˆ¶éš”开的,它们也是å¯ä»¥æŠ½æ¢çš?