抽象工厂模式
抽象工厂模式是围绕一个生成工厂的超级工厂。在该设计模式下,方便获取工厂对象,更加便于理解。即在获取对象时不用再考虑选择使用什么工厂接口,而是直接从超级工厂中获取。
实现
创建clothing 服装类接口。 clothes,pants接口继承于clothing
public interface Clothing {
void show();
}
public interface Clothes extends Clothing {
}
public interface Pants extends Clothing {
}
//clothes与pants接口仅作标记
创建coat、shirt实现clothes接口, jeans、slacks实现pants接口,并重写show方法
public class Coat implements Clothes {
@Override
public void show() {
System.out.println("this is a coat");
}
}
....
创建ClothingFactory接口
public interface ClothingFactory {
Clothing getClothing(String type);
}
创建ClothesFactory,PantsFactory实现ClothingFactory
public class ClothesFactory implements ClothingFactory {
@Override
public Clothing getClothing(String type) {
switch (type) {
case "shirt": return new Shirt();
case "coat": return new Coat();
default: return null;
}
}
}
public class PantsFactory implements ClothingFactory {
@Override
public Clothing getClothing(String type) {
switch (type){
case "jeans": return new Jeans();
case "slacks": return new Slacks();
default: return null;
}
}
}
最后创建超级工厂ClothingAbsFactory,该类即是用来创建衣服和裤子的工厂的类
public class ClothingAbsFactory {
public ClothingFactory getFactory(String type) {
switch (type) {
case "clothes": return new ClothesFactory();
case "pants": return new PantsFactory();
default: return null;
}
}
}
//主函数
public class mian {
public static void main(String[] args) {
var factory = new ClothingAbsFactory();
factory.getFactory("clothes")
.getClothing("coat")
.show();
//this is a coat
}
}