**
设计模式之抽象工厂模式
**
抽象工厂模式(Abstract Factory Pattern)定义
provide an interface for creating families of related or dependent objects without specifying their concrete classes.
(为创建一组相关或相互依赖的对象提供一个接口,而且无需指定它们的具体类。)
图解
优点
- 封装性,每个产品的实现类不是高层模块要关心的,它要关心的是什么?是接口,是抽象,它不关心对象是如何创建出来,是由谁负责的?工厂类,只要知道工厂类是谁,我就能创建出一个需要的对象,省时省力,优秀设计就应该如此
- 产品族内的约束为非公开状态
代码详解
1.首先创建一个抽象产品A类
public abstract class AbstractProductA {
//每个商品都共有都方法
public void shareMethod(){
}
//每个商品特有都方法
public abstract void doSomething();
}
2.然后为它指定两道工序ProductA1.class ProductA2.class
public class ProductA1 extends AbstractProductA {
//产品A1需要做的事情
@Override
public void doSomething() {
}
}
public class ProductA2 extends AbstractProductA {
//产品A2需要做的事情
@Override
public void doSomething() {
}
}
3.接着创建一个抽象产品B类
public abstract class AbstractProductB {
//每个商品都有方法
public void shareMethod(){
}
//每个商品特有都方法
public abstract void doSomething();
}
4.然后为它指定两道工序ProductB1.class ProductB2.class
public class ProductB1 extends AbstractProductB {
//产品B1需要做的事情
@Override
public void doSomething() {
}
}
public class ProductB2 extends AbstractProductB{
//产品B1需要做的事情
@Override
public void doSomething() {
}
}
5.创建一个工厂抽象类
public abstract class AbstractCreator {
//生产产品A
public abstract AbstractProductA createProductA();
//生产产品B
public abstract AbstractProductB createProductB();
}
6.创建一个工厂类Creator1.class完成产品的第一套工序,在创建一个工厂类Creator2.class完成产品的第二套工序
public class Creator1 extends AbstractCreator {
//生产产品A的A1类产品
@Override
public AbstractProductA createProductA() {
return new ProductA1();
}
//生产产品B的B1类产品
@Override
public AbstractProductB createProductB() {
return new ProductB1();
}
}
public class Creator2 extends AbstractCreator {
//生产产品A的A2类产品
@Override
public AbstractProductA createProductA() {
return new ProductA2();
}
//生产产品B的B2类产品
@Override
public AbstractProductB createProductB() {
return new ProductB2();
}
}
7.开工创建产品
public class Client {
@Test
public void test(){
//1类产品创建工厂
AbstractCreator creator1 = new Creator1();
//2类产品的创建工厂
AbstractCreator creator2 = new Creator2();
//创建出1类产品
AbstractProductA productA1 = creator1.createProductA();
AbstractProductB productB1 = creator1.createProductB();
//创建出2类产品
AbstractProductA productA2 = creator2.createProductA();
AbstractProductB productB2 = creator2.createProductB();
//做自己想做的事情
}
}