设计模式---抽象工厂模式
创始人
2024-06-01 12:23:41
0

目录

1 介绍

2 优缺点

3 实现

1 介绍

抽象工厂模式(Abstract Factory Pattern) 是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

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

2 优缺点

优点

  \bullet 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛使用。

  \bullet 增加新的具体工厂和实体类很方便,无须修改已有系统,符合“开闭原则”。

缺点:

  \bullet 增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持程序倾斜性。

  \bullet 增加了系统的抽象性和理解难度。

 

3 实现

我们将创建 Shape 和 Color 接口和实现这些接口的实体类。下一步是创建抽象工厂类 AbstractFactory。接着是定义工厂类 ShapeFactory 和 ColorFactory,这两个工厂类都是扩展了 AbstractFactory。然后创建一个工厂创造器/生成器类 FactoryProducer。

AbstractFactoryPatternDemo 类使用 FactoryProducer 来获取 AbstractFactory 对象。它将向 AbstractFactory 传递形状信息 Shape(CIRCLE/RECTANGLE/SQUARE),以便获取它所需对象的类型。同时它还向 AbstractFactory 传递颜色信息 Color(RED/GREEN/BLUE),以便获取它所需对象的类型。

步骤1:创建 Shape 形状接口

public interface Shape{void draw();
}

步骤2:创建实现 Shape 接口的实体类

public class Circle implements Shape{@overridepublic void draw(){System.out.println("Circle");}
}
public class Rectangle implements Shape{@overridepublic void draw(){System.out.println("Rectangle");}
}
public class Square implements Shape{@overridepublic void draw(){System.out.println("Square"):}
}

 步骤3:创建 Color 接口

public interface Color{void fill();
}

 步骤4:创建实现 Color 接口的实体类

public class Red implements Color{@overridepublic void fill(){System.out.println("Red"):}
}
public class Green implements Color{@overridepublic void fill(){System.out.println("Green"):}
}
public class Blue implements Color{@overridepublic void fill(){System.out.println("Blue"):}
}

 步骤5:创建抽象工厂 AbstractFactory 接口

public interface AbstractFactory{public abstract Shape getShape(String shapeType);public abstract Color getColor(String colorType);
}

 步骤6:创建实现 AbstractFactory 的 ShapeFactory 来获取具体的 Shape 实例(Rectangle/square/ circle)和 ColorFactory 来获取具体的 Color 实例(Red/Green/Blue)。

public class ShapeFactory implements AbstractFactory{@overridpublic Shape getShape(String shapeType){if(shapeType == null)return nulll;} else {if(shapeType.equals("Rectangle"){return new Rectangle();}else if(shpeType.equals("Square"){return new Square();}else if(shapeType.equals("Circle"){return new Circle();}else {System.out.println("error");return null;}}}@overridepublic Color getColor(String ColorType){return null;}
}
public class ColorFactory implements AbstractFactory{@overridpublic Shape getColor(String colorType){if(colorType == null)return nulll;} else {if(colorType.equals("Red"){return new Red();}else if(colorType.equals("Green"){return new Green();}else if(colorType.equals("Blue"){return new Blue();}else {System.out.println("error");return null;}}}@overridepublic Color getShape(String shapeType){return null;}
}

 步骤7:创建一个工厂生成器类 FactoryProducer,通过传递的信息来获取 ShapeFactory 或者 ColorFactory

public class FactoryProducer{public static AbstractFactory getFactory(String choice){if(choice == null){return null;}if(choice.equals("Shape"){return new ShapeFactory();else if(choice.equals("Color"){return new ColorFactory();}else {System.out.println("error");return null;}}
}

 步骤8:创建 AbstractFactoryPatternDemo 类,使用 FactoryProducer 来获取到具体的Factory (ShapeFactory/ColorFactory),然后再获取到Shape和 Color 的具体实现类。

public class AbstractFactoryPatternDemo{public static void main(String[] args){// 获取 ShapeFactory 工厂实例AbstractFactory shapeFactory = FactoryProducer.getFactory("Shape");//获取 Rectangle 实例,并调用 draw 方法Shape rectangle = shapeFactory.getShape("Rectangle");rectangle.draw();// 获取 Square 实例,并调用 draw 方法Shape square = shapeFactory.getShape("Square");square.draw();// 获取 circle 实例,并调用 draw 方法Shape circle = shapeFactory.getShape("Circle");circle.draw();// 获取 ColorFactory 工厂实例AbstractFactory colorFactory = FactoryProducer.getFactory("Color");//获取 Red 实例,并调用 draw 方法Color Red = colorFactory.getColor("Red");red.fill();// 获取 Green 实例,并调用 draw 方法Color Green = colorFactory.getColor("Green");Green.fill();// 获取 Blue 实例,并调用 draw 方法Color Blue = colorFactory.getColor("Blue");Blue.fill();

注意:抽象工厂模式当我们新增加一个类型,比如Course,我们只需要新增一个 CourseFactory 实现 AbstractFactory, 然后里面返回具体的实体类对象(Math/Chinese/English)即可,满足开闭原则。但是当我们需要向 Shape 或者 Color 里新增一个实体类,此时就要修改对应ShapeFactory 或者ColorFactory 里的代码,此时就不满足开闭原则

相关内容

热门资讯

安卓系统用的华为应用,探索智能... 你知道吗?在安卓系统里,华为的应用可是个宝库呢!它们不仅功能强大,而且使用起来超级方便。今天,就让我...
安卓变ios系统魅蓝 你知道吗?最近有个朋友突然告诉我,他要把自己的安卓手机换成iOS系统,而且还是魅蓝品牌的!这可真是让...
幻书启世录安卓系统,安卓世界中... 亲爱的读者们,你是否曾在某个夜晚,被一本神奇的书所吸引,仿佛它拥有着穿越时空的力量?今天,我要带你走...
电脑安装安卓系统进不去,安卓系... 电脑安装安卓系统后竟然进不去,这可真是让人头疼的问题啊!你是不是也遇到了这种情况,心里直呼“怎么办怎...
用键盘切换控制安卓系统,畅享安... 你有没有想过,用键盘来控制你的安卓手机?是的,你没听错,就是那个我们每天敲敲打打的小玩意儿——键盘。...
小米安卓镜像系统在哪,小米安卓... 你有没有想过,你的小米手机里有一个隐藏的宝藏——安卓镜像系统?没错,就是那个可以让你的手机瞬间变身成...
安卓手机下载排班系统,高效排班... 你有没有想过,每天忙碌的工作中,有没有什么好帮手能帮你轻松管理时间呢?今天,就让我来给你介绍一个超级...
桌面组件如何弄安卓系统,桌面组... 亲爱的桌面爱好者们,你是否曾梦想过将安卓系统搬到你的电脑桌面上?想象那些流畅的动画、丰富的应用,还有...
安卓13系统介绍视频,新功能与... 亲爱的读者们,你是否对安卓13系统充满好奇?想要一探究竟,却又苦于没有足够的时间去研究?别担心,今天...
车机安卓7.1系统,功能升级与... 你有没有发现,现在的车机系统越来越智能了?尤其是那些搭载了安卓7.1系统的车机,简直就像是个贴心的智...
安卓系统下如何读pdf,And... 你有没有遇到过这种情况:手机里存了一大堆PDF文件,可是怎么也找不到一个能顺畅阅读的工具?别急,今天...
安卓系统全国通用的吗,畅享智能... 你有没有想过,为什么你的手机里装的是安卓系统呢?安卓系统,这个名字听起来是不是有点神秘?今天,就让我...
假苹果手机8安卓系统,颠覆传统... 你有没有想过,如果苹果手机突然变成了安卓系统,会是怎样的景象呢?想象那熟悉的苹果外观,却运行着安卓的...
安卓12.0系统vivo有吗,... 你有没有听说最近安卓系统又升级啦?没错,就是那个让手机焕然一新的安卓12.0系统!那么,咱们国内的手...
核心芯片和安卓系统,探索核心芯... 你知道吗?在科技的世界里,有一对“黄金搭档”正悄悄改变着我们的生活。他们就是——核心芯片和安卓系统。...
如何调安卓系统屏幕颜色,安卓系... 亲爱的手机控们,你是否曾觉得安卓系统的屏幕颜色不够个性,或者是因为长时间盯着屏幕而感到眼睛疲劳?别担...
旧台式电脑安装安卓系统,轻松安... 你那台旧台式电脑是不是已经服役多年,性能逐渐力不从心,却又不忍心让它退役呢?别急,今天就来教你怎么给...
美国要求关闭安卓系统,科技霸权... 美国要求关闭安卓系统:一场技术革新还是政治博弈?在数字化时代,智能手机已经成为我们生活中不可或缺的一...
安卓系统日记本 你有没有发现,手机里的安卓系统日记本,简直就是记录生活点滴的宝藏库呢?想象每天忙碌的生活中,有没有那...
安卓手机广告最少的系统,探索安... 你有没有发现,用安卓手机的时候,广告总是无处不在,让人烦得要命?不过别急,今天我要给你揭秘一个秘密—...