设计模式——抽象工厂模式
设计模式——抽象工厂模式
我们介绍抽象工厂设计模式共分为两步:
第一步,先创建产品的抽象接口及具体实现类;第二步,再创建工厂的抽象接口及具体实现类
具体如下:
第一步:
- 先构造抽象的产品的接口
- 再实现接口的具体实现类
//———————————————————————————产品:手机接口及实现类—————————————————————————————————————
//产品接口——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();//华为路由器关机
}
}
架构如图所示:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端