JAVA开发中的设计模式
前言
在《java抽象类和模板方法设计》中,讲到了利用接口和抽象类进行模板方法设计。在我们实际开发的过程中,最多的操作可能就是curd堆业务代码,只有负责架构的才会去考虑设计模式相关的东西,然而呢,其实我们接触到与java设计模式相关的还是很多,例如,jDK源码,几乎每个web项目都会使用的企业级应用分层框架spring框架等。
在软件开发过程中,对于软件架构的设计,我们需要从耦合性、内聚性以及可维护性、可扩展性、重用性、灵活性等多方面进行考虑,设计模式的出现在这些方面为我们提供了思路和解决方案。
设计模式的七大原则
设计模式的原则,指的就是我们在软件编程的过程中,应该遵循的原则,它是设计模式的基础和依据,主要有七大原则:
- 单一职责原则 (Single Responsibility Principle)
- 接口隔离原则 (Interface Segregation Principle)
- 依赖倒转原则 (Dependence Inversion Principle)
- 里氏代换原则 (Liskov Substitution Principle)
- 开闭原则 (Open Close Principle)
- 迪米特法则(Demeter Principle)
- 合成复用原则(Composite Reuse Principle)
设计模式的分类
总体来说设按照功能可将计模式分为三大类:
分类 | 功能 | 设计模式 |
---|---|---|
创建型模式 | 主要用于创建对象 | 工厂方法模式、抽象工厂模式、单例模式、原型模式、建造者模式 |
结构型模式 | 主要用于处理类或者对象的组合 | 适配器模式、桥接模式、装饰器模式、代理模式、外观模式、组合模式、享元模式 |
行为型模式 | 主要用于描述对类或对象怎样交互和怎样分配职责 | 策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式 |
其实还有两类:并发型模式和线程池模式。
创建型模式(Creational patterns)
创建型模式,顾名思义就是用来创建对象的设计模式,所以这种类型的模式主要用途是就用于创建对象,关注点是对象的创建。这种类型的设计模式主要特点是将创建对象的过程进行了抽象,封装,对于对象的使用者而言只需调用,而不需要去关心对象创建的过程如何。
结构型模式(Structural patterns)
结构型设计模式,为我们如何组合类和对象以获得更大的结构提供思路,从程序的结构上解决模块之间的耦合问题。
从组合结构上来看,又可以分为两类:类结构型模式、对象结构型模式。类结构型模式主要关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系;对象结构型模式则主要关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法,更符合“合成复用原则”。
行为型模式(Behavioral patterns)
行为型模式,是设计模式中最为庞大的一类,前面两类模式已经解决了对象的创建问题及类和对象的组合结构问题,那么这第三大类型的模式自然就是用来解决类或对象相互协作的问题。这类设计模式主要用于描述程序在运行时复杂的流程控制,例如分配算法与对象间职责,协调类或对象之间相互协作等。
当然,行为型模式也可分为两类:类行为模式、对象行为模式。类行为模式采用继承机制来在类间分派行为,对象行为模式则采用组合或聚合在对象间分配行为;由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。
设计模式之间的关系
给两张图
设计模式在软件中的应用
graph LR A(面向对象) -->|设计模式+算法+数据结构| B[功能模块] B -->|多种设计模式| C[框架] C -->|服务器集群| D[架构]
总结
设计模式实际是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的问题解决方案,当我们在软件开发过程中面临一般问题时,不妨从这方面入手看是否能找到解决方法。
设计模式包含了面向对象的精髓,“懂了设计模式,你就懂了面向对象分析和设计(OOA/D)的精要”。