设计模式-23种设计模式整体介绍及应用场景、七大设计原则总结

、创建型模式:都是用来帮助我们创建对象的!(关注对象的创建过程

1.单例模式

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

2.工厂模式("Gof book"中把工厂方法与抽象工厂分为两种模式,所以创建型模式共为五种,这里只是为了方便整理,合在了工厂模式中)

  -简单工厂模式

用来产同一等级结构的任意产品。(对于增加新的产品,需要修改已有代码)

  -工厂方法模式

用来生成同一等级结构中的固定产品。(支持增加任意产品)

  -抽象工厂模式

用来生产不同产品族的全部产品。(对于增加新的产品,无能为力,支持增加产品族)

3.建造者模式

  分离了对象子组件的单独构造(由Builder负责装配(由Director负责)从而可以构造出复杂的对象。

4.原型模式

  通过new产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式

 

、结构型模式:是从程序的结构上实现耦合,从而可以扩大整体的类结构,用来解决更大的问题。(关注对象类的组织

1.适配器模式

  工作中的场景:经常用来做旧系统改造和升级如果我们的系统开发之后再也不需要维护,那么很多模式都是没必要的,但是不的是,事实却是维护一个系统的代价往往是开发一个系统的数倍

  学习中见过的场景:

java.io.InputStreamReader(InputStream);   java.io.OutpuStreamWriter(OutputStream)

2.代理模式

   核心作用:通过代理,控制对对象的访问可以详细控制访问某个(某类)对象的方法在调用这个方法前做前置处理调用这个方法后做后置处理。(AOP微观实现

   AOPAspect Oriented Programming面向切面编程核心实现机制!

   开发框架中应用场景:

 structs2中拦截器的实现;数据库连接池关闭处理;Hibernate中延时加载的实现;mybatis中实现拦截器插件;AspectJ的实现;springAOP实现(日志拦截,声明事务处理);web serviceRMI远程方法调用

3.桥接模式

实际开发中应用场景

JDBC驱动程序;

AWT中的Peer架构;

银行日志管理:格式分类:操作日志交易日志、异常日志

              距离分类:本地记录日志异地记录日志

人力资源系统中奖金计算模块:奖金分类:个人奖金、团体奖金、激励奖金。

                              部门分类:人事部门销售部门研发部门

OA系统中的消息处理:业务类型:普通消息加急消息特急消息。

                     发送消息方式:系统内消息手机短信、邮件

4.装饰模式

职责:动态的为一个对象增加新的功能装饰模式是一种用于代替继承的技术,无须通过继承增加子类就能扩展对象的新功能使用对象的关联关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀。

5.组合模式

使用场景:把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对象和整体对象。

核心:抽象构件角色定义了叶子和容器构件的共同点;叶子构件角色:无子节点;容器构件角色:有容器特征,可以包含子节点

6.外观模式

开发中常见的场景

频率很高。哪里都会遇到。各种技术和框架中,都有外观模式的使用

JDBC封装后的,commons提供的DBUtilsHibernate提供的工具类、Spring JDBC工具类

7.享元模式

场景:内存属于稀缺资源,不要随便浪费,如果有很多个完全相同或相似的对象,我们可以通过享元模式,节省内存

核心:享元模式共享的方式高效地支持大量细粒度对象的重用;享元对象能做到共享的关键是区分了内部状态和外部状态。内部状态:可以共享,不会随环境变化而改变外部状态:不可以共享,会随环境变化而改变

 

、行为型模式:关注系统中对象之间的相互交互,研究系统在运行时对象之间的相互通信和协作,进一步明确对象的职责

1.责任链模式

定义:将能够处理同一类请求的对象成一条链,所提交的请求沿着链传递链上的对象逐个判断是否有能力处理该请求,如果能则处理,如果不能则传递给上的下一个对象。

场景:打牌时,轮流出牌;接力赛跑中,奖学金审批;公司中,公文审批

2.迭代器模式

场景提供一种可以遍历聚合对象的模式称为游标cursor模式聚合对象:存储数据;迭代器:遍历数据

3.中介者模式

核心:如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系极其复杂,这些对象称为“同事对象”;我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为一对多的星形结构。

4.命令模式

定义:将一个请求封装一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作之为:动作Action模式事务transaction模式

5.解释器模式

介绍:是一种不常用的设计模式;用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计当我们需要开发一种新的语言时,可以考虑使用解释器模式尽量不要使用解释器模式,后期维护会有很大麻烦项目中,可以使用JrubyGroovyjavajs引擎来替代解释器的作用,弥补java语言的不足

6.策略模式

本质:分离算法,选择实现。

开发中常见的场景:JAVASEGUI编程中,布局管理;Spring框架中,Resource接口,资源访问策略;

7.模板方法模式

核心:处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定因此我们采用工厂方法模式,将这个节点的代码实现转给子类完成。即:处理步骤父类中定义好,具体实现延迟到子类中定义

8.状态模式

核心:用于解决系统中复杂对象的状态转移以及不同状态下行为的封装问题

9.观察者模式

核心:观察者模式主要用于1N的通知。当一个对象(目标对象SubjectObjservable)状态变化时,他需要及时告知一系列对象(观察者对象,Observer),令他们做出响应

10.备忘录模式

核心:就是保存某个对象内部状态的拷贝,这样以后就可以该对象恢复到原先的状态。

11.访问者模式

核心:将作用于某种数据结构中各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作为数据结构中的每个元素提供多种访问方式。

 

、七条开发原则

1.开闭原则(扩展开放,修改关闭

2.里氏替换原则(继承必须确保所拥有的性质在子类中依然成立)

3.依赖倒置原则(要面向接口编程,不要面向实现编程

4.单一职责原则(一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分

5.接口隔离原则(要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用

6.迪米特法则(如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用

7.合成复用原则(它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系实现

设计模式-23种设计模式整体介绍及应用场景、七大设计原则总结

上一篇:docker修改端口映射


下一篇:FTP服务