1.JAVA设计模式
1.1 什么是设计模式
设计模式是软件开发过程中前辈们在长期实践中针对重复出现的问题总结出来的最佳解决方案。这些模式不是具体的代码实现,而是经过验证的、可重用的设计思想,能够帮助开发者更高效地解决特定类型的问题。
设计模式的重要性体现在:
提供了标准化的解决方案模板
促进了代码重用和设计一致性
提高了系统的可维护性和扩展性
便于开发者之间的沟通和理解
1.2 为什么要学习设计模式
学习设计模式对开发者有多方面的好处:
提高编程思维能力:培养面向对象的设计思维,学会从更高层次思考问题
标准化设计:遵循业界认可的最佳实践,使设计更加规范化
增强代码质量:
提高代码复用性,减少重复代码
增强系统可扩展性,便于未来功能添加
提高灵活性,使系统更容易适应变化
提升源码阅读能力:许多优秀框架和库都使用了设计模式,理解模式有助于快速掌握其设计思想
开闭原则支持:在大型项目中添加新功能时,可以最小化对现有代码的影响
2.UML建模语言基础
统一建模语言(UML)是软件设计中用于分析和设计类与类(接口)之间关系的标准化建模语言。它通过静态图形(类图)来表达系统结构。
2.1 UML类图基本要素
类(Class)表示:
接口(Interface)表示:
完整类图示例:
2.2 类之间的关系详解
1. 继承关系(Inheritance)
表示"is-a"关系,即子类是父类的一种特殊化:
类继承类
接口继承接口
示例:
这里Student和Teacher可能继承自一个共同的Person类,共享name等属性
2. 实现关系(Realization)
表示类实现接口的功能:
Car和Ship类都实现了Vehicle接口的move()方法,但各自实现方式不同
3. 依赖关系(Dependency)
"use-a"关系,在一个类的方法中使用另一个类,具有临时性:
Person类在call方法中临时使用了MobilePhone对象,方法结束后关系解除
4. 关联关系(Association)
"has-a"关系,一个类作为另一个类的成员变量。根据强弱可分为:
聚合关系(Aggregation)
弱关联,整体和部分可以独立存在:
即使University不存在了,Teacher仍然可以存在
组合关系(Composition)
强关联,生命周期一致,整体控制部分的生命周期:
Head和Mouth是强关联,Head不存在时Mouth也不存在
3.学习笔记
4.拓展
4.1 设计模式分类
设计模式通常分为三大类:
创建型模式
单例模式(Singleton)
工厂方法模式(Factory Method)
抽象工厂模式(Abstract Factory)
建造者模式(Builder)
原型模式(Prototype)
结构型模式
适配器模式(Adapter)
装饰器模式(Decorator)
代理模式(Proxy)
外观模式(Facade)
桥接模式(Bridge)
组合模式(Composite)
享元模式(Flyweight)
行为型模式
策略模式(Strategy)
模板方法模式(Template Method)
观察者模式(Observer)
迭代器模式(Iterator)
责任链模式(Chain of Responsibility)
命令模式(Command)
备忘录模式(Memento)
状态模式(State)
访问者模式(Visitor)
中介者模式(Mediator)
解释器模式(Interpreter)
4.2 设计模式应用原则
开闭原则(OCP):对扩展开放,对修改关闭
单一职责原则(SRP):一个类只负责一个功能领域
里氏替换原则(LSP):子类必须能够替换父类
依赖倒置原则(DIP):依赖抽象而非具体实现
接口隔离原则(ISP):使用多个专用接口而非单一总接口
迪米特法则(LoD):最少知识原则,减少类间耦合
组合/聚合复用原则(CARP):优先使用组合而非继承
4.3 实际应用建议
不要过度设计:只在必要时应用设计模式
理解优于记忆:掌握模式背后的思想比记住结构更重要
灵活应用:根据实际情况调整模式实现
重构到模式:可以先实现功能,再通过重构引入模式
模式组合:复杂问题可能需要多个模式组合解决
设计模式是优秀开发者的重要工具,但并非银弹。合理运用可以显著提高代码质量,而滥用则可能导致过度设计。理解每种模式的适用场景和优缺点,才能在适当的时候做出最佳选择。