02 【创建型】抽象工厂模式 理解与使用
抽象工厂
大白话:一个最大的抽象工厂,它里面不仅有生产手机的工厂,也有生产家用电器的工厂,工厂里面套工厂,这就是抽象工厂,通过工厂生产出需要的工厂,再有生产出的工厂建造
生产不一样的产品
开个玩笑,我怎么可能做PHP呢 JAVA是世界上最好的语言,没有之一
就按照这个例子,有一家抽象工厂,它可以有生产手机和生产电器的工厂,它的工厂有具体的实现类(小米或者华为的工厂)
按照图形化来理解
1、创建一个生产手机的工厂
public interface PhoneFactory {
//生产方法
void create();
}
2、创建一个生产电器的工厂
//电器工厂,生产电器
public interface DianFactory {
//创造电器
void createDian();
}
3、创建一个抽象工厂,这个抽象工厂可以同时生产电器、手机
public abstract class Factory {
//获取手机工厂
public abstract PhoneFactory getPhoneFactory(String type);
//获取电器工厂
public abstract DianFactory getDianFactory(String type);
}
4、具体的抽象工厂继承类 比如小米可以生产、华为也可以生产
//小米工厂
public class XiaoMiFactory extends Factory {
@Override
public PhoneFactory getPhoneFactory(String type) {
return new XiaomiPhone();
}
@Override
public DianFactory getDianFactory(String type) {
return new XiaoMiDian();
}
}
小米手机的工厂生产小米手机、小米电器
public class XiaomiPhone implements PhoneFactory {
@Override
public void create() {
System.out.println("小米手机");
}
}
public class XiaoMiDian implements DianFactory {
@Override
public void createDian() {
System.out.println("小米生产电器");
}
}
同理、华为也可以继承工厂类、它也可以生产手机和电器
public class HuaWeiFactory extends Factory {
@Override
public PhoneFactory getPhoneFactory(String type) {
return new HuaWeiPhone();
}
@Override
public DianFactory getDianFactory(String type) {
return new HuaWeiDian();
}
}
public class HuaWeiPhone implements PhoneFactory {
@Override
public void create() {
System.out.println("生产华为手机");
}
}
public class HuaWeiDian implements DianFactory {
@Override
public void createDian() {
System.out.println("华为电器");
}
}
5.创建一个工厂调度器,来取出需要的工厂
public class FactoryProducer {
//按照名称获取工厂
public static Factory getFactory(String name){
if ("XIAOMI".equals(name)) {
return new XiaoMiFactory();
} else if ("HUAWEI".equals(name)) {
return new HuaWeiFactory();
}
return null;
}
}
最后我们main方法测试,传入HUAWEI, 则调出的是华为工厂,然后调用华为生产手机或者华为生产电器即可
public static void main(String[] args) {
Factory factory = getFactory("HUAWEI");
PhoneFactory phoneFactory = factory.getPhoneFactory(null);
phoneFactory.create();
}
参考:https://www.runoob.com/design-pattern/design-pattern-intro.html
码云:https://gitee.com/mrc1999/23GOF
但行好事,相信技术,转载请注明出处