抽象工厂模式属于创建型模式。
所谓抽象工厂也就是创建工厂的工厂,这里以创建华为手机、华为路由器、小米手机和小米路由器为例,来进行讲解。
华为手机和小米手机都属于手机产品,这里先定义一个手机产品接口
//手机产品的接口
public interface PhoneProduct {
public void start();
public void shutdown();
public void call();
}
华为路由器和手机路由器都属于路由器产品,同样定义一个路由器的接口
//路由器接口
public interface RouterProduct {
public void start();
public void shutdown();
public void openWifi();
}
不管是华为手机还是小米手机都属于手机产品,所以定义连个手机类都实现手机接口
public class HuaWeiPhone implements PhoneProduct {
@Override
public void start() {
System.out.println("华为手机开机");
}
@Override
public void shutdown() {
System.out.println("华为手机关机");
}
@Override
public void call() {
System.out.println("华为手机打电话");
}
}
public class XiaoMiPhone implements PhoneProduct {
@Override
public void start() {
System.out.println("小米手机开机");
}
@Override
public void shutdown() {
System.out.println("小米手机关机");
}
@Override
public void call() {
System.out.println("小米手机打电话");
}
}
同样的对华为路由器和小米路由器也都实现路由器的接口
public class HuaWeiRouter implements RouterProduct {
@Override
public void start() {
System.out.println("华为路由开机");
}
@Override
public void shutdown() {
System.out.println("华为路由关机");
}
@Override
public void openWifi() {
System.out.println("华为路由打开Wifi");
}
}
public class XiaoMiRouter implements RouterProduct {
@Override
public void start() {
System.out.println("小米路由开机");
}
@Override
public void shutdown() {
System.out.println("小米路由关机");
}
@Override
public void openWifi() {
System.out.println("小米路由打开Wifi");
}
}
不管是手机产品还是路由器产品,都属于产品,这里定义一个产品工厂接口
//抽象产品工厂
public interface ProductFactory {
//生产手机
PhoneProduct phoneProduct();
//生产路由器
RouterProduct routerProduct();
}
不管是华为手机还是华为路由器,都属于华为工厂的产品
public class HuaWeiFactory implements ProductFactory {
@Override
public PhoneProduct phoneProduct() {
return new HuaWeiPhone();
}
@Override
public RouterProduct routerProduct() {
return new HuaWeiRouter();
}
}
同样的,小米手机和小米路由器也是小米工厂的产品
public class XiaoMiFactory implements ProductFactory {
@Override
public PhoneProduct phoneProduct() {
return new XiaoMiPhone();
}
@Override
public RouterProduct routerProduct() {
return new XiaoMiRouter();
}
}
开始测试:
public class Main {
public static void main(String[] args) {
System.out.println("-----------小米产品-----------");
XiaoMiFactory xiaoMiFactory = new XiaoMiFactory();
PhoneProduct phoneProduct = xiaoMiFactory.phoneProduct();
phoneProduct.start();
phoneProduct.call();
RouterProduct routerProduct = xiaoMiFactory.routerProduct();
routerProduct.start();
routerProduct.openWifi();
System.out.println("-----------华为产品-----------");
HuaWeiFactory huaWeiFactory = new HuaWeiFactory();
PhoneProduct phoneProduct1 = huaWeiFactory.phoneProduct();
phoneProduct1.start();
phoneProduct1.call();
RouterProduct routerProduct1 = huaWeiFactory.routerProduct();
routerProduct1.start();
routerProduct1.openWifi();
}
}
运行结果: