一.抽象工厂模式
在工厂方法模式中我们提到,每个具体工厂创造一个具体产品,那么抽象工厂模式就是在工厂方法模式中增加不同类别的产品,比如原来的工厂只可以造手机,现在抽象工厂可以造手机和电脑.
说白了,抽象工厂模式就是工厂方法模式的一种扩展
二.角色
还是四个角色
- 抽象工厂
- 具体工厂
- 抽象产品
- 具体产品
以前我只卖产品,现在我卖产品和点子
卖产品
//抽象产品类
abstract class Product{
abstract public void show();
}
//产品子类A
class ProductA extends Product{
@Override
public void show() {
System.out.println("创建了产品A");
}
}
//产品子类B
class ProductB extends Product{
@Override
public void show() {
System.out.println("创建了产品B");
}
}
同理,卖点子
abstract class Ider{
abstract public void show();
}
class IderA extends Ider{
@Override
public void show(){
System.out.println("创建了想法A");
}
}
class IderB extends Ider{
@Override
public void show(){
System.out.println("创建了想法B");
}
}
工厂类
//抽象工厂类
interface Facytory{
public Product createProduct(String type);
public Ider createIder(String type);
}
//工厂子类A
class FacytoryA implements Facytory{
@Override
public Product createProduct(String type) {
if(type.equals("Protduct")){
return new ProductA();
}else{
return null;
}
}
@Override
public Ider createIder(String type) {
if(type.equals("Ider")){
return new IderA();
}else{
return null;
}
}
}
//工厂子类B
class FacytoryB implements Facytory{
@Override
public Product createProduct(String type) {
if(type.equals("Protduct")){
return new ProductB();
}else{
return null;
}
}
@Override
public Ider createIder(String type) {
if(type.equals("Ider")){
return new IderB();
}else{
return null;
}
}
}
到这里,如果我想创建一个新产品或者工厂,那就得改变了,不是违反开闭原则吗?
其实在实际的开发设计过程中,是要在扩展与修改中权衡的,设计模式只提供一种思想