设计模式—抽象工厂模式

本文通过实例展示了抽象工厂模式的使用,解释了如何通过该模式隔离具体产品的实现,使得在应用程序中可以方便地切换产品系列,如华为和vivo的手机与路由器。同时,也指出了抽象工厂模式的优缺点,如产品扩展困难和理解难度增加。在测试代码中,演示了如何使用工厂创建并操作不同品牌的产品。
摘要由CSDN通过智能技术生成

抽象工厂

定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定它们具体的类

优点:

  • 具体产品在应用层的代码隔离,无需要关心创建的细节
  • 将一个系列的产品统一到一起创建

缺点:

  • 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难
  • 增加了系统的抽象和理解难度

先来看一下抽象工厂的URL类图

在这里插入图片描述

下边我们通过一个例子来理解一下抽象工厂这个概念,有两家厂商分别是华为和vivo,它们都生产手机和路由器,我们就通过这两个产品来理解抽象工厂

先看一下各个类之间的关系

在这里插入图片描述

首先创建两个产品接口(IphoneProduct和IRouterProduct)

package com.zkw.factory.abstract1;

public interface IphoneProduct {
    public void charge();
    public void start();
    public void shutdown();
    public void call();
    public void sendSMS();
}
package com.zkw.factory.abstract1;

public interface IRouterProduct {
    public void start();
    public void shutdown();
    public void OpenWifi();
    public void CloseWifi();
}

然后华为和vivo两个厂家分别实现这个两个产品的接口

package com.zkw.factory.abstract1;

public class HuaWeiIphone implements IphoneProduct{
    @Override
    public void charge() {
        System.out.println("HuaWei手机充电");
    }

    @Override
    public void start() {
        System.out.println("HuaWei手机开机");
    }

    @Override
    public void shutdown() {
        System.out.println("HuaWei手机关机");
    }

    @Override
    public void call() {
        System.out.println("HuaWei手机打电话");
    }

    @Override
    public void sendSMS() {
        System.out.println("HuaWei手机发短信");
    }
}
package com.zkw.factory.abstract1;

public class HuaWeiIRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("HuaWei路由器开机");
    }

    @Override
    public void shutdown() {
        System.out.println("HuaWei路由器关机");
    }

    @Override
    public void OpenWifi() {
        System.out.println("HuaWei路由器打开WiFi");
    }

    @Override
    public void CloseWifi() {
        System.out.println("HuaWei路由器关闭WiFi");
    }
}
package com.zkw.factory.abstract1;

public class vivoIphone implements IphoneProduct {
    @Override
    public void charge() {
        System.out.println("vivo手机充电");
    }

    @Override
    public void start() {
        System.out.println("vivo手机开机");
    }

    @Override
    public void shutdown() {
        System.out.println("vivo手机关机");
    }

    @Override
    public void call() {
        System.out.println("vivo手机打电话");
    }

    @Override
    public void sendSMS() {
        System.out.println("vivo手机发短信");
    }
}
package com.zkw.factory.abstract1;

public class viovoIRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("vivo路由器开机");
    }

    @Override
    public void shutdown() {
        System.out.println("vivo路由器关机");
    }

    @Override
    public void OpenWifi() {
        System.out.println("vivo路由器打开WiFi");
    }

    @Override
    public void CloseWifi() {
        System.out.println("vivo路由器关闭WiFi");
    }
}

创建件超级工厂,这个工厂主要提供创建产品的接口

package com.zkw.factory.abstract1;

public interface SuperFactory {
    public IphoneProduct getIphoneProduct();
    public IRouterProduct getIRouterProduct();
}

最后两家厂商的工厂分别实现这超级工厂

package com.zkw.factory.abstract1;

public class HUaWeiFactory implements SuperFactory {
    @Override
    public IphoneProduct getIphoneProduct() {
        return new HuaWeiIphone();
    }

    @Override
    public IRouterProduct getIRouterProduct() {
        return new HuaWeiIRouter();
    }
}
package com.zkw.factory.abstract1;

public class vivoFactory implements SuperFactory{

    @Override
    public IphoneProduct getIphoneProduct() {
        return new vivoIphone();
    }

    @Override
    public IRouterProduct getIRouterProduct() {
        return new viovoIRouter();
    }
}

测试代码

package com.zkw.factory.abstract1;

public class Customer {
    public static void main(String[] args) {
        System.out.println("========vivo系列产品=========");
        vivoFactory vivoFactory = new vivoFactory();
        IphoneProduct iphoneProduct = vivoFactory.getIphoneProduct();
        System.out.println("====vivo手机产品====");
        iphoneProduct.charge();
        iphoneProduct.start();
        iphoneProduct.shutdown();
        iphoneProduct.call();
        iphoneProduct.sendSMS();
        System.out.println("====vivo路由器====");
        IRouterProduct iRouterProduct = vivoFactory.getIRouterProduct();
        iRouterProduct.start();
        iRouterProduct.shutdown();
        iRouterProduct.OpenWifi();
        iRouterProduct.CloseWifi();
        System.out.println("========HuaWei系列产品=========");
        System.out.println("====HuaWei手机产品====");
        HUaWeiFactory hUaWeiFactory = new HUaWeiFactory();
        IphoneProduct iphoneProduct1 = hUaWeiFactory.getIphoneProduct();
        iphoneProduct1.charge();
        iphoneProduct1.start();
        iphoneProduct1.shutdown();
        iphoneProduct1.call();
        iphoneProduct1.sendSMS();
        System.out.println("====HuaWei路由器====");
        IRouterProduct iRouterProduct1 = hUaWeiFactory.getIRouterProduct();
        iRouterProduct1.start();
        iRouterProduct1.shutdown();
        iRouterProduct1.OpenWifi();
        iRouterProduct1.CloseWifi();
    }
}

结果如下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值