首页 > 编程语言 >Java设计模式-简单工厂模式

Java设计模式-简单工厂模式

时间:2023-05-15 20:31:54浏览次数:40  
标签:Product Java 创建 模式 工厂 简单 设计模式 客户端

simple-factory_副本

简介

在软件开发过程中,设计模式是一种被广泛应用的实践,它是通过总结、归纳和提炼出软件设计经验,从而使得设计更加优雅、高效。简单工厂模式是设计模式中最基本、最简单的一种模式,它能够有效地封装对象的创建过程,简化代码结构。

简单工厂模式又称为静态工厂方法模式,它是通过定义一个工厂类,用于创建不同的对象实例,而不是在客户端代码中直接创建对象实例,从而避免了客户端代码与对象的耦合。简单工厂模式是一种创建型模式,它将创建对象的过程封装起来,使得客户端无需知道对象的创建过程,只需要向工厂类请求需要的对象即可。

与其他设计模式相比,简单工厂模式的最大区别在于它只有一个工厂类。其他设计模式可能需要多个工厂类,或者是一组相关的工厂类。例如,抽象工厂模式需要多个工厂类来创建不同的产品系列。

实现

下面是一个简单工厂模式的一个示例:

// 抽象产品类
interface Product {
    void operation();
}

// 具体产品类A
class ConcreteProductA implements Product {
    public void operation() {
        System.out.println("This is ConcreteProductA.");
    }
}

// 具体产品类B
class ConcreteProductB implements Product {
    public void operation() {
        System.out.println("This is ConcreteProductB.");
    }
}

// 工厂类
class Factory {
    public static Product createProduct(String type) {
        if (type.equals("A")) {
            return new ConcreteProductA();
        } else if (type.equals("B")) {
            return new ConcreteProductB();
        } else {
            return null;
        }
    }
}

// 客户端
public class Client {
    public static void main(String[] args) {
        Product productA = Factory.createProduct("A");
        Product productB = Factory.createProduct("B");
        productA.operation();
        productB.operation();
    }
}

上述代码中,我们定义了一个抽象产品类Product,其中包含一个操作方法operation,用于对产品进行操作。然后定义了两个具体产品类ConcreteProductA和ConcreteProductB,分别实现了Product接口中的operation方法。接着,我们定义了一个工厂类Factory,其中包含一个静态方法createProduct,用于创建不同类型的产品。客户端只需要向工厂类请求需要的产品类型,而无需知道具体的产品创建过程。

优缺点

优点:

  • 将对象的创建与使用分离,提高了代码的可维护性。
  • 隐藏了对象的创建细节,使客户端代码更加简洁和易于维护。
  • 可以根据需要动态地创建不同类型的对象,而无需在客户端代码中进行修改。

缺点:

  • 工厂类需要负责创建所有产品,如果产品类型过多,工厂类的代码会变得过于复杂。
  • 新增产品需要修改工厂类的代码,违反了开闭原则。

运用场景

简单工厂模式通常适用于以下场景:

  • 当需要创建的对象具有相同的行为和属性时,可以使用简单工厂模式,因为它可以降低客户端代码的复杂度,提高代码的可维护性和可扩展性;
  • 当一个类不知道它所需要的对象的类时,可以使用简单工厂模式,将创建对象的职责交给工厂类处理;
  • 当需要在客户端中动态地根据条件创建不同的对象时,可以使用简单工厂模式。

总之,简单工厂模式适用于创建对象逻辑比较简单,且客户端只需要知道抽象产品类的情况下。当系统中需要创建的具体产品类不断增多时,使用简单工厂模式会导致工厂类变得过于复杂,此时可以考虑使用工厂方法模式或者抽象工厂模式来解决问题。

总结

简单工厂模式是一种基本、简单的设计模式,它能够有效地封装对象的创建过程,从而简化客户端代码结构。然而,简单工厂模式也有其缺点,如扩展性和可维护性不佳。因此,在使用简单工厂模式时,需要根据具体的情况进行权衡和选择,以达到最佳的设计效果。

标签:Product,Java,创建,模式,工厂,简单,设计模式,客户端
From: https://blog.51cto.com/u_10217684/6280819

相关文章

  • Java设计模式-桥接模式
    简介桥接模式(BridgePattern)是一种结构性设计模式,它的主要作用是将抽象部分和实现部分解耦,使它们可以独立变化而不会互相影响。桥接模式最早由GoF(GangofFour)提出,在《设计模式》一书中有详细的介绍。桥接模式和其他设计模式的区别在于它关注的是如何将抽象和实现分离,从而达到灵......
  • JAVA反序列化-URLDNS分析
    目录0x01URLDNS0x02利用链分析本文基于P大的《java安全漫谈》环境jdk1.7urldns是学习JAVA反序列化的入门利用链0x01URLDNSURLDNS就是ysoserial中⼀个利⽤链的名字,但准确来说,这个其实不能称作“利⽤链”。因为其参数不是⼀个可以“利⽤”的命令,⽽仅为⼀个URL,其能触发的结......
  • 给定一个字符串,用java代码找出其中不含有重复字符的最长子串的长度
    publicintlengthOfLongestSubstring(Strings){intn=s.length(),ans=0;Map<Character,Integer>map=newHashMap<>();for(inti=0,j=0;j<n;j++){if(map.containsKey(s.charAt(j))){i=Math.ma......
  • Java并发(六)----线程start、run、state方法
    1、start与run调用runpublicstaticvoidmain(String[]args){  Threadt1=newThread("t1"){    @Override    publicvoidrun(){      log.debug(Thread.currentThread().getName());//打印线程名称      FileRe......
  • Java并发(五)----线程常见方法总结
    常见方法方法名static功能说明注意start() 启动一个新线程,在新的线程运行run方法中的代码start方法只是让线程进入就绪,里面代码不一定立刻运行(CPU的时间片还没分给它)。每个线程对象的start方法只能调用一次,如果调用了多次会出现IllegalThreadStateException......
  • django系列-起源&MTV设计模式
    一、django起源Django是一个开放源代码的Web应用框架,使用Python语言编写完成。由于Python语言是跨平台的,所以,不论操作系统是Windows、Linux还是macOSX,都可以开发Django应用。Web框架是一套组件,提供通用的设计模式,能够最大程度地降低开发Web站点的难度。Django的设计目标就是使开......
  • 4、HDFS-java操作类HDFSUtil及junit测试(HDFS的常见操作以及HA环境的配置)
    目录Hadoop系列文章目录一、pom.xml二、junit测试类三、操作类(帮助类)四、高可用环境的操作类本文编写了java对HDFS的常见操作,并且均测试通过。其功能包含构造conf、设置系统环境变量、创建目录、判断文件是否存在、获取文件/目录的大小等,具体见下图。本文分为四部分,即pom.xml、ju......
  • 5、zookeeper的java -Curator(服务注册与发现)
    目录Zookeeper系列文章目录一、知识介绍1、ServiceInstance2、ServiceProvider3、ServiceDiscovery1)、注册/注销服务2)、查询服务3)、服务缓存二、示例11、pom.xml2、ServiceInstance3、ServiceProvider及ServiceDiscovery4、注册服务的添加、删除、查询5、验证示例1三、示例21、Ins......
  • 4、zookeeper的java三种客户端介绍-Curator(crud、事务操作、监听、分布式计数器、分布
    目录Zookeeper系列文章目录一、zookeeper原生JavaAPI二、ZkClient三、Apachecurator1、pom.xml2、定义常量类3、连接实例化4、事务操作示例5、CRUD示例6、监听示例7、计数器示例1)、单机原子自增性实现1、Synchronized示例2、Lock示例3、AtomicInteger示例2)、分布式线程安全原子......
  • java数组去重_JAVA数组去重常用方法
    java数组去重_JAVA数组去重常用方法发布于 2022-09-1017:18:356950举报大家好,又见面了,我是你们的朋友全栈君。packagecom.zxj.test;importjava.util.ArrayList;importjava.util.Arrays;importjava.util.HashMap;importjava.util.List;importjava.util.......