设计模式:抽象工厂模式

本文详细介绍了抽象工厂模式,这是一种创建型设计模式,用于创建相关产品族的实例。通过创建产品接口和其实现类,以及抽象工厂和具体工厂,确保了客户端始终使用同一产品族的对象。此外,文章还展示了模式的优缺点、使用场景和图形表示,并提供了Java代码实现作为示例。
摘要由CSDN通过智能技术生成

②抽象工厂模式(Abstract Factory Pattern)

简介:

​ 抽象工厂模式是围绕一个超级工厂创建其他工厂,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

实现方法:

  1. 创建产品接口,产品实现类实现接口。
  2. 创建抽象工厂,普通工厂类继承抽象工厂,重写方法,扩展生产产品的方法。
  3. 创建超级工厂,用来生产普通工厂类。
  4. 通过不同的条件,使超级工厂生成相应的普通工厂类,进而生成产品对象。

优点:

​ 当一个产品族中的多个对象被设计成一起工作时,抽象工厂模式可以保证客户端始终只使用同一个产品族中的对象。

缺点:

​ 产品族扩展非常困难,要增加一个系列的产品,既要在抽象的工厂方增加代码,又要在具体的产品和工厂类方增加代码。

使用场景

​ 当系统中需要多个产品族,而系统只消费其中某一族的产品时,抽象工厂模式可以很好的应用。

特点:

​ 产品族难扩展,产品等级易扩展。

图形实现:

请添加图片描述

代码实现:

Color.java:
//创建Color接口
public interface Color {
    //定义show()方法
    void show();
}
Red.java:
public class Red implements Color{
    @Override
    public void show() {
        System.out.println("表现红色!");
    }
}
Green.java:
public class Green implements Color{
    @Override
    public void show() {
        System.out.println("表现绿色!");
    }
}
Yellow.java:
public class Yellow implements Color{
    @Override
    public void show() {
        System.out.println("表现黄色!");
    }
}
AbstractFactory.java:
public abstract class AbstractFactory {
    public abstract Color getColor(String color);
}
ColorFactory.java:
public class ColorFactory {
	//定义getColor()方法,方法完成实例的创建
    public Color getColor(String colorType) {
        if (colorType == null) {
            return null;
        }
        if (colorType.equalsIgnoreCase("RED")) {
            return new Red();
        } else if (colorType.equalsIgnoreCase("GREEN")) {
            return new Green();
        } else if (colorType.equalsIgnoreCase("YELLOW")) {
            return new Yellow();
        }
        return null;
    }
}

FactoryProducer.java:
public class FactoryProducer {
    public static AbstractFactory getFactory(String choice){
        if(choice.equalsIgnoreCase("COLOR")){
            return new ColorFactory();
        }
        return null;
    }
}
FactoryPatternDemo.java:
public class AbstractFactoryPatternDemo {
    public static void main(String[] args) {
        //通过超级工厂创建普通工厂类
        AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");

        //通过调用工厂类方法创建红色对象
        Color color1 = colorFactory.getColor("RED");
        color1.show();//输出表现红色!

        //通过调用工厂类方法创建红色对象
        Color color2 = colorFactory.getColor("GREEN");
        color2.show();//输出表现绿色!

        //通过调用工厂类方法创建红色对象
        Color color3 = colorFactory.getColor("YELLOW");
        color3.show();//输出表现黄色!

    }
}
主线程main()执行结果:
表现红色!
表现绿色!
表现黄色!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向未来祈祷

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值