最简单易懂的抽象工厂模式

本文深入解析抽象工厂模式,一种创建型设计模式,用于创建一系列相关或相互依赖的对象,而无需指定具体类。通过实例展示了如何使用该模式创建不同品牌的产品,如小米和华为的手机与路由器,以及其在代码复用和模块化方面的优势。
摘要由CSDN通过智能技术生成

抽象工厂模式

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

适用场景:

  • 客户端不依赖于产品类实例如何被创建,实现等细节
  • 强调一系列产品的产品对象一起使用创建对象需要大量的代码重复
  • 提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体的实现

优点:

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

缺点:

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

​ 比如有小米和华为两种厂商,每一个厂商可以生产手机和路由器。那么我们先来创建手机产品和路由器产品的接口与实现类。

手机实现类:

每个厂商的手机都要实现手机这个接口

public interface Phone(){
    void start();
    void close();
    void callup();
    void goonline();
}

小米手机:

public class XiaomiPhone implements Phone {
    public void start() {
        System.out.println("小米--》开机");
    }

    public void close() {
        System.out.println("小米--》关机");
    }

    public void callup() {
        System.out.println("小米--》打电话");
    }

    public void goonline() {
        System.out.println("小米--》上网");
    }

    public void Shout(){
        System.out.println("干翻华为!");
    }

华为手机:

public class HuaweiPhone implements Phone{

    public void start() {
        System.out.println("华为--》开机");
    }

    public void close() {
        System.out.println("华为--》关机");
    }

    public void callup() {
        System.out.println("华为——》打电话");
    }

    public void goonline() {
        System.out.println("华为--上网");
    }
}

路由器实现类:

每个厂商的路由器都要实现路由器这个接口

public interface Router {
    void start();
    void close();
    void wifi();
    void setWifi();
}

小米路由器:

public class XiaomiRouter implements Router{
    public void start() {
        System.out.println("小米路由器--》开机");
    }

    public void close() {
        System.out.println("小米路由器--》关机");
    }

    public void wifi() {
        System.out.println("小米路由器--》wifi");
    }

    public void setWifi() {
        System.out.println("小米路由器--》设置wifi");
    }
}

华为路由器:

public class HuaweiRouter implements Router{
    public void start() {
        System.out.println("华为路由器--》开机");
    }

    public void close() {
        System.out.println("华为路由器--》关机");
    }

    public void wifi() {
        System.out.println("华为路由器--》wifi");
    }

    public void setWifi() {
        System.out.println("华为路由器--》设置wifi");
    }
}

因为每个品牌的手机和路由器都要由自己的厂商工厂来创建那么接下来我们创建每个品牌工厂的接口和实现类,通过每个品牌的工厂来创建每个品牌自己的产品。

所有的工厂都要实现这个接口

public interface ProductFactory {
    // 生产手机
    PhoneProducts phoneproducts();
    // 生产路由器
    RouterProducts routerproducts();
}

小米工厂:

public class XiaomiFactory implements ProductFactory {
    public PhoneProducts phoneproducts() {
        return new XiaomiPhone();
    }

    public RouterProducts routerproducts() {
        return new XiaomiRouter();
    }
}

华为工厂:

public class HuaweiFactory implements ProductFactory{
    public PhoneProducts phoneproducts() {
        return new HuaweiPhone();
    }

    public RouterProducts routerproducts() {
        return new HuaweiRouter();
    }
}

这样一个抽象工厂的范例基本就完成了,接下来我们来创建一个用户来获得各类产品

public class User {
    public static void main(String[] args) {
        // 小米系列产品
        // 创建一个小米工厂
        XiaomiFactory xiaomiFactory = new XiaomiFactory();
        // 通过小米工厂获得小米手机
        PhoneProducts mi10 = xiaomiFactory.phoneproducts();
        mi10.start();
        mi10.callup();
        // 通过小米工厂获得小米路由器
        RouterProducts miRouter = xiaomiFactory.routerproducts();
        miRouter.start();	
        miRouter.wifi();

        // 创建一个华为工厂
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        // 获得华为手机
        PhoneProducts huaweiP40 = huaweiFactory.phoneproducts();
        huaweiP40.start();
        huaweiP40.goonline();
        // 获得华为路由器
        RouterProducts huaweiRouter = huaweiFactory.routerproducts();
        huaweiRouter.start();
        huaweiRouter.wifi();
    }
}

在这里插入图片描述


													感谢阅读
													欢迎留言
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值