(今天自己再来看这篇文章,发现跟上一篇文章好像没什么区别啊,又去翻了翻书,才发现还是有点区别的,是自己没写明白,对于误导的同学,在这里说声对不起,自己以前真是太年轻啊。。。。)
定义:工厂模式是我们软件设计最常用的实例化对象模式,是用工厂方法代替new操作的一种模式。
好处:在创建一类对象时,使用工厂模式,给系统带来更大的可扩展性和更少的修改量代码:
package factorymodel.abstractfactory;
/**
*
* @author naivor 抽象工厂模式_场景类
*
*/
public class AbstractFactory {
public static void main(String[] args) {
Factory factory = new Product1Factory(); // 通过改变工厂类型来改变产品类型
Product product = factory.createProductA(); // 通过改变生产的系列来改变产品系列
product.doSomething();
factory=new Product2Factory();
product = factory.createProductA(); // 通过改变生产的系列来改变产品系列
product.doSomething();
factory=new Product3Factory();
product = factory.createProductA(); // 通过改变生产的系列来改变产品系列
product.doSomething();
}
}
/**
*
* @author naivor 抽象工厂模式_工厂接口
*/
interface Factory {
Product createProductA();
Product createProductB();
.... //这里就是与上一篇文章的区别,可以生产一系列的产品,改变工厂(也许生产方式不一样),还是可以生产同样东西
}
/**
*
* @author naivor 抽象工厂模式_产品1工厂
*/
class Product1Factory implements Factory {
public Product createProductA() {
return new ProductA1();
}
public Product createProductB() {
return new ProductB1();
}
}
/**
*
* @author naivor 抽象工厂模式_产品2工厂
*/
class Product2Factory implements Factory {
public Product createProductA() {
return new ProductA2();
}
public Product createProductB() {
return new ProductB2();
}
}
/**
*
* @author naivor 抽象工厂模式_产品3工厂
*/
class Product3Factory implements Factory {
public Product createProductA() {
return new ProductA3();
}
public Product createProductB() {
return new ProductB3();
}
}
/**
*
* @author naivor 抽象工厂模式_产品接口
*/
interface Product {
void doSomething();
}
/**
*
* @author naivor 抽象工厂模式_A系列产品1类
*/
class ProductA1 implements Product {
public void doSomething() {
// ProductA1的业务逻辑
}
}
/**
*
* @author naivor 抽象工厂模式_A系列产品2类
*/
class ProductA2 implements Product {
public void doSomething() {
// ProductA2的业务逻辑
}
}
/**
*
* @author naivor 抽象工厂模式_A系列产品3类
*/
class ProductA3 implements Product {
public void doSomething() {
// ProductA3的业务逻辑
}
}
/**
*
* @author naivor 抽象工厂模式_B系列产品1类
*/
class ProductB1 implements Product {
public void doSomething() {
// ProductB1的业务逻辑
}
}
/**
*
* @author naivor 抽象工厂模式_B系列产品2类
*/
class ProductB2 implements Product {
public void doSomething() {
// ProductB2的业务逻辑
}
}
/**
*
* @author naivor 抽象工厂模式_B系列产品3类
*/
class ProductB3 implements Product {
public void doSomething() {
// ProductB3的业务逻辑
}
}
区别:解决生产不同系列的产品问题。