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

本文探讨了抽象工厂模式如何通过创建产品族和统一工厂,解决简单工厂模式的局限性,重点介绍了其优点、缺点及应用场景。

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

工厂方法模式通过引入工厂等级结构,解决了简单工厂模式中工厂类职责太重的问题,但由于工厂方法模式中的每个工厂只生产一类产品,可能会导致系统中存在大量的工厂类,势必会增加系统的开销。此时,我们可以考虑将一些相关的产品组成一个“产品族”,由同一个工厂来统一生产,这就是我们本文将要学习的抽象工厂模式的基本思想。

抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,它是一种对象创建型模式。

package Factory.AbstractFactory;

public class FoodFactory {
//    食物
    public interface Noodle{
        public void display();
    }
    public interface Brand{
        public void display();
    }
    public interface Rase{
        public void display();
    }
//    食物工厂
    public interface Factory{
        public Noodle createNoodle();
        public Rase createRase();
        public Brand createBrand();
}

    public class MG_Noodle implements Noodle{
        @Override
        public void display() {
            System.out.println("制造美国面");
        }
    }
    public class ZG_Noodle implements Noodle{
        @Override
        public void display() {
            System.out.println("制造中国面");
        }
    }
    public class MG_Rase implements Rase{
        @Override
        public void display() {
            System.out.println("制造美国大米");
        }
    }
    public class ZG_Rase implements Rase{
        @Override
        public void display() {
            System.out.println("制造中国大米");
        }
    }
    public class MG_Brand implements Brand{
        @Override
        public void display() {
            System.out.println("制造美国面包");
        }
    }
    public class ZG_Brand implements Brand{
        @Override
        public void display() {
            System.out.println("制造中国面包");
        }
    }

    public class ZGFactory implements Factory{
        @Override
        public Noodle createNoodle() {
            Noodle noodle = new ZG_Noodle();
            noodle.display();
            return noodle;
        }

        @Override
        public Rase createRase() {
            Rase rase = new ZG_Rase();
            rase.display();
            return rase;
        }

        @Override
        public Brand createBrand() {
            Brand brand = new ZG_Brand();
            brand.display();
            return brand;
        }
    }

    public class MGFactory implements Factory{
        @Override
        public Noodle createNoodle() {
            Noodle noodle = new MG_Noodle();
            noodle.display();
            return noodle;
        }

        @Override
        public Rase createRase() {
            Rase rase = new MG_Rase();
            rase.display();
            return rase;
        }

        @Override
        public Brand createBrand() {
            Brand brand = new MG_Brand();
            brand.display();
            return brand;
        }
    }
    
}

抽象工厂模式的主要优点如下:

   (1) 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易,所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。

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

   (3) 增加新的产品族很方便,无须修改已有系统,符合“开闭原则”。

   2. 主要缺点

   抽象工厂模式的主要缺点如下:

   增加新的产品等级结构麻烦,需要对原有系统进行较大的修改,甚至需要修改抽象层代码,这显然会带来较大的不便,违背了“开闭原则”。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值