工厂模式在mvc模型中的应用
在web开发中我们常用mvc模式进行web应用的开发
当应用进入service 层的时候我们根据不同的业务多逻辑进行处理
当有数据进入controller的时候
public class VirtualController {
private static Service service = CommonFactory.getFactory().getInstance(Service.class);
public static void main(String[] args) {
User nuser= new User();
nuser.setName("李某");
service.insert(nuser);
}
}
首先是实体类
public class User { public String getName() { return name; } public void setName(String name) { this.name = name; } private String name; }
所以到我们定义一个service 的接口 处理所有用户的业务
//也就是相当于子工厂
public interface Service {
public void insert(User user);
public void deldte(User user);
}
//子工厂的实现
public class UserService implements Service{
private Dao dao = CommonFactory.getFactory().getInstance(Dao.class);
@Override
public void insert(User user) {
System.out.println("普通用户业务");
dao.insert(user);
}
@Override
public void deldte(User user) {
}
}
public class VipService implements Service{
private Dao dao = CommonFactory.getFactory().getInstance(Dao.class);
@Override
public void insert(User user) {
System.out.println("Vip用户业务");
}
@Override
public void deldte(User user) {
}
}
Dao层
public interface Dao {
public void insert(User user);
public void deldte(User user);
}
public class MysqlDao implements Dao{
@Override
public void insert(User user) {
System.out.println("Mysql 插入用户信息 "+ user.getName());
}
@Override
public void deldte(User user) {
}
}
public class OrcalDao implements Dao{
@Override
public void insert(User user) {
System.out.println("Mysql 插入用户信息 "+ user.getName());
}
@Override
public void deldte(User user) {
}
}
工厂的实现
public class CommonFactory {
private Properties properties=new Properties();
private CommonFactory(){};
private static CommonFactory factroy= new CommonFactory();
public static CommonFactory getFactory(){
return factroy;
}
public <T> T getInstance(Class<T> clazz) {
try {
properties.load(new FileInputStream("C:\\Users\\Administrator.TEDU-20180130RP\\IdeaProjects\\springboot\\hello\\resource\\config.properties"));
String _className=clazz.getSimpleName();
String className=properties.getProperty(_className);
return (T) Class.forName(className).newInstance();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
这样我们就可以通过修改配置文件进行对不同业务的处理,也好像是tomcat 以及jdbc的原理