设计模式----抽象工厂模式

本文深入讲解了抽象工厂模式的概念及其实现方式,并通过具体代码示例展示了如何利用该模式创建一系列相关联的对象,同时探讨了其适用场景及优势。

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

抽象工厂模式

个人理解:抽象工厂是工厂模式的加强版,把工厂模式看做一个单元的话 抽象工厂模式就是把多个单元用一个抽象类装起来

再使用一个抽象工厂类 来实现一个方法 这个方法里面写上判断条件 根据需求来返回所需要的工厂 然后让这个工厂生产

比如:A工厂是生产水果 B工厂是生产衣服 在用户需要吃的时候就 new 一个抽象工厂类 然后告诉抽象工厂类需要水果工厂,抽象工厂就会返回水果工厂来供系统使用

了解抽象工厂模式

什么是抽象工厂模式?

工厂模式的加强版。

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

抽象工厂模式是做什么的?

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

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

抽象工厂模式的适用情景

1、QQ 换皮肤,一整套一起换。

2、生成不同操作系统的程序。

使用抽象工厂模式的好处?

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

代码:

水果工厂

水果接口

//水果
public interface Fruit {

    //初始化
    void getInstance();
}

水果对象

public class Apple implements Fruit{

    public void getInstance() {
        System.out.println("获得苹果");
    }
}
public class Banana implements Fruit{
    public void getInstance() {
        System.out.println("获得香蕉");
    }
}

抽象工厂实现类(水果工厂)

//水果工厂
public class FruitFactory extends AbstractFactory<Fruit> {

    public Fruit getProduct(String name) {
        if(name==null)return null;
        if(name.equals("Apple")){
            return new Apple();
        }else if(name.equals("Banana")){
            return new Banana();
        }else {
            return null;
        }
    }
}

家具工厂

家具接口

//家具接口
public interface Furniture {

    //初始化
    void getInstance();
}

家具对象

//茶几
public class TeaTable implements Furniture{
    public void getInstance() {
        System.out.println("生产一个茶几");
    }
}
//衣柜
public class Wardrobe implements Furniture{
    public void getInstance() {
        System.out.println("生产一个衣柜");
    }
}

抽象工厂实现类(家具工厂)

//家具工厂
public class FurnitureFactory extends AbstractFactory<Furniture> {

    public Furniture getProduct(String name) {
        if(name==null)return null;
        if(name.equals("TeaTable")){
            return new TeaTable();
        }else if(name.equals("Wardrobe")){
            return new Wardrobe();
        }else {
            return null;
        }
    }
}

抽象工厂

抽象工厂类

public abstract class AbstractFactory<T> {
    public abstract T getProduct(String name);
}

测试

public class Demo {
    public static void main(String[] args) {
        //获取水果工厂
        AbstractFactory fruit = FactoryProducer.getFactory("fruit");
        //获取苹果对象
        Apple apple = (Apple) fruit.getProduct("Apple");
        apple.getInstance();

        //获取家具工厂
        AbstractFactory furniture = FactoryProducer.getFactory("furniture");
        //获取茶几对象
        TeaTable teaTable = (TeaTable) furniture.getProduct("TeaTable");
        teaTable.getInstance();

    }
//测试结果
    获得苹果
	生产一个茶几
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值