工厂方法模式

来源:互联网 发布:钢琴淘宝 编辑:程序博客网 时间:2024/04/30 03:13

继承简单工厂模式的优点,有弥补了他的缺点

暂时附上代码,以后慢慢完善

1.抽象产品类TV(电视机类)

package com.th.designedmodem;public interface TV {public void play();}

2.具体产品类HaierTV(海尔电视机类)

package com.th.designedmodem;public class HaierTV implements TV {@Overridepublic void play() {System.out.println("海尔电视机播放中。。。");}}
3.具体产品类HisenseTV(海信电视机类)
package com.th.designedmodem;public class HisenseTV implements TV {@Overridepublic void play() {System.out.println("海信电视机播放中。。。。");}}

4.抽象工厂类TVFactory(电视机工厂类)

package com.th.designedmodem;public interface TVFactory {public TV produceTV();}


5.具体工厂类HaierTVFactory(海尔电视机工厂类)
package com.th.designedmodem;public class HaierTVFactory implements TVFactory {@Overridepublic TV produceTV() {System.out.println("海尔电视机工厂生产海尔电视机。。。。");return new HaierTV();}}


6.具体工厂类HisenseTVFactory(海信电视机工厂类)
package com.th.designedmodem;public class HisenseTVFactory implements TVFactory {@Overridepublic TV produceTV() {System.out.println("海信电视机工厂生产海信电视机。。。。");return new HisenseTV();}}


7.XMLUtil类
package com.th.designedmodem;import javax.xml.parsers.*;import org.w3c.dom.*;import java.io.*;public class XMLUtil {public static Object getBean(){try{DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;doc = builder.parse(new File("config.xml"));NodeList nl = doc.getElementsByTagName("className");Node classNode = nl.item(0).getFirstChild();String cName = classNode.getNodeValue().trim();Class c = Class.forName(cName);Object obj = c.newInstance();return obj;}catch (Exception e){e.printStackTrace();return null;}}}


9.客户端测试类Client
package com.th.designedmodem;public class Client {public static void main(String[] args) {try{TV tv;TVFactory factory;factory = (TVFactory) XMLUtil.getBean();tv = factory.produceTV();tv.play();}catch (Exception e){System.out.println(e.getMessage());System.out.println("heheda");}}}


config.xml文件(放到工程根目录下)
<?xml version="1.0" ?><config><className>com.th.designedmodem.HaierTVFactory</className></config>





0 0
原创粉丝点击