抽象工厂模式
-
超级工厂,创建工厂的工厂
-
提供一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类
-
适用于产品等级数量相对固定的产品族,使用抽象工厂。如小米,产品等级,手机,路由等。它们都属于小米这个产品族。
-
适合产品类型是固定,否则新增产品,对于代码的改动影响是比较大的
简化图
具体代码
产品接口-手机
package com.tiko.factory.abstractFactory;
public interface PhoneProduct {
void start();
void shutdown();
void call();
void sendMessage();
}
产品接口-路由器
package com.tiko.factory.abstractFactory;
public interface RouterProduct {
void start();
void shutdown();
void openWifi();
void setting();
}
小米手机实现
package com.tiko.factory.abstractFactory;
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("小米打电话");
}
@Override
public void sendMessage() {
System.out.println("小米发短信");
}
}
华为手机实现
package com.tiko.factory.abstractFactory;
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("华为打电话");
}
@Override
public void sendMessage() {
System.out.println("华为发短信");
}
}
小米路由器实现
package com.tiko.factory.abstractFactory;
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");
}
@Override
public void setting() {
System.out.println("设置小米wifi");
}
}
华为路由器实现
package com.tiko.factory.abstractFactory;
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");
}
@Override
public void setting() {
System.out.println("设置华为wifi");
}
}
抽象工厂
package com.tiko.factory.abstractFactory;
//抽象产品工厂
//生产手机和生产路由器
public interface AbstractFactory {
//工厂应该能生产手机
PhoneProduct phoneProduct();
//工厂应该能生产路由器
RouterProduct routerProduct();
}
小米工厂实现
package com.tiko.factory.abstractFactory;
public class XiaomiFactory implements AbstractFactory {
@Override
public PhoneProduct phoneProduct() {
return new XiaomiPhone();
}
@Override
public RouterProduct routerProduct() {
return new XiaomiRouter();
}
}
华为工厂实现
package com.tiko.factory.abstractFactory;
public class HuaweiFactory implements AbstractFactory {
@Override
public PhoneProduct phoneProduct() {
return new HuaweiPhone();
}
@Override
public RouterProduct routerProduct() {
return new HuaweiRouter();
}
}
调用者调用
package com.tiko.factory.abstractFactory;
public class Client {
public static void main(String[] args) {
System.out.println("====小米====");
//小米工厂
XiaomiFactory xiaomiFactory = new XiaomiFactory();
PhoneProduct phoneProduct = xiaomiFactory.phoneProduct();
phoneProduct.call();
System.out.println("====华为====");
//华为工厂
HuaweiFactory huaweiFactory = new HuaweiFactory();
RouterProduct routerProduct = huaweiFactory.routerProduct();
routerProduct.setting();
}
}
参考自狂神说