对java设计模式-抽象工厂模式的理解

本文深入解析抽象工厂模式,阐述其核心概念与应用价值。通过对比静态工厂模式,突显抽象工厂模式的灵活性与扩展性优势,使读者理解如何在不改动原有代码的基础上,轻松新增产品类与工厂类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我看道下面的这段解释,解释的很好,我终于算是醒悟了

抽象工厂模式(Abstract Factory)
       抽象出来一个基础接口定义了产品功能(对应抽象产品角色),每个实现此接口的子类就是具体产品(对应具体产品角色),然后定义一个工厂接口(对应抽象工厂角色),实现了工厂接口的子类就是具体工厂(对应具体工厂角色),这时候,接口编程的优点就体现了,我们可以随时新增具体产品类(只需要实现产品接口),只需要同时新增一个工厂类,客户端就可以轻松调用生成新产品的代码。

  抽象工厂模式的灵活性就体现在这里,无需改动原有的代码,毕竟对于客户端来说,静态工厂模式在不改动StaticFactory类的代码时无法新增产品,如果采用了抽象工厂模式,就可以轻松的新增拓展类。

抽象工厂模式的用意为:给客户端提供一个统一接口,可以创建多个复杂产品族中的产品对象

抽象工厂角色: 这是抽象工厂模式的核心,它与应用程序无关。是具体工厂角色必须实现的接口或者必须继承的父类。在java中它由抽象类或者接口来实现。
具体工厂角色:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象。它由具体的类来实现。
抽象产品角色:它是具体产品继承的父类或者是实现的接口。在java中一般由抽象类或者接口来实现。
具体产品角色:具体工厂角色所创建的对象就是此角色的实例。在java中由具体的类来实现

实例代码:

interface food { }
 
class A implements food{}
class B implements food{}
 
interface AbstractFactory { Food produceFood();}
 
class FactoryA implements AbstractFactory {
    @Override
    public Food produceFood() {
        return new A();
    }
}
 
class FactoryB implements AbstractFactory {
    @Override
    public Food produceFood() {
        return new B();
    }
}

 

客户端调用:

public class Client{
    public Food getFood(String name){
        Food x= new FactoryA().produceFood();
        return x;
    }
}

但是,对于为什么有要有工厂模式,抽象工厂模式有什么用?,我还不清楚

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值