常用设计模式笔记

设计模式

一、为什么要使用设计模式

提高代码复用性、扩展性、减少冗余代码;

二、设计模式的六大原则

1.开闭原则:程序设计应该是对扩展开发,对修改关闭;任何一次扩展都要达到热拔插的效果,基于接口和抽象类的使用
2.里氏替换原则(LSP):子类可以出现并替换在任何父类的出现的地方
3.依赖倒转原则:针对接口编程,依赖于抽象而不是具体实现
4.接口隔离原则:使用多个隔离的接口,比使用单一接口要好。尽可能的解耦	,降低依赖
5.最知道导原则(迪米特法则):一个实体应当尽可能的减少与其他实体的相互作用,是系统功能尽可能的独立
6.	合成/复用原则:尽量使用合成/聚合的方式,而不是使用继承。在新类中使用已有对象时,如果新对象不是is-A已有对象,那么就要使用合成/聚合原则,负责就违反了里氏替换原则;如 一个已有类 人 ,对应的角色有 学生、儿子等等;如果使用继承,那么这个人使学生的同时不能成为儿子,显然这种关系时has-A的关系,即学生时人的一种。当两个类满足,is-A,即是已有类的唯一一种时,可以将新类设计为已有类的子类,使用继承。当是has-A的关系时,使用合成/聚合原则;

三、设计模式的分类

1.分类

1.创建型:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式
2.结构型:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式
3.行为型:策略模式、模板方法模式、观察者模式、责任链模式、迭代子模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式

2.具体介绍

1.策略模式

 什么是策略模式?
 	就是对算法的包装,将算法的责任和算法本身分割开来,委派给不同的对象管理,最终通过标识实现解决多重if判断问题
 要素:
 	环境(Context):持有一个strategy的引用
 	抽象策略(Strategy)角色:通常由接口或者抽象类完成,这个角色给出所有的具体策略类所需的接口
	具体策略角色:具体的策略内容,包装了相关算法或行为
 使用流程:
 	定义策略接口-->实现不同的策略-->利用多态或者其他方式调用策略
 优点:
  	算法可以自由切换(屏蔽算法,角色自由切换)
  	避免使用多重if判断(如果算法过多,会出现相同判断难以维护)
  	扩展性好(可以自由添加取消算法、而不影响整个功能)
 缺点:
    策略类数量增多(每一个具体策略复用性很小)
    所有策略类都需要对外暴漏
 举例:
  	1.spring底层Resource接口采用策略模式:
  		spring为Resource接口提供了一下实现
 				URLResource 访问网络资源
 				ClasspathResource 访问类加载路径资源
 				FileSystemResource 访问文件系统资源
 				ServeletContextResource 访问相对于ServletContext路径里的资源
 				InputStreamResource 访问输入流资源
 				ByteArrayResource 访问字节数组资源
 策略模式示意图
 				![策略模式示意图](https://img-blog.csdnimg.cn/20200807180611848.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzIyNTY0NA==,size_16,color_FFFFFF,t_70)

2.责任链模式

什么是责任链模式?
																													-- TO BE CONTINUED
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值