Java设计模式

什么是设计模式

设计模式,是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性。

设计模式中有五条设计原则
这里列出5条原则:

单一职责原则(SRP)
开闭原则(OCP)
里氏替换原则(LSP)
接口隔离原则(ISP)
依赖反转原则(DIP)
这些原则的主要目的是使软件修改更灵活,扩展和维护更容易。
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。

一、单例模式

保证一个类只有一个实例,并且提供一个访问该全局访问点

单例模式使用注意事项:
使用时不能用反射模式创建单例,否则会实例化一个新的对象
使用懒单例模式时注意线程安全问题
饿单例模式和懒单例模式构造方法都是私有的,因而是不能被继承的,有些单例模式可以被继承(如登记式模式)

哪些地方用到了单例模式:
网站的计数器,一般也是采用单例模式实现,否则难以同步。
应用程序的日志应用,一般都是单例模式实现,只有一个实例去操作才好,否则内容不好追加显示。
多线程的线程池的设计一般也是采用单例模式,因为线程池要方便对池中的线程进行控制

优点:不会频繁地创建和销毁对象,浪费系统资源。

使用场景:IO 、数据库连接、Redis 连接等。

http://www.taodudu.cc/news/show-3716983.html?action=onClick

二、工厂模式

为什么要使用工厂模式:

主要原因是要解耦,没有工厂模式,创建者和调用者在一起,导致代码的耦合性很高,为了解耦,引入工厂模式,将调用者和创建者分离。
产品等级和产品簇

​ 产品等级:即有继承结构的同种类的产品,我们称之为产品等级。比如:苹果手机、小米手机。
​ 产品族:一个具体工厂生产的不同等级的一组产品称为一个产品族。比如:小米手机、小米扫地机等。
工厂模式分类

无工厂模式的时候,创建者和调用者是在一起的。引入工厂模式就是实现了对象的创建者和调用者的分离。
简单工厂,创建一个工厂类,通过传入的内容不同而返回不同的对象。缺点:每增加一个产品就要增加一个具体产品类和修改工厂类,这增加了系统的复杂度,违背了开闭原则(不支持增加新产品,增加新产品需要修改代码)
工厂方法:将工厂独立成一个接口,每增加一个新的产品,就创建一个接口的具体实现类,这样就不需要修改原有代码,程序扩展起来非常方便。缺点:容易造成类的数量过多,增加系统的复杂性(支持增加新产品)
抽象工厂。(支持增加产品族,但不支持增加新产品)

学习链接:
https://www.cnblogs.com/xuxinstyle/p/9128865.html

三、代理模式

什么是代理模式
通过代理控制对象的访问,可以在这个对象调用方法之前、调用方法之后去处理/添加新的功能。(也就是AO的P微实现)
代理在原有代码乃至原业务流程都不修改的情况下,直接在业务流程中切入新代码,增加新功能,这也和Spring的(面向切面编程)很相似
代理模式应用场景
Spring AOP、日志打印、异常处理、事务控制、权限控制等

代理的分类
静态代理(静态定义代理类)
动态代理(动态生成代理类,也称为Jdk自带动态代理)
Cglib 、javaassist(字节码操作库)

三种代理的区别
1.静态代理:简单代理模式,是动态代理的理论基础。常见使用在代理模式
2dk动态代理:使用反射完成代理。需要有顶层接口才能使用,常见是mybatis的mapper文件是代理。
3.cglib动态代理:也是使用反射完成代理,可以直接代理类(jdk动态代理不行),使用字节码技术,不能对 fifinal类进行继承。(需要导入jar包)

四、策略模式

如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为
当存在多种逻辑不同,但属于同一类型的行为或者算法时,可以考虑使用策略模式。以此来消除你算法代码中的条件判断。同时让你的代码满足多种设计原则。

主要是为了 简化 if…else 所带来的复杂和难以维护

五、观察者模式

观察者模式,又可以称之为发布-订阅模式,观察者,顾名思义,就是一个监听者,类似监听器的存在,一旦被观察/监听的目标发生的情况,就会被监听者发现,这么想来目标发生情况到观察者知道情况,其实是由目标将情况发送到观察者的。

观察者模式多用于实现订阅功能的场景,例如微博的订阅,当我们订阅了某个人的微博账号,当这个人发布了新的消息,就会通知我们。
当一个对象状态的改变需要改变其他对象时, 比如: 商品库存数量发送变化时,需要通知商品详情页、购物车等系统改变数量。

观察者:对某个事件进行观察,当收到通知后,执行对应逻辑。
被观察者:负责维护所有的观察者对象,可以发布消息来通知观察者事件已经发生。
事件:观察者关系哪个事件,其实本质上就是观察者关心哪个对象的变化,观察者收到事件信息会做相应的处理。

比如说。智能家居,打开门后。所有相关的家电都打开。比如说窗帘。灯光、空调、等…

观察者模式有哪些使用场景?
https://www.zhihu.com/question/485740418

五、spring 中用到了哪些设计模式

  1. 工厂模式:比如BeanFactory, 就是简单工程模式的体系。用来创建对象的实例
    2.单例模式:比如Spring中的Bean, 默认就是单例模式
    3.装饰器模式,比如BeanWapper, 访问Bean 的属性和方法
    4.策略模式,比如SimpleInstantiationStrategy, Bean的实例化策略
    5.适配器模式:比如MVC模块中的HandelAdapter
    6.代理模式:比如Aop模块AopProxy,采用JDK动态代理和CGLIB字节码生成技术
    7.模板方法模式:比如RestTemplate, JdbcTemplate, 用来解决代码重复的问题
    8.观察者模式:比如ApplicationListener,当一个对象的状态发送改变时,所有依赖于它的对象都会得到通知。
    9.责任链模式:

观察者模式、策略模式、责任链模式都是属于行为型设计模式
行为型设计模式主要解决类或者对象直接互相通信的问题

总结

提示:这里对文章进行总结:

例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值