具体代码见LocalDemo之shejimoshi
模块
举个例子,比如我们要做文件解析,那么我们可能用xml,json,text,html等;那么我就建四个对应的工厂,封装对应的解析方法就好;调用时只用根据文件类型获取对应的工厂,调用对应的解析方法即可;对于外部而言,就是一个工厂做了一个解析动作;封装内部的变化及实现
如上例子的实现
1 2 3 4 5 6 7 8 9 10 11 12
| src/ ├── main/ │ ├── java/ │ │ └── local/demo/test/shejimoshi/factory/ │ │ ├── Parser.java │ │ ├── XmlParser.java │ │ ├── JsonParser.java │ │ ├── TextParser.java │ │ ├── HtmlParser.java │ │ ├── ParserFactory.java │ │ ├── ClientMain.java │ │ └── ParserFactoryCreator.java
|
1.定义解析类接口
1 2 3
| public interface Parser { String parse(String content); }
|
2.实现解析类接口
1 2 3 4 5 6 7 8 9
| public class XmlParser implements Parser { @Override public String parse(String content) { return "XML Parsed: " + content; } }
|
3.定义工厂接口 ParserFactory.java
1 2 3
| public interface ParserFactory { Parser createParser(); }
|
4.实现具体的工厂类
1 2 3 4 5 6
| public class XmlParserFactory implements ParserFactory { @Override public Parser createParser() { return new XmlParser(); } }
|
5.创建工厂生成器ParserFactoryCreator
1 2 3 4 5 6 7 8 9 10 11
| public class ParserFactoryCreator { public static ParserFactory getFactory(String fileType) { switch (fileType.toLowerCase()) { case "xml": return new XmlParserFactory(); default: throw new IllegalArgumentException("Unsupported file type: " + fileType); } } }
|
6.调用示例
1 2 3 4 5 6 7 8 9 10 11 12
| public class ClientMain { public static void main(String[] args) { ParserFactory factory = ParserFactoryCreator.getFactory("xml");
Parser parser = factory.createParser(); String result = parser.parse("<root>data</root>");
System.out.println(result); } }
|
总结:工厂模式解决对象如何创建的问题,核心是生产对象;作用是创建对象,将对象的创建与使用分离