标签:基础 end ctf singleton tps 代码 str 设计模式 连接
Product
负责定义产品的特性,实现对事物的抽象定义。AbstractFactory
是抽象工厂类,定义了一个抽象工厂方法。具体的如何创建产品由工厂实现类ConcreteFactory
完成。抽象产品类
:public abstract class Product {
/**
* 公共逻辑方法
*/
public void method1(){}
/**
* 抽象方法:由子类实现,根据业务逻辑定义多个
*/
public abstract void method2();
}
具体产品类1
,继承抽象产品类,如下:public class Product1 extends Product {
/**
* 实现抽象产品类的抽象方法
*/
@Override
public void method2() {
}
}
具体产品类2
,继承抽象产品类,如下:public class Product2 extends Product {
/**
* 实现抽象产品类的抽象方法
*/
@Override
public void method2() {
}
}
抽象工厂类
,必须定义一个工厂方法来自己实现具体的创建逻辑,如下:public abstract class AbstractFactory {
/**
* 工厂方法,需要子类实现
* @param cls
* @param <T>
* @return
*/
public abstract <T extends Product> T create(Class<T> cls);
}
public class ConcreteFactory extends AbstractFactory {
@Override
public <T extends Product> T create(Class<T> cls) {
Product product=null;
try{
product= (Product) Class.forName(cls.getName()).newInstance();
}catch (Exception ex){
ex.printStackTrace();
}
return (T) product;
}
}
public static void main(String[] args) {
//创建具体工厂类
ConcreteFactory factory = new ConcreteFactory();
//调用工厂方法获取产品类1的实例
Product1 product1 = factory.create(Product1.class);
System.out.println(product1);
}
JDBC
连接数据库时,只需要改动一个驱动的名称,数据库就会从Mysql
切换到Oracle
,极其灵活。
public abstract class AbstractFactory {
/**
* 工厂方法,需要子类实现
*/
public abstract <T extends Product> T create();
}
AbstractFactoryBean
。FactoryBean
接口,这个接口中getObject()
方法返回真正的Bean实例。AbstractFactoryBean
中的getObject()
方法如下:public final T getObject() throws Exception {
//单例,从缓存中取,或者暴露一个早期实例解决循环引用
if (isSingleton()) {
return (this.initialized ? this.singletonInstance : getEarlySingletonInstance());
}
//多实例
else {
//调用createInstance
return createInstance();
}
}
//创建对象
protected abstract T createInstance() throws Exception;
createInstance
这个抽象方法,由其子类去定制自己的创建逻辑。AbstractFactoryBean
的具体工厂类,如下:
AbstractFactoryBean
是抽象工厂类,不如说FactoryBean
是真正的抽象工厂类,前者只是对后者的一种增强,完成大部分的可复用的逻辑。比如常用的sqlSessionFactoryBean
只是简单的实现了FactoryBean
,并未继承AbstractFactoryBean
,至于结论如何,具体看你从哪方面看了。标签:基础 end ctf singleton tps 代码 str 设计模式 连接
原文地址:https://www.cnblogs.com/Chenjiabing/p/12641653.html