java设计模式

单例模式

概念:如果一个类只允许创建一个对象(或实例),那么,这个类就是一个单例类,这种设计模式就称为单例设计模式 (Singleton Design Pattern), 简称单例模式 (Singleton Pattern)。

Java单例模式可以在以下情况下使用:

线程池:通过使用单例模式,可以确保只有一个线程池实例存在,以便统一管理和复用线程资源。

电脑中的任务管理器就是第一个单例


数据库连接池:在访问数据库时,使用单例模式可以创建一个数据库连接池,以避免频繁地创建和释放数据库连接,提高系统性能和资源利用率。

缓存管理器:在应用程序中使用缓存可以提高性能。使用单例模式可以创建一个缓存管理器,确保只有一个缓存实例存在,用于统一管理缓存数据。

日志记录器:在应用程序中记录日志是常见的需求。使用单例模式可以创建一个日志记录器,用于统一管理日志操作和记录。

配置管理器:应用程序通常需要读取配置信息,例如数据库连接参数、服务配置等。
使用单例模式可以创建一个配置管理器,以便统一管理和加载配置信息。

工厂模式:

作用:主要用于创建对象时的一系列操作。

new 类

在我们平时创建对象的时候,一般使用New关键字来进行创建,并在构造函数里对实例化对象进行初始化。
然而个别对象在创建的时候很麻烦,可能需要对他进行一系列初始化操作,例如查询数据库,对属性赋值等等。

针对这种情况,我们可以引入 ”工厂“ 的概念,
我们不通过New关键字去创建对象了,我们直接去创建一个工厂,让工厂去帮我们创建对象。

(工厂模式通常创建类型不同但相关的对象,如:继承同一父类或接口的一组子类)

建造者模式:

建造者模式 (Builder Pattern)又称为构建者模式或生成器模式。
实际上,建造者模式的原理和代码实现非常简单,掌握起来并不难,其难点在于应用场景。

我们在看过代码后思考下列两个问题:
一:直接使用构造函数或配合setter方法就能创建对象,为什么还需要通过建造者模式创建呢?
二:建造者模式和工厂模式都可以创建对象,它们的区别是什么?带着这两个问题,我们学习建造者模式。

package design.src.设计模式.d3_builder.demo0;

/*
 * 需求:用户对象
 * 1.用户名不能为空
 * 2.密码不能为空
 * 3.年龄必须在0~150之间
 * 4.手机品牌和手机号要不都是null,要不都有值
 *
 * */

public class User {
    private String username;
    private String password;
    private int age;
    // 手机品牌
    private String phone;
    // 手机号
    private String phoneNumber;

    private User(Builder builder) {
        this.username = builder.username;
        this.password = builder.password;
        this.age = builder.age;
        this.phone = builder.phone;
        this.phoneNumber = builder.phoneNumber;
    }

    // 只提供静态内部类Builder来创建User对象的方式
    public static class Builder {
        private String username;
        private String password;
        private int age;
        // 手机品牌
        private String phone;
        // 手机号
        private String phoneNumber;

        public Builder setUsername(String username) {
            this.username = username;
            return this;
        }

        public Builder setPassword(String password) {
            this.password = password;
            return this;
        }

        public Builder setAge(int age) {
            this.age = age;
            return this;
        }

        public Builder setPhone(String phone) {
            this.phone = phone;
            return this;
        }

        public Builder setPhoneNumber(String phoneNumber) {
            this.phoneNumber = phoneNumber;
            return this;
        }

        public User build() {
            // 参数校验逻辑,以后无论校验逻辑多复杂,都只聚焦在build(),便于维护
            if (username == null) {
                throw new IllegalArgumentException("用户名不能为空");
            }
            if (password == null) {
                throw new IllegalArgumentException("密码不能为空");
            }
            if (age < 0 || age > 150) {
                throw new IllegalArgumentException("年龄必须在0~150之间");
            }
            if (phone == null && phoneNumber != null) {
                throw new IllegalArgumentException("有手机号却没手机品牌异常");
            }
            if (phone != null && phoneNumber == null) {
                throw new IllegalArgumentException("有手机品牌却没手机号异常");
            }
            return new User(this);
        }
    }

}


当一个对象的创建有很多条件时,可以考虑采用建造者模式
比如下面这个需求:

/*
 * 需求:用户对象
 * 1.用户名不能为空
 * 2.密码不能为空
 * 3.年龄必须在0~150之间
 * 4.手机品牌和手机号要不都是null,要不都有值
 * */

public class User {
    private String username;
    private String password;
    private int age;
    // 手机品牌
    private String phone;
    // 手机号
    private String phoneNumber;

代理模式:

代理模式 (Proxy Design Pattern) 的描述:
在不改变原始类(或称为被代理类)的情况下, 通过引入代理类来给原始类附加不相关的其他功能。

代理模式应用场景:
代理模式的基本功能是通过创建代理类为原始类附加不相关的其他功能。
代理模式可以应用在开发一些非业务需求上,如监控、统计、鉴权、限流、事务、幂等和日志


装饰器模式:

装饰器模式是指在不改变现有对象结构的情况下,动态的给改对象增加一些职责(即增加其额外功能)的模式。


装饰器模式通常在以下几种情况使用。

当需要给一个现有类添加附加职责,而又不能采用生成子类的方法进行扩充时。
例如,该类被隐藏或者该类是终极类或者采用继承方式会产生大量的子类。

当需要通过对现有的一组基本功能进行排列组合而产生非常多的功能时,采用继承关系很难实现,而采用装饰器模式却很好实现。

当对象的功能要求可以动态地添加,也可以再动态地撤销。

责任链模式:

职责链设计模式 (Chain of Responsibility Design Pattern)简称职责链模式。

将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求;将这些接收对象串成一条链,
并沿着这条链传递 这个请求,直到链上的某个接收对象能够处理它为止
(Avoid coupling the sender of a request to its receiver by giving more than one
object a chance to handle the request. Chain the receiving objects and pass the
request along the chain until an object handles it)。

在职责链模式中,多个处理器(也就是定义中所说的“接收对象”)依次处理同一个请求。
一个请求首先经过A处理器处理,然后,这个请求被传递给B 处理器,B处理器处理完后再
将其传递给C 处理器,以此类推,形成一个链条。因为链条上的每个处理器各自承担各自的 职责,
所以称为职责链模式。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值