【Java】 Java设计模式

这篇具有很好参考价值的文章主要介绍了【Java】 Java设计模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

白白胖胖,充满希望~


1. 工厂模式

Java工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需将对象的创建逻辑暴露给客户端代码。工厂模式通过定义一个工厂方法来创建对象,而客户端只需要调用该工厂方法即可获得所需对象,从而实现了对象的创建和使用的分离。

在Java中,工厂模式通常包括以下几个角色:

抽象产品(Product):定义了产品对象的通用接口,所有具体产品都必须实现这个接口。

具体产品(Concrete Product):实现了抽象产品接口的具体类,在工厂方法中将被创建。

抽象工厂(Factory):定义了工厂方法,用于创建产品对象的接口。

具体工厂(Concrete Factory):实现了工厂方法,返回具体产品对象的实例。

1.1 工厂模式运用场景

当需要在运行时根据某些条件创建对象时,可以使用工厂模式。例如,如果您正在构建一个游戏,每当用户选择一个角色时,您都希望创建一个相应的角色类的实例,则可以使用工厂模式。

如果需要隐藏特定类或者实现的细节并只暴露一个接口,那么您可以使用工厂模式。这使得客户端代码更加灵活和易于维护。

工厂模式还可以用于解决依赖性注入问题。如果您有一个类,它需要依赖于其他类的实例,并且您想要通过工厂来管理这些依赖项,那么使用工厂模式可以很好地解决此问题。

2. 单例模式

单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供全局访问点来访问该实例。

2.1 单例模式运用场景

单例模式通常用于需要保证全局只有一个实例对象的场景,例如:

数据库连接池:在应用程序中,数据库连接池是一种重要的资源,如果每次使用时都创建一个新的连接,会影响应用程序的性能。因此,将数据库连接池实现为单例可以避免创建多个连接,从而提高应用程序的性能。

日志记录器:在应用程序中,日志记录器是一种常见的工具,它可以用来记录应用程序的运行状态以及错误信息。由于日志记录器在整个应用程序中都会被使用,因此将其实现为单例可以确保所有的日志记录都进入同一个文件或者数据库中,便于统一管理和查看。

配置文件管理器:在应用程序中,配置文件通常用来存储应用程序的配置信息,例如数据库连接参数、服务器地址等。将配置文件管理器实现为单例可以确保所有的配置信息都被正确地加载,并且不会出现重复加载的情况。

总之,单例模式适用于任何需要确保全局只有一个实例对象的场景,特别是那些需要经常访问的对象,因为它可以帮助我们降低对象的创建和销毁成本,提高系统的性能和可维护性。

3. 建造者模式

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

public class User {
    private String name;
    private int age;
    private String email;

    private User(UserBuilder builder) {
        this.name = builder.name;
        this.age = builder.age;
        this.email = builder.email;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public String getEmail() {
        return email;
    }

    public static class UserBuilder {
        private String name;
        private int age;
        private String email;

        public UserBuilder(String name, int age, String email) {
            this.name = name;
            this.age = age;
            this.email = email;
        }

        public User build() {
            return new User(this);
        }
    }
}

在上面的代码中,我们定义了一个User类和一个内部类UserBuilder,在UserBuilder类中定义了三个属性:name、age和email,并提供了一个build()方法来返回一个User对象。这个UserBuilder类可以用来初始化User对象的属性,如下所示:

User user = new User.UserBuilder(“Tom”, 18, “tom@example.com”).build();

3.1 使用场景

建造者模式是一种创建型设计模式,它的主要目的是将一个复杂对象的构造过程和表示分离,从而使得相同的构造过程可以创建不同的表示形式。建造者模式通常适用于以下情况:

创建一个复杂的对象,其构造需要多个步骤或者涉及到多个可选组件。

需要在某些步骤中灵活地配置对象的构造过程,以满足不同的需求。

需要隐藏对象的构造细节,防止客户端直接访问构造函数。

需要避免构造函数参数列表过长,难以管理和维护。

建造者模式通过将构造过程分解为多个步骤,并提供一个统一的接口来指导这些步骤的执行顺序,使得客户端可以更加方便地创建所需的对象,同时也能够灵活地配置其构造过程,提高代码的可读性、可维护性和可扩展性。

4. 策略模式

Java 策略模式(Strategy Pattern)是一种行为型设计模式,它定义了一组算法,将每个算法都封装起来,使得它们之间可以互换。策略模式让算法的变化独立于使用算法的客户端,从而提高了代码的灵活性和可复用性。
在 Java 中,策略模式通常包括以下角色:

Context:上下文对象,持有一个对策略对象的引用,并将具体的任务委托给策略对象进行处理。

Strategy:策略接口,定义了所有支持的算法的公共接口。

ConcreteStrategy:具体策略类,实现策略接口中定义的算法,完成具体的任务。

4.1 应用场景

以下是Java策略模式的一些应用场景:

各种排序算法:在排序算法中,我们可以定义一个Comparator接口,并实现不同的比较器算法,这些算法可以根据具体需求灵活地进行切换。

图像处理:在图像处理中,我们可以定义一个Filter接口,并实现不同的滤镜算法,这些算法可以根据用户需要动态地选择和切换。

支付方式选择:在电商网站中,用户可以根据自己的需求选择不同的支付方式,而定义一个PaymentStrategy接口并实现不同的支付算法就可以实现这一功能。

游戏角色攻击方式:在游戏中,我们可以定义一个AttackStrategy接口,并实现不同的攻击算法,这些算法可以根据不同的游戏角色进行灵活切换。
适配器模式(Adapter Pattern):将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能在一起工作的那些类可以在一起工作。

装饰者模式(Decorator Pattern):动态地给一个对象添加一些额外的职责,就增加功能而言,比生成子类更为灵活。

观察者模式(Observer Pattern):定义对象间的一种一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会自动得到通知。

迭代器模式(Iterator Pattern):提供一种方法来访问聚合对象中的每个元素,而又不暴露该对象的内部表示。

模板方法模式(Template Method Pattern):定义一个操作中的算法骨架,将一些步骤延迟到子类中实现。文章来源地址https://www.toymoban.com/news/detail-708926.html

到了这里,关于【Java】 Java设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【迭代器设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    迭代器模式(Iterator Pattern),是一种结构型设计模式。给数据对象构建一套按顺序访问集合对象元素的方式,而不需要知道数据对象的底层表示。 迭代器模式是与集合共存的,我们只要实现一个集合,就需要同时提供这个集合的迭代器,就像Java中的Collection,List、Set、Map等

    2023年04月17日
    浏览(49)
  • 【模板方法设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    模板方法模式(Template Method Pattern)也叫模板模式,是一种行为型模式。它定义了一个抽象公开类,包含基本的算法骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变算法的结构,只是重定义该算法的某些特定步骤。不同的子类以不同的方式实现这些抽象方法

    2024年02月01日
    浏览(86)
  • 【享元设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    享元模式(Flyweight Pattern),是一种结构型设计模式。主要用于减少创建对象的数量,以减少内存占用和提高性能。它摒弃了在每个对象中保存所有数据的方式,通过共享多个对象所共有的相同状态,让你能在有限的内存容量中载入更多对象。 当程序需要生成数量巨大的相似

    2023年04月10日
    浏览(39)
  • 【访问者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    访问者模式(Visitor Pattern)是一种行为型模式。它封装一个访问者类,把各元素类的操作集合起来,目的是将数据结构与数据操作分离。在不改变原有元素类数据结构的前提下,改变了元素类的执行算法。 当某些较为稳定的东西(数据结构或算法),不想直接被改变但又想扩

    2024年02月02日
    浏览(81)
  • 【解释器设计模式详解】C/Java/Go/JS/TS/Python不同语言实现

    解释器模式(Interpreter Pattern)是一种行为型设计模式。这种模式实现了一个表达式接口,该接口解释一个特定的上下文。这种模式常被用在 SQL 解析、符号处理引擎等。 解释器模式常用于对简单语言的编译或分析实例中,为了掌握好它的结构与实现,必须先了解编译原理中的

    2023年04月12日
    浏览(233)
  • 【备忘录设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    备忘录模式(Memento Pattern)是一种结构型设计模式。这种模式就是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并放在外部存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录模式常常与命令模式和迭代子模式一同使用。 备忘录模式

    2023年04月20日
    浏览(76)
  • 【中介者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    中介者模式(Mediator Pattern)是一种行为型模式。它限制对象之间的直接交互,它用一个中介对象来封装一系列的动作,以让对象之间进行交流。中介者使各个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 当一些对象和其他对象紧密

    2023年04月19日
    浏览(39)
  • 【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

    观察者模式(Observer Pattern)是一种行为型模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式使用三个类Subject、Observer和Client。Subject对象带有绑定观察者到Client对象和从Client对象解绑观察

    2023年04月21日
    浏览(81)
  • java SSM 摄影作品网站myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一、源码特点     java SSM 摄影作品网站系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,spring+springMVC+mybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5

    2024年02月08日
    浏览(51)
  • java SSM问卷调查系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

    一、源码特点     java SSM问卷调查管理系统是一套完善的web设计系统(系统采用SSM框架进行设计开发,spring+springMVC+mybatis),对理解JSP java编程开发语言有帮助,系统具有完整的源代 码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.

    2024年01月22日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包