设计模式之工厂模式:(参照:郭克华讲座)
****************************************************************************
package factory01;
//场景:Action调用Dao,DaoFacotry来创建dao
//面向接口编程 避免调用时改变(行9改变下面都要变)
//建立工厂类 只注重模块生成,不注重什么时候生成,降低了耦合性
//为所有的dao服务--spring 可切换,降低了耦合性
class Action {
public void classDao() {
// CustomerDao dao = new CustomerDao();
ICustomerDao dao = (ICustomerDao)DaoFactory.getDao("Customer");
dao.login();
}
}
class DaoFactory {
public static Object getDao(String daoName) {
if(daoName.equals("Customer")) {
//事先准备工作
return new CustomerDao();
}
// else if(/**/) {
//
// }
return null;
}
public static Object getDao1(String daoName) {
try {
//根据配置文件得className xml 配置
String className = "";
return Class.forName(className).newInstance();//spring
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
interface ICustomerDao {
public abstract void login();
}
class CustomerDao implements ICustomerDao {
public void login() {
System.out.println("Dao login!");
}
}
public class Facotry1 {
}
/**
优点:客户类的工厂类分开。消费者任何时候需要某种产品,
只需向工厂请求即可。消费者无须修改就可以接纳新产品。
缺点:当产品修改时,工厂类也要做相应的修改,但spring
能克服。
应用:A 模块间调用时模块可调用接口较多的情况
B 实例化一个对象可能要进行复杂操作的情况
应用实例:spring 调用过程
*/
**********************************************************************
****************************************************************************
package factory01;
//场景:Action调用Dao,DaoFacotry来创建dao
//面向接口编程 避免调用时改变(行9改变下面都要变)
//建立工厂类 只注重模块生成,不注重什么时候生成,降低了耦合性
//为所有的dao服务--spring 可切换,降低了耦合性
class Action {
public void classDao() {
// CustomerDao dao = new CustomerDao();
ICustomerDao dao = (ICustomerDao)DaoFactory.getDao("Customer");
dao.login();
}
}
class DaoFactory {
public static Object getDao(String daoName) {
if(daoName.equals("Customer")) {
//事先准备工作
return new CustomerDao();
}
// else if(/**/) {
//
// }
return null;
}
public static Object getDao1(String daoName) {
try {
//根据配置文件得className xml 配置
String className = "";
return Class.forName(className).newInstance();//spring
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return null;
}
}
interface ICustomerDao {
public abstract void login();
}
class CustomerDao implements ICustomerDao {
public void login() {
System.out.println("Dao login!");
}
}
public class Facotry1 {
}
/**
优点:客户类的工厂类分开。消费者任何时候需要某种产品,
只需向工厂请求即可。消费者无须修改就可以接纳新产品。
缺点:当产品修改时,工厂类也要做相应的修改,但spring
能克服。
应用:A 模块间调用时模块可调用接口较多的情况
B 实例化一个对象可能要进行复杂操作的情况
应用实例:spring 调用过程
*/
**********************************************************************