当前位置: 首页 > news >正文

设计模式-抽象工厂

         抽象工厂属于创建型模式。

         抽象工厂和工厂设计模式的区别:

        工厂模式的是设计模式中最简单的一种设计模式,主要设计思想是,分离对象的创建和使用,在Java中,如果需要使用一个对象时,需要new Class(),获取到对象,然后操作。而将创建对象这一过程集中管理就叫做工厂模式,在工厂模式下,你不需要创建目标对象,而是使用管理对象的工厂,去调用对象。

        抽象工厂负责创建一个相关对象的工厂,抽象工厂创建工厂,工厂再创建对象。

        工厂的上级抽象工厂

public abstract class AbstractFactory {public abstract Color getColor(String color);public abstract Shape getShape(String shape);
}

        普通工厂类,负责创建具体对象 

public class ShapeFactory extends AbstractFactory {@Overridepublic Color getColor(String color) {return null;}@Overridepublic Shape getShape(String shapeType) {if (shapeType == null) {return null;}if (shapeType.equalsIgnoreCase("CIRCLE")) {return new Circle();} else if (shapeType.equalsIgnoreCase("RECTANGLE")) {return new Rectangle();} else if (shapeType.equalsIgnoreCase("SQUARE")) {return new Square();}return null;}
}

        还需要一个类来根据条件创建不同的工厂,不同的工厂实现了抽象类,在这里就可以根据不同条件返回工厂对象,否则返回工厂对象的类需要写两个,因为两个工厂都实现了父类抽象工厂,返回对象可以返回父类

public class FactoryProducer {public static AbstractFactory getFactory(String choice){if(choice.equalsIgnoreCase("SHAPE")){return new ShapeFactory();} else if(choice.equalsIgnoreCase("COLOR")){return new ColorFactory();}return null;}
}

           在调用时,可以清晰的看到,首先获取工厂对象,再通过工厂对象来实现创建不同的对象

public static void main(String[] args) {//获取形状工厂AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE");//获取形状为 Circle 的对象Shape shape1 = shapeFactory.getShape("CIRCLE");//调用 Circle 的 draw 方法shape1.draw();//获取形状为 Rectangle 的对象Shape shape2 = shapeFactory.getShape("RECTANGLE");//调用 Rectangle 的 draw 方法shape2.draw();//获取形状为 Square 的对象Shape shape3 = shapeFactory.getShape("SQUARE");//调用 Square 的 draw 方法shape3.draw();//获取颜色工厂AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");//获取颜色为 Red 的对象Color color1 = colorFactory.getColor("RED");//调用 Red 的 fill 方法color1.fill();//获取颜色为 Green 的对象Color color2 = colorFactory.getColor("GREEN");//调用 Green 的 fill 方法color2.fill();//获取颜色为 Blue 的对象Color color3 = colorFactory.getColor("BLUE");//调用 Blue 的 fill 方法color3.fill();}

 

        git地址:Design_pattern: 设计模式icon-default.png?t=N7T8https://gitee.com/qiminghaonan123/design_pattern.git

http://www.lryc.cn/news/405973.html

相关文章:

  • Ubunton-24.04 简单配置使用
  • 什么是STP环路保护
  • Python算法基础:解锁冒泡排序与选择排序的奥秘
  • QtCMake工程提升类后找不到头文件
  • Docker核心技术:Docker原理之Cgroups
  • union的特性和大小端
  • 个性化IT服务探索实践
  • UE4-打包游戏,游戏模式,默认关卡
  • Unity ShaderLab基础
  • 用代理IP会频繁掉线是什么原因?HTTP和SOCKS5协议优劣势是什么?
  • MongoDB教程(十三):MongoDB覆盖索引
  • 快速认识EA(Enterprise Architecture)
  • 词云图制作
  • AndroidStudio与手机进行无线调试
  • 脉冲编码调制(PCM,Pulse Code Modulation)简介
  • Pytorch transforms 的研究
  • 一个C++模板工厂的编译问题的解决。针对第三方库的构造函数以及追加了的对象构造函数。牵扯到重载、特化等
  • 《昇思 25 天学习打卡营第 20 天 | Pix2Pix实现图像转换 》
  • 关于c#的简单应用三题
  • (十三)Spring教程——依赖注入之工厂方法注入
  • Redission中的Lua脚本写法、理解
  • 视频共享融合赋能平台LntonCVS视频监控管理平台视频云解决方案
  • GraphRAG + GPT-4o mini 低成本构建 AI 图谱知识库
  • 全国区块链职业技能大赛第十套区块链产品需求分析与方案设计
  • 分布式Apollo配置中心搭建实战
  • Android monkey命令和monkey脚本详解
  • vue 实现对图片的某个区域点选, 并在该区域上方显示该部分内容
  • 配置文件格式 INI 快速上手
  • 基于WebGoat平台的SQL注入攻击
  • SpringMvc有几个上下文