工厂模式属于创建型模式,可细分为简单工厂、工厂方法、抽象工厂三种。
简单工厂
下面以配置文件解析器的例子来看看简单工厂模式的简单使用
/*
* 配置文件解析器接口
*/
interface ConfigParser {
}
/*
* xml文件配置解析器
*/
class XmlConfigParser implements ConfigParser{
}
/*
* json文件配置解析器
*/
class JsonConfigParser implements ConfigParser{
}
/*
* 通过简单工厂模式创建配置解析器方式1:
* 什么时候使用什么时候创建
*/
class ConfigParserFactory1 {
public static ConfigParser createParser(String type){
ConfigParser configParser = null;
if ("xml".equals(type)){
configParser = new XmlConfigParser();
}
else if("json".equals(type)){
configParser = new JsonConfigParser();
}
return configParser;
}
}
/*
* 通过简单工厂模式创建配置解析器方式2:
* 类加载的时候就创建好所有解析器并放入map中,需要的时候从map中取出
*/
class ConfigParserFactory2 {
private static final Map<String, ConfigParser> parsers = new HashMap<>();
static {
parsers.put("xml", new XmlConfigParser());
parsers.put("json", new JsonConfigParser());
}
public static ConfigParser createParser(String type){
return parsers.get(type);
}
}
工厂方法
工厂方法模式可以理解为工厂的工厂,等于在简单工厂类外面又包了一层工厂类。
interface IParser {
}
class XmlParser implements IParser{
}
class JsonParser implements IParser{
}
interface IParserFactory {
IParser createParser();
}
class XmlParserFactory implements IParserFactory {
@Override
public IParser createParser() {
return new XmlParser();
}
}
class JsonParserFactory implements IParserFactory {
@Override
public IParser createParser() {
return new JsonParser();
}
}
class ParserFactory {
private static final Map<String, IParserFactory> factorys = new HashMap<>();
static {
factorys.put("xml", new XmlParserFactory());
factorys.put("json", new JsonParserFactory());
}
public static IParserFactory createFactory(String type) {
return factorys.get(type);
}
}
抽象工厂
抽象工厂不常用,这里就先不介绍了