一、抽象工厂模式简介(Bref Introduction)
抽象工厂模式(Abstract Factory Pattern),提供一个创建一系列相关或者相互依赖对象的接口,而无需制定他们的具体类。优点是:易于交换产品系列,由于具体工厂类在一个应该用中只需要在初始化的时候出现一次,这就使得改变一个应用的具体工厂类变得非常容易,它只需要改变具体工厂即可使用不同的产品配置。抽象工厂的另一个优点是,它让具体的创建实例与客户端分离,客户端是通过他们的抽象接口操纵实例,产品的具体类名也被具体工厂的实现分离,不会出现在客户的代码中。
二、解决的问题(What To Solve)
常用用于解决数据访问程序,也就是说程序通过使用抽象工厂模式后,可以灵活地在不同的数据库之间切换,而不需要费时费力地改变原有程序。
三、抽象工厂模式分析(Analysis)
四.实例分析(Example)
1、接口ProductA、ProductB,及其具体实现类 ConcreteProductA,ConcreteProductBpublic interface ProductA {
public void operation(String s);
}
public interface ProductB {
public void operation(String s);
}
public class ConcreteProductA1 implements ProductA{
public void operation(String s){
System.out.println("===================ConcreteProductA1 Begin=====================");
System.out.println("==============="+s+"=================");
System.out.println("====================ConcreteProductA1 End======================");
}
}
public class ConcreteProductA2 implements ProductA{
public void operation(String s){
System.out.println("===================ConcreteProductA2 Begin=====================");
System.out.println("==============="+s+"=================");
System.out.println("====================ConcreteProductA2 End======================");
}
}
public class ConcreteProductB1 implements ProductB{
public void operation(String s){
System.out.println("===================ConcreteProductB1 Begin=====================");
System.out.println("==============="+s+"=================");
System.out.println("====================ConcreteProductB1 End======================");
}
}
public class ConcreteProductB2 implements ProductB{
public void operation(String s){
System.out.println("===================ConcreteProductB2 Begin=====================");
System.out.println("==============="+s+"=================");
System.out.println("====================ConcreteProductB2 End======================");
}
}
2、抽象工厂接口Abstract'Factory及其实现
public interface AbstractFactory {
public ProductA createProductA();
public ProductB createProductB();
}
public class ConcreteFactory1 implements AbstractFactory {
public ProductA createProductA() {
return new ConcreteProductA1();
}
public ProductB createProductB() {
return new ConcreteProductB1();
}
}
public class ConcreteFactory2 implements AbstractFactory {
public ProductA createProductA() {
return new ConcreteProductA2();
}
public ProductB createProductB() {
return new ConcreteProductB2();
}
}
3、客户端调用
public class Client {
public static void main(String[] args) {
//创建第一套产品
AbstractFactory asf = new ConcreteFactory1();
ProductA productA = asf.createProductA();
ProductB productB = asf.createProductB();
productA.operation("创建第一套产品中的A部分");
productB.operation("创建第一套产品中的B部分");
System.out.println();
//创建第一套产品
AbstractFactory asf1 = new ConcreteFactory1();
ProductA productA1 = asf.createProductA();
ProductB productB1 = asf.createProductB();
productA1.operation("创建第二套产品中的A部分");
productB1.operation("创建第二套产品中的B部分");
}
}
运行结果: