设计模式之抽象工厂
我们介绍抽象工厂设计模式一共分两步:
第一步,先创建产品的抽象接口及具体实现类
第二步,再创建工厂的抽象接口及具体实现类
具体如下:
第一步:
- 先构造抽象的产品的接口
- 再实现接口的具体实现类
点击查看代码
//———————————————————————————产品:手机接口及实现类—————————————————————————————————————
//产品接口——PhoneProduct
public interface PhoneProduct {
void call();
void send();
}
//产品实现类——XiaomiPhone
public class XiaomiPhone implements PhoneProduct{
@Override
public void call() {
System.out.println("小米手机打电话");
}
@Override
public void send() {
System.out.println("小米手机发短信");
}
}
//产品实现类——HuaweiPhone
public class HuaweiPhone implements PhoneProduct{
@Override
public void call() {
System.out.println("华为手机打电话");
}
@Override
public void send() {
System.out.println("华为手机发短信");
}
}
//———————————————————————————产品:路由器接口及实现类—————————————————————————————————————
//产品接口——RouterProduct
public interface RouterProduct {
void connect();
void shut();
}
//产品实现类——XiaomiRouter
public class XiaomiRouter implements RouterProduct{
@Override
public void connect() {
System.out.println("小米路由器连接");
}
@Override
public void shut() {
System.out.println("小米路由器关机");
}
}
//产品实现类——HuaweiRouter
public class HuaweiRouter implements RouterProduct{
@Override
public void connect() {
System.out.println("华为路由器连接");
}
@Override
public void shut() {
System.out.println("华为路由器关机");
}
}
第二步:
- 先构造抽象的工厂接口,工厂内部的方法只与前面的抽象的产品接口相关,所以该工厂是抽象的抽象(工厂和产品均不能确定,所以是抽象产品的抽象工厂)
- 再实现工厂的实现类,工厂生产产品的每个方法,对外暴露的返回形式是抽象的产品接口,而内部返回的是具体的产品。
点击查看代码
//———————————————————工厂:生产抽象产品的抽象工厂接口+抽象工厂的实现类———————————————————
//生产产品的工厂
public interface ProductFactory {
//生产手机
PhoneProduct phoneProduct();
//生产路由器
RouterProduct routerProduct();
}
//抽象工厂的实现类——XiaomiFactory
public class XiaomiFactory implements ProductFactory{
@Override
public PhoneProduct phoneProduct() {
return new XiaomiPhone();
}
@Override
public RouterProduct routerProduct() {
return new XiaomiRouter();
}
}
//抽象工厂的实现类——HuaweiFactory
public class HuaweiFactory implements ProductFactory{
@Override
public PhoneProduct phoneProduct() {
return new HuaweiPhone();
}
@Override
public RouterProduct routerProduct() {
return new HuaweiRouter();
}
}
//消费者
public class Consumer {
public static void main(String[] args) {
XiaomiFactory xiaomiFactory = new XiaomiFactory();
HuaweiFactory huaweiFactory = new HuaweiFactory();
PhoneProduct phoneProduct = xiaomiFactory.phoneProduct();
RouterProduct routerProduct = xiaomiFactory.routerProduct();
phoneProduct.call();//小米手机打电话
phoneProduct.send();//小米手机发短信
routerProduct.connect();//小米路由器连接
routerProduct.shut();//小米路由器关机
phoneProduct = huaweiFactory.phoneProduct();
routerProduct = huaweiFactory.routerProduct();
phoneProduct.send();//华为手机打电话
phoneProduct.send();//华为手机发短信
routerProduct.connect();//华为路由器连接
routerProduct.shut();//华为路由器关机
}
}
架构如图所示:

浙公网安备 33010602011771号