Java设计模式之抽象工厂模式

1. 抽象工厂模式

1.1 定义、优缺点、使用场景

工厂方法模式只考虑生产同种类的产品,但是现实生活中许多工厂是综合型的工厂,能生产多种类的产品。如工厂既生成收集有生成电脑

抽象工厂模式除了具有工厂方法模式的优点外,其他优点如下

  • 可以在工厂类的内部对多个种类产品共同管理,而不必专门引入多个新的工厂类来进行管理
  • 当需要产品时,抽象工厂可以保证客户端始终只使用同一个工厂的产品组
  • 抽象工厂增强了程序的可扩展性,当增加一个新的工厂时,不需要修改原代码,满足开闭原则

缺点:当产品族中需要增加一个新的产品时,所有的工厂类都需要进行修改。违法了“开闭原则”

适用场景

  • 当需要创建的对象是一系列相互关联或相互依赖的不同种类产品时,如电器工厂中的电视机、洗衣机、空调等
  • 系统中有多个工厂,但每次只使用其中的某一种类产品。如有人只喜欢穿某一个品牌的衣服和鞋
  • 系统中提供了产品的类库,且所有产品的接口相同,客户端不依赖产品实例的创建细节和内部结构

1.2 模式的结构与实现

结构

  • 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品
  • 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间是多对一的关系
  • 抽象工厂(Factory):提供了创建产品的接口,它包含多个创建产品的方法newProduct(),可以创建多个不同种类的产品
  • 具体工厂(Concrete Factory):主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建

实现

public class FactoryTest {

    public static void main(String[] args) {

        // 可以通过配置文件进行类名的配置,然后实例化对应的具体工厂类
        Factory factory = new HuaweiFactory();
        Phone phone = factory.newPhone();
        phone.show();
        Computer computer = factory.newComputer();
        computer.show();

    }
}

// 抽象产品:手机
interface Phone {
    public void show();
}

// 具体产品:华为手机
class HuaweiPhone implements Phone {
    public void show() {
        System.out.println("华为手机显示");
    }
}

// 具体产品:小米手机
class XiaomiPhone implements Phone {
    public void show() {
        System.out.println("小米手机显示");
    }
}


// 抽象产品:电脑
interface Computer {
    public void show();
}

// 具体产品:华为电脑
class HuaweiComputer implements Computer {
    public void show() {
        System.out.println("华为电脑显示");
    }
}

// 具体产品:小米电脑
class XiaomiComputer implements Computer {
    public void show() {
        System.out.println("小米电脑显示");
    }
}

// 抽象工厂
interface Factory {
    public Phone newPhone();

    public Computer newComputer();
}

// 具体工厂:华为工厂
class HuaweiFactory implements Factory {
    public Phone newPhone() {
        System.out.println("华为工厂生成---华为手机");
        return new HuaweiPhone();
    }

    public Computer newComputer() {
        System.out.println("华为工厂生成---华为电脑");
        return new HuaweiComputer();
    }
}


// 具体工厂:小米工厂
class XiaomiFactory implements Factory {
    public Phone newPhone() {
        System.out.println("小米工厂生成---小米手机");
        return new XiaomiPhone();
    }

    public Computer newComputer() {
        System.out.println("小米工厂生成---小米电脑");
        return new XiaomiComputer();
    }
}

运行程序,结果如下:

华为工厂生成---华为手机
华为手机显示
华为工厂生成---华为电脑
华为电脑显示
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值