如果是工厂模式是对同一类商品进行抽象然后生产。
那么抽象工厂模式是对工厂的抽象,每个工厂都能生产多种产品,不同工厂生产的商品性质相同,但外观,品牌会略有差异。
设计模式,一定要敲代码理解
商品抽象
public interface Bed {
void getInfo();
}
public interface BedsideTable {
void getInfo_b();
}
public interface Chair {
void getInfo_c();
}
工厂抽象
/**
* @author ggbond
* @date 2024年04月01日 08:48
* 一个工厂 能同时生产 床,床头柜,椅子
*/
public interface Ifactory {
Bed productBed();
BedsideTable productBedsideTable();
Chair productChair();
}
具体抽象商品,看代码这里不展示了。
具体工厂
/**
* @author ggbond
* @date 2024年04月01日 08:53
* 工厂1 负责 生产 实木床, 实木床头柜,餐厅椅
*/
public class Factory01 implements Ifactory{
static {
System.out.println("我是工厂01");
}
@Override
public Bed productBed() {
return new WoodBed();
}
@Override
public BedsideTable productBedsideTable() {
return new SolidWoodBedsideTable();
}
@Override
public Chair productChair() {
return new DiningChair();
}
}
测试内容
public class Main {
public static void main(String[] args) {
Ifactory factory01=new Factory01();
Bed bed=factory01.productBed();
BedsideTable bedsideTable = factory01.productBedsideTable();
Chair chair = factory01.productChair();
bed.getInfo();
bedsideTable.getInfo_b();
chair.getInfo_c();
System.out.println("---------");
Ifactory factory02=new Factory02();
Bed bed02=factory02.productBed();
BedsideTable bedsideTable02 = factory02.productBedsideTable();
Chair chair02 = factory02.productChair();
bed02.getInfo();
bedsideTable02.getInfo_b();
chair02.getInfo_c();
}
}
结果展示
我是工厂01
生产了一个 实木床
生产了一个 实木床头柜
生产了一个 餐椅
---------
我是工厂02
生产了一个 铁艺床
生产了一个 涂漆床头柜
生产了一个 办公椅
总结
不同工厂生产同一商品族,但商品外形,品牌可差异化。
如果仅加 新工厂,对于商品也要对应实现。实现了单一与开闭原则
如果每个工厂新增商品 如上述家具工厂新增电视柜,那么之前每个工厂内部要加 生产电视柜 方法 与电视柜抽象与实现,破坏了开闭,同时当工厂数量过多时,改动工作量亦剧增。