首页 > 其他分享 >抽象工厂模式-设计模式

抽象工厂模式-设计模式

时间:2024-09-20 17:53:16浏览次数:8  
标签:文本编辑 Button 工厂 Shape 抽象 void Override 设计模式 public

抽象工厂模式(Abstract Factory Pattern)在Java中是一种非常有用的设计模式,用于创建一系列相关或相互依赖的对象,而无需指定它们具体的类。这个模式提供了一种创建对象的最佳方式,它封装了创建对象的细节,并允许客户依赖于抽象类型而不是具体类型。

以下是一个简单的Java案例,展示了抽象工厂模式的应用。在这个例子中,我们将创建两个产品族:一种用于制作文本编辑器的组件(如按钮和文本框),另一种用于制作图形编辑器的组件(如圆形和矩形)。

首先,我们定义两个抽象产品接口(Button 和 Shape)以及它们的具体实现。

java复制代码
 // 抽象产品:按钮  
 
 interface Button {  
 
     void paint();  
 
 }  
 
   
 
 // 文本编辑器的按钮  
 
 class TextButton implements Button {  
 
     @Override  
 
     public void paint() {  
 
         System.out.println("Text Button painted.");  
 
     }  
 
 }  
 
   
 
 // 图形编辑器的按钮  
 
 class GraphicalButton implements Button {  
 
     @Override  
 
     public void paint() {  
 
         System.out.println("Graphical Button painted.");  
 
     }  
 
 }  
 
   
 
 // 抽象产品:形状  
 
 interface Shape {  
 
     void draw();  
 
 }  
 
   
 
 // 文本编辑器的形状(这里仅为示例,实际上文本编辑器可能不需要形状)  
 
 class TextShape implements Shape {  
 
     @Override  
 
     public void draw() {  
 
         // 文本编辑器通常不处理形状,这里仅为演示  
 
         System.out.println("Text Shape drawn (dummy).");  
 
     }  
 
 }  
 
   
 
 // 图形编辑器的圆形  
 
 class Circle implements Shape {  
 
     @Override  
 
     public void draw() {  
 
         System.out.println("Circle drawn.");  
 
     }  
 
 }  
 
   
 
 // 图形编辑器的矩形  
 
 class Rectangle implements Shape {  
 
     @Override  
 
     public void draw() {  
 
         System.out.println("Rectangle drawn.");  
 
     }  
 
 }

接下来,我们定义抽象工厂接口及其具体实现。

java复制代码
 // 抽象工厂  
 
 interface Factory {  
 
     Button createButton();  
 
     Shape createShape();  
 
 }  
 
   
 
 // 文本编辑器工厂  
 
 class TextEditorFactory implements Factory {  
 
     @Override  
 
     public Button createButton() {  
 
         return new TextButton();  
 
     }  
 
   
 
     @Override  
 
     public Shape createShape() {  
 
         return new TextShape(); // 文本编辑器可能不需要形状,这里仅为示例  
 
     }  
 
 }  
 
   
 
 // 图形编辑器工厂  
 
 class GraphicalEditorFactory implements Factory {  
 
     @Override  
 
     public Button createButton() {  
 
         return new GraphicalButton();  
 
     }  
 
   
 
     @Override  
 
     public Shape createShape() {  
 
         return new Circle(); // 这里返回Circle作为示例,也可以返回Rectangle等  
 
     }  
 
 }

最后,我们通过一个客户端类来演示如何使用这些工厂和产品。

java复制代码
 public class Client {  
 
     public static void main(String[] args) {  
 
         // 使用文本编辑器工厂  
 
         Factory textFactory = new TextEditorFactory();  
 
         Button textButton = textFactory.createButton();  
 
         Shape textShape = textFactory.createShape();  
 
   
 
         textButton.paint();  
 
         textShape.draw(); // 尽管这里只是打印了一个假信息  
 
   
 
         // 使用图形编辑器工厂  
 
         Factory graphFactory = new GraphicalEditorFactory();  
 
         Button graphButton = graphFactory.createButton();  
 
         Shape graphShape = graphFactory.createShape();  
 
   
 
         graphButton.paint();  
 
         graphShape.draw();  
 
     }  
 
 }

在这个例子中,TextEditorFactory 和 GraphicalEditorFactory 是具体工厂类,它们分别负责创建特定产品族(文本编辑器和图形编辑器)的对象。客户端代码通过调用工厂的方法来获取产品对象,而无需知道这些对象是如何被创建的。这样,我们就实现了产品对象的创建与使用的分离,提高了系统的灵活性和可扩展性。

标签:文本编辑,Button,工厂,Shape,抽象,void,Override,设计模式,public
From: https://blog.51cto.com/u_16406687/12067291

相关文章

  • Java中的设计模式
    最近在做Java笔试题时看到一道关于Java设计模式的,Java的设计模式有很多,这里来给大家普及一下:Java中的设计模式(DesignPatterns)是软件开发人员在软件开发过程中面临的一般至重复出现的问题的解决方案。它们是一种经过分类编目的、可复用的、经过良好测试的设计方案,通常用于解决常......
  • 从工厂打螺丝到数据库专家(上)
    可能是年纪大了,近期总是失眠!不知为何,这段时间心情烦躁时,特别喜欢听老歌,难道这是中年人的通病:都喜欢怀旧?在数据库恢复订阅伙伴群,大家经常讨论,总是在回味过去;突然想想,自己的过去10多年的精力,我感觉也还是蛮有趣的。回想起2006年高考结束后,哪个时候家里确实很穷,本来通过复读才勉强混......
  • C#中的设计模式:实战中的重构与优化策略
    ......
  • 工厂模式 -- 设计模式
    工厂模式(FactoryPattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。这样,我们就将对象的创建与使用分离,从而提高了系统的灵活性和可扩展性。工厂模式的类型工厂......
  • 单例模式 (Singleton Pattern) - 设计模式精讲·面试必备
    前言最近整理了一份设计模式手册:从入门到精通的实用指南。坦白说,我对网上那些过于理论化的教程感到有些失望。于是决定亲自动手,从基础概念到实际应用,把常用的设计模式都梳理了一遍。每种模式不仅包含核心原理,还附带了真实的代码示例,希望能帮助大家更好地理解和运用......
  • mybatis 通过工厂模式将mapper接口的代理对象注入spring容器中
    MapperFactoryBean是MyBatis框架中用于创建Mapper对象的一个工厂类。getObject方法是该工厂类中的一个关键方法,用于返回实际的Mapper对象。具体来说,MapperFactoryBean通过getObject方法来创建和初始化Mapper接口的实现,从而可以在Spring容器中注入和使用这些Mappe......
  • 施耐德食品饮料精益数字化工厂MES项目解决方案:MES产品架构、MES产品解决方案
    施耐德食品饮料精益数字化工厂MES项目解决方案是一个综合性的解决方案,旨在通过MES(制造执行系统)实现食品饮料行业的智能制造和精益数字化工厂的构建。以下是对MES产品架构、MES产品解决方案以及PLC/DCS/SCADA/SAP的详细阐述: 一、MES产品架构MES产品架构通常根据企业的具体......
  • 设计模式——命令模式
    设计模式——命令模式1.智能生活需求看一个具体的需求我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。这些智能家电来自不同的厂家,我们不想针对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控......
  • 工厂人员行为识别检测系统
    工厂人员行为识别检测系统采用计算机AI智能视频分析技术,实时分析个人的违规行为和物体不安全状态,工厂人员行为识别检测系统利用现场已有的监控摄像头,改变原先的传统安防监控作业方式,对工厂车间开展AI视频管理将进一步提高车间安全作业效率,降低人力成本。传统式工厂车间长期性依......
  • 工厂人员工装穿戴识别
    工厂人员工装穿戴识别依据大规模不同外观工装数据识别训练,工厂人员工装穿戴识别与现场已有监控摄像头互相配合监控现场人员着装情况,工厂人员工装穿戴识别一旦发现工作中人员并没有按照要求穿着工装,系统会自动传出报警。在提醒相关人员的前提下,工厂人员工装穿戴识别系统将一键备份......