23种设计模式之创建型模式:抽象工厂模式

一:什么是抽象工厂模式

抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

二:进一步了解抽象工厂模式

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

主要解决:主要解决接口选择的问题。

何时使用:系统的产品有多于一个的产品族,而系统只消费其中某一族的产品。

如何解决:在一个产品族里面,定义多个产品。

关键代码:在一个工厂里聚合多个同类产品

优点:当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。

缺点:产品族扩展非常困难,要增加一个系列的某一产品,既要在抽象产品工厂里加生产 产品方法,又要增加一个 该产品的接口 ,还要 实现该接口(实现类)

三:实现

手机接口

//手机接口
public interface PhoneProduct {
    //打电话
    void call();
    //发短信
    void sendMsg();
}

电脑接口

//电脑接口
public interface ComputerProduct {
    //玩游戏
    void play();
    //敲代码
    void code();
}

小米手机实现类、华为手机实现类

//小米手机
public class MiPhone implements PhoneProduct {
    @Override
    public void call() {
        System.out.println("使用小米手机打电话");
    }

    @Override
    public void sendMsg() {
        System.out.println("使用小米手机发短信");
    }
}
//华为手机
public class HuaWerPhone implements PhoneProduct {
    @Override
    public void call() {
        System.out.println("使用华为手机打电话");
    }

    @Override
    public void sendMsg() {
        System.out.println("使用华为手机发短信");
    }
}

小米电脑实现类、华为电脑实现类

//小米电脑
public class MiComputer implements ComputerProduct {
    @Override
    public void play() {
        System.out.println("使用小米电脑玩游戏");
    }

    @Override
    public void code() {
        System.out.println("使用小米电脑敲代码");
    }
}
//华为电脑
public class HuaWeiComputer implements ComputerProduct {
    @Override
    public void play() {
        System.out.println("使用华为电脑 打游戏");
    }

    @Override
    public void code() {
        System.out.println("使用华为电脑 敲代码");
    }
}

抽象产品工厂

//抽象产品工厂
public interface ProductFactory {
    //生产手机
    PhoneProduct phoneProduct();
    //生产电脑
    ComputerProduct computerProduct();

抽象产品工厂的 实现类 小米工厂

//抽象产品工厂的 实现类 小米工厂
public class MiFactory implements ProductFactory {
    @Override
    public PhoneProduct phoneProduct() {
        return new MiPhone();
    }

    @Override
    public ComputerProduct computerProduct() {
        return new MiComputer();
    }
}

抽象产品工厂的 实现类 华为工厂

//抽象产品工厂的 实现类 华为工厂
public class HuaWeiFactory implements ProductFactory {
    @Override
    public PhoneProduct phoneProduct() {
        return new HuaWerPhone();
    }

    @Override
    public ComputerProduct computerProduct() {
        return new HuaWeiComputer();
    }
}

抽象工厂 测试类

//工厂返回抽象的抽象
public class AbstarctFactoryTest {
    public static void main(String[] args) {
        //建一个小米工厂 才能生产 手机和电脑
        MiFactory miFactory = new MiFactory();
        //用小米工厂 生产手机
        PhoneProduct miPhone = miFactory.phoneProduct();
        miPhone.call();
        //用小米工厂 生产电脑
        ComputerProduct miComputer = miFactory.computerProduct();
        miComputer.code();

        System.out.println("=================================");
        //建一个华为工厂 才能生产 手机和电脑
        HuaWeiFactory huaWeiFactory = new HuaWeiFactory();
        //使用华为工厂 生产手机
        PhoneProduct huaWeiPhone = huaWeiFactory.phoneProduct();
        huaWeiPhone.sendMsg();
        //使用华为工厂 生产电脑
        ComputerProduct huaWeiComputer = huaWeiFactory.computerProduct();
        huaWeiComputer.code();
    }
}

执行结果:
在这里插入图片描述

下面两幅图是为了帮助理解 抽象工厂模式

在这里插入图片描述

在这里插入图片描述
抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。
该超级工厂又称为其他工厂的工厂。
即 超级工厂 就是ProductFactory , 它下面又创建了小米工厂 和华为工厂
所以说 该超级工厂又称为其他工厂的工厂

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值