GOF23设计模式简述

设计模式的作用

        设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

        设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理地运用设计模式可以完美地解决很多问题,每种模式在现实中都有相应的原理来与之对应,每种模式都描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是设计模式能被广泛应用的原因。

        设计模式种类繁多,不必一次完全记住其全部实现,它更多是一种套路的总结,应注重了解其背后的思想,实际工作中,遇到相似问题,直接翻阅相关书籍,套用相关代码即可。

 

设计模式的SOLID原则

1、Single Responsibility Principle:单一职责原则SRP

  • 一个类只负责一个职责

2、Open Closed Principle:开闭原则OCP

  • 一个软件的应用实体应当对扩展开放,对修改关闭
  • 增加功能,扩展一个新的类,不要对已有的类进行修改

3、Liskov Substitution Principle:里氏替换原则LSP

  • 派生类(子类)对象可以在程序中代替其基类(超类)对象
  • 所有基类在的地方,都可以换成子类,程序还可以正常运行

4、Law of Demeter:迪米特法则LOD

  • 只与你直接的朋友通信,而避免和陌生人通信
  • 一个类尽量少跟其他类发生关系,也就是少依赖其他的类,便于类与类之间的解耦合

5、Interface Segregation Principle:接口隔离原则ISP

  • 拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法
  • 客户端不应该依赖它不需要的接口
  • 类间的依赖关系应该建立在最小的接口上
  • 相对于SRP,ISP是在功能上更为细致的划分

6、Dependence Inversion Principle:依赖倒置原则DIP

  • 要针对接口编程,不要针对实现编程,即多依赖接口,少依赖实现类
  • 原先A类需要B类的功能,直接在A类中调用B类,现在是写一个接口,B实现这个接口,A与接口发生关系
  • 依赖关系由具体改成抽象,所以叫做依赖反转或者依赖倒置

 

设计模式的分类

创建型

这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。

1、单例模式(Singleton Pattern)

2、工厂模式(Factory Pattern)

3、抽象工厂模式(Abstract Factory Pattern)

4、建造者模式(Builder Pattern)

5、原型模式(Prototype Pattern)

结构型

这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。

1、适配器模式(Adapter Pattern)

2、桥接模式(Bridge Pattern)
3、装饰模式(Decorator Pattern)
4、组合模式(Composite Pattern)
5、外观模式(Facade Pattern)
6、享元模式(Flyweight Pattern)
7、代理模式(Proxy Pattern)

行为型

这些设计模式特别关注对象之间的通信。

1、模板方法模式(Template Pattern)
2、命令模式(Command Pattern)
3、迭代器模式(Iterator Pattern)
4、观察者模式(Observer Pattern)
5、中介者模式(Mediator Pattern)
6、备忘录模式(Memento Pattern)
7、解释器模式(Interpreter Pattern)
8、状态模式(State Pattern)
9、策略模式(Strategy Pattern)

10、职责链模式(Chain of Responsibility Pattern)
11、访问者模式(Visitor Pattern)

 

参考资料

https://www.runoob.com/design-pattern/design-pattern-intro.html

https://blog.csdn.net/rocketeerLi/article/details/82356156

https://blog.csdn.net/Eastmount/article/details/41575053

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值