业务需求,代码书写的提升需要考虑设计模式

本文深入探讨了软件设计中的19种常见模式,包括单例、工厂、代理、适配器、观察者、策略、模板、命令、组合、装饰、过滤器、建造者、备忘录、中介者、迭代器、状态、责任链、MVC和服务定位器模式。每种模式详细阐述了其实质、优点、缺点,并提供了相关案例,旨在提升代码质量和可维护性。
摘要由CSDN通过智能技术生成

业务需求,代码书写的提升需要考虑

一、设计方案

实质:是基于类,对其实例化进行的设计;

1、单例设计

实质:(也是优点)
1)、静态全局的类实例化;
(理解:单例是用创建的类静态化自身对象属性,内部实例化对象,返回值是对象,所以哪里单个或者同时多个引用这个实例化,都是从这里拿的,因此对象永远只有一个);
2)、基于1)产生的类的数据资源共享;
(理解:因为是全局静态的唯一实例化,因此其数据内存中也只会开辟一个空间来存储其数据,因此数据资源共享);
缺点:
首先要明白其线程安全,指的是对这个实例化对象为单例的安全性,即真实结果是实例化了一个实例为安全,若实例化了多个实例为不安全;故这里实例化对象加锁的原因,就是防止把这个方法引用在线程中应用时候,当多个线程进入到单例方法中时候,会出现问题;如:
饿汉式就是线程安全的,因为一开始就实例化了;
饱汉式就是线程不安全的,因为不加锁的时候,若把方法在多线程中使用时候,各个线程会不同时的抢到这个方法的调用,导致实例化为多个对象了,不符合单例的初衷了,故线程不安全;但是加锁后,就会影响效率;
双锁模式就是即线程安全,又搞笑,推荐使用这个;
案例:
饱汉式
在这里插入图片描述
饿汉式
在这里插入图片描述
双重锁模式
在这里插入图片描述

2、工厂模式

实质:(也是优点)
静态全局方法,多态接受实例化类型;
根据需要生产出对应实例化对象;
缺点:
新增场景,要新增类和工厂类
基于上述新增类的模式,工厂类开销大
案例:
三部曲:
Step1:写类接口
Step2:写实现的继承类
Step3:写工厂多态类/或者用抽象工厂类+工厂具体实现类
工厂类单方法模式:(一般不用,作为理解其原始演变来看,因为场景变化后,工厂类的判断改动比较大,不方便)
在这里插入图片描述
工厂类多方法模式:(常用,因为在工厂类中采用多个方法来应对不同场景,开销比下面要讲的抽象工厂类小的多,虽然抽象工厂类更好;核心优势:即保留了简单单方法的解耦特性,又保留了开销小特点)
在这里插入图片描述
抽象工厂类模式:(工厂类进行抽象后,具体想用什么工厂实现对什么类的实现,就代码改动量更小;核心优势:所有优势都有,就是缺点是开销大)
在这里插入图片描述

3、代理模式

实质:(也是优点)
代理类去实例化目标类,及扩展目标类中的某个函数方法
缺点:
由于多了一个代理对象,可能会使请求的处理速度变慢。有些代理的实现较为复杂。
案例:
静态代理
缺点:
只能代理一个类,要代理其它类,就要写大量代理类;
在这里插入图片描述
动态代理:
优点:解决了避免写很多代理类的缺点;
在这里插入图片描述
动态代理底层实现原理:
动态代理底层实现

4、适配器模式

实质:(也是优点)
让不同接口各自进行实现类实例常态,转变为统一受一个接口来进行实例,及调用其内部方法;
缺点:
案例:
在这里插入图片描述

5、观察者模式

实质:(也是优点)
间谍模式,基于对象之间的依赖性关系而巧用,可以一对多;书写四要素:1)被观察者中要有潜伏观察者对象,如此才能观察到被观察者的一举一动;
2)观察者可以潜伏多个,所以被观察者中需要有添加和删除观察者的方法
3)观察者要把观察到的信息通知给主人即客户端,所以被观察者中要有个通知方法
4)被观察者要有自己的行为举止业务,所以被观察者中要有自己的行动方法
缺点:
将所有的观察者都通知到,会浪费时间
案例:
在这里插入图片描述

6、策略模式

实质:(也是优点)
一种策略场景类,对应多种策略行为,具体实例化策略对象在客户端;
我们可以改变设置多种共性场景条件,这样就避免了if_else对不同场景的判断,代码简洁;
对比:
对比工厂模式,策略模式偏重的是场景判断,而工厂模式偏重是对象创建资源利用;
缺点:
增加不同策略,就需要增加策略类
案例:
在这里插入图片描述

7、模版模式

实质:(也是优点)
提出了子类的公共行为作为一个对象来进行实例化;模版流程中的具体的某个方法具体类去实现;
缺点:
执行多少个子类行为,就要创建多少个子类;
案例:
在这里插入图片描述

8、命令模式

实质:(也是优点)
把多个命令封装为类
把具体执行操作封装为类
把调用者封装为类
客户端来控制到底执行哪个命令,就实例化哪个命令
缺点:
需要写很多命令
案例:
在这里插入图片描述

9、组合模式

实质:(也是优点)
核心理解:
对象中有什么数据格式的数据,就可以实例化后封装什么样的格式数据;只不过是用自身方法的方式来自我进行添加删除等各种处理;
属性为多态时候,就可以实现子类对象之间的相互封装,根据封装的先后顺序就自动可以呈现出不同的树状结构;
拓展理解:
亦称“对象结构型模式”,即组合多个封装对象,让其呈现为具有层次结构的树状模式;解决的是树状结构展现中,对各个支节点不停判断的繁琐,让主节点和支节点不再区别看待,当然前提是各个节点中的方法具有共性;
缺点:
子类的方法要是共同类似的,这样树状结构才有意义;
案例:
在这里插入图片描述

10、装饰模式

实质:(也是优点)
缺点:
案例:

11、过滤器模式

实质:(也是优点)
缺点:
案例:

12、建造者模式

实质:(也是优点)
缺点:
案例:

13、备忘录模式

实质:(也是优点)
缺点:
案例:

14、中介者模式

实质:(也是优点)
缺点:
案例:

15、迭代器模式

实质:(也是优点)
缺点:
案例:

16、状态模式

实质:(也是优点)
缺点:
案例:

17、责任链模式

实质:(也是优点)
缺点:
案例:

18、MVC模式

实质:(也是优点)
缺点:
案例:

19、服务定位器模式

实质:(也是优点)
解决依赖注入,是等价于@Inject的;对框架架构设计非常有帮助;
缺点:
案例:

附加:案例实践之相关网站

相关设计经典网站

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值