设计模式 抽象工厂模式
基本概念


简单例子
下面我们模拟一个场景 我们要通过抽象工厂模式去创建这4个类,小米手机,小米路由器,华为手机,华为路由器

创建好接口和实体接口
创建手机类接口
package abstractfactory;
//手机产品接口
public interface IphoneProduct {
//模拟一些功能
void start();
void shutdown();
void callup();
void sendSMS();
}
创建小米手机和华为手机实体类
package abstractfactory;
public class XiaomiPhone implements IphoneProduct {
@Override
public void start() {
System.out.println("开启小米手机");
}
@Override
public void shutdown() {
System.out.println("关闭小米手机");
}
@Override
public void callup() {
System.out.println("小米手机打电话");
}
@Override
public void sendSMS() {
System.out.println("小米手机发短信");
}
}
package abstractfactory;
public class HuaweiPhone implements IphoneProduct {
@Override
public void start() {
System.out.println("华为手机开机");
}
@Override
public void shutdown() {
System.out.println("华为手机关机");
}
@Override
public void callup() {
System.out.println("华为手机打电话");
}
@Override
public void sendSMS() {
System.out.println("华为手机发短信");
}
}
路由器也同理
public interface IRouterProduct {
void start();
void shutdown();
void openwife();
void setting();
}
public class XiaomiRouter implements IRouterProduct{
@Override
public void start() {
System.out.println("小米路由器开机");
}
@Override
public void shutdown() {
System.out.println("小米路由器关机");
}
@Override
public void openwife() {
System.out.println("小米路由器开启wife");
}
@Override
public void setting() {
System.out.println("小米路由器设置");
}
}
public class HuaweiRouter implements IRouterProduct {
@Override
public void start() {
System.out.println("华为路由器开机");
}
@Override
public void shutdown() {
System.out.println("华为路由器关机");
}
@Override
public void openwife() {
System.out.println("华为路由器开启wife");
}
@Override
public void setting() {
System.out.println("华为路由器设置");
}
}
引入抽象产品接口
在抽象产品接口中只给了两个生成的接口 它并不关心如何具体实现
//抽象产品工厂
public interface IProductFactory {
//生产手机
IphoneProduct iphoneProduct();
//生成路由器
IRouterProduct irouterProduct();
}
定义具体的工厂类
定义小米工厂类 生成小米系列产品
public class XiaomiFactory implements IProductFactory {
@Override
public IphoneProduct iphoneProduct() {
return new XiaomiPhone();
}
@Override
public IRouterProduct irouterProduct() {
return new XiaomiRouter();
}
}
华为同理
public class HuaweiFactory implements IProductFactory {
@Override
public IphoneProduct iphoneProduct() {
return new HuaweiPhone();
}
@Override
public IRouterProduct irouterProduct() {
return new HuaweiRouter();
}
}
测试使用
写好具体的工厂类我们就可以使用了
比如生成小米系列产品
package abstractfactory;
public class Client {
public static void main(String[] args) {
//小米工厂
XiaomiFactory xiaomiFactory=new XiaomiFactory();
IphoneProduct iphoneProduct = xiaomiFactory.iphoneProduct();
iphoneProduct.start();
iphoneProduct.sendSMS();
iphoneProduct.shutdown();
IRouterProduct iRouterProduct = xiaomiFactory.irouterProduct();
iRouterProduct.start();
iRouterProduct.openwife();
iRouterProduct.shutdown();
}
}

一句话总结 抽象工厂定义了下级工厂能干什么 下级完成了具体实现的逻辑

浙公网安备 33010602011771号