设计模式——抽象工厂模式

设计模式——抽象工厂模式

我们介绍抽象工厂设计模式共分为两步:
第一步,先创建产品的抽象接口及具体实现类;第二步,再创建工厂的抽象接口及具体实现类

具体如下:
第一步:

  • 先构造抽象的产品的接口
  • 再实现接口的具体实现类
//———————————————————————————产品:手机接口及实现类—————————————————————————————————————
//产品接口——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();//华为路由器关机
    }
}

架构如图所示:

posted @   知小  阅读(99)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端
点击右上角即可分享
微信分享提示