以下内容主要参照《大话设计模式》以及一些自己的理解
1.简单工厂
特点:所有产品类实例由一个简单工厂生产,一旦增加新的产品类,需要修改简单工厂类(违背了开放-封闭原则),但是客户端不需要修改
2.工厂方法
特点:一个产品类实例由其对应的工厂类生产,增加一个新的产品类,只需要添加对应的工厂类,不需要修改代码,但是客户端代码需要修改
3.抽象工厂
特点:一个工厂可以生产多个产品类实例,例如华为工厂可以生产华为路由器、华为手机(华为路由器又属于路由器(下边还有思科路由器等),华为手机属于手机(下边还有小米手机等))
添加一个产品时,需要添加产品接口、具体产品类,修改工厂接口,修改或添加具体工厂类
适用于交换产品系列,例如在客户端修改IFactory factory=new AccessFactory();
《大话设计模式》中给出一种方法改善:使用简单工厂结合反射机制改善抽象工厂
public class DataBase{
private String db;
public void setDb(String db){
this.db=db;
}
public static IUser createUser(){
Class clazz= Class.forName(db+"User");
return clazz.newInstance().createUser();
}
public static Departepartment IDepartment(){
Class clazz=Class.forName(db+"Department");
return clazz.newInstance().createDepartment();
}
}
public class Client{
public static void main(String[] args){
User user=new User();
Department department=new Department();
DataBase database=new DataBase();
DataBase.setDb("SqlServer");
IUser iu=DataBase.createUser();
iu.insert(user);
iu.getUser(1);
IDepartment id=DataBase.createDepartment();
id.insert(department);
id.getDepartment(1);
}
}