设计模式入门——初识及七大设计原则

设计模式的优点

1、可扩展性:当客户提出新业务要求,程序可在较小的改动下进行功能扩展,也可视为可维护性

2、可读性:代码具有编程规范性,便于阅读和理解,适合多人合作

3、可靠性:添加新功能对原有功能无影响

4、高内聚、低耦合:事实上这个特点是程序一直追求的

七大设计原则

1.单一职责原则

介绍:一个类只负责一个职责

应用:类A有职责1,职责2,职责1需求变更时,进行改动类A,由于职责2依赖于类A,就可能造成职责2执行错误。将类A分解成类A 1,类A 2解决问题,即满足单一职责原则

优点:降低类的复杂度,提高代码可读性、可维护性

注意:遵守该原则分解类本身就需要付出代价,因此,通常情况下我们遵守该原则,但在逻辑足够简单时可以将该 原则级别降低,不在类级别遵守单一职责,而在方法级别遵守单一职责。什么时候逻辑足够简单呢?比如职责1只需要一个方法时,只需要将职责1设计成一个方法而不需要设计成一个类。

2.接口隔离原则

介绍:用户不需要依赖它不需要的接口,一个类对另一个类的依赖应建立在最小接口上

应用:interface 1有五个接口,类A需要使用接口1、2、3,故通过interface 1创建实现类B,类C需要使用接口4、5,故通过interface 1创建实现类D。类B和类C都需要实现五个接口,但类B不需要实现接口4、5,而类D不需要实现接口1、2、3,故interface 1对他们来说不是最小接口。将interface 1拆分成有接口1、2、3的interface 2、有接口4、5的interface 3即解决问题,将接口隔离起来,即满足接口隔离原则。

错误案例
在这里插入图片描述
正确
在这里插入图片描述

3.依赖倒置原则

介绍:抽象不应该依赖具体,具体应该依赖抽象;中心思想是面向接口编程

应用:具体类A有一个接受信息行为,类B实现接受电子信息,类A直接依赖具体类B,B作为参数传入A,如果该行为新增实现类C,类C实现接受邮件信息,而具体类A要使用新实现,则具体类A也要添加新改动,即需要将 C作为参数传入A。如果将类B继承interface 1,接收信息行为设置为interface 1的规范(即接口1),接受类作为参数传入A,则添加新实现只需新增实现类C继承interface 1,而不需要改动A。

错误案例错误案例
正确正确

优点:相对于具体的多变性,抽象要稳定的多。使用接口或抽象类的目的是定好规范,具体的细节实现交给他们的实现类去解决。

依赖传递:三种传递方式:接口传递,构造器传递,setter方法传递

注意:

  • 低层模块尽量都有抽象的依赖。
  • 变量引用时(new 对象时),尽量都是抽象类或接口,这样,模块和变量的引用之间就有了一个缓冲区,便于程序的扩展和优化。
  • 继承时遵守里氏替换原则。
4.里氏替换原则

介绍:所有引用基类的地方必须能透明的(相当于直接替换)的使用其子类。遵守里氏替换原则,相当于要求子类尽量不要重写它的父类。

应用:定义父类Father和子类Son,他们有一个方法1。程序员A为了新功能将Son重写了方法1,程序员2使用Son的方法1,没有太注意,将方法1按照父类的定义来使用(因为一般看父类的注释不继续往下面看子类的),于是出现了bug。这时可以让Father和Son类继承一个更抽象的基类Base类,让Father和Son类继承Base类,重写的方法1放到Son类,原来的还是Father类。Father类想使用重写的方法1可以引入Son类

注意:继承实际上在一定程度上也让两个类有些耦合(父类修改时所有的子类会受到影响),适当情况下,可以通过聚合、组合和依赖的形式解决问题。

5.开闭原则

介绍:一个软件实体,如类、模块、函数应该对扩展开放(即提供方,新加的软件实体),对修改关闭(即使用方,原有的软件实体)。当变化时尽量通过扩展软件实体来实现要求,而不是修改已有细节。

应用:参考依赖倒置原则应用

注意:开闭原则是编程中最基础最通用的原则,编程中遵循其他原则以及使用设计模式即为了实现此原则

6.迪米特原则

介绍:一个类应该对另一个类保持最少的了解,只知道实现结果不需要知道过程,故又称“最少知道原则”。不论依赖的类内部逻辑多么复杂,尽量将其封装在自己内部,对外只提供方法,不泄露任何信息。

解析:此原则也就是只与最直接的朋友进行通信。类与类之间必然会有耦合关系,这种耦合可以称之为朋友。其中,称成员变量、方法参数、返回值中的类为最直接的朋友,而局部变量中的类不为直接朋友。陌生的类 最好不要以局部变量的形式出现在类的内部。

注意:

  • 迪米特原则核心是降低类之间的耦合
  • 迪米特原则只是降低类的耦合,不可能耦合完全消失
7.合成复用原则

介绍:尽量使用聚合/组合关系,而不是继承

应用:类A有抽象方法1,类B想使用方法1故而继承类A,然而当类A新增抽象方法2时类B就必须继承,增大耦合性。此时应该让B与A之间为组合/聚合关系。

设计模式类型

二十三种设计模式分类

三种类型具体模式
创建型单例模式、工厂模式、抽象工厂模式、原型模式、建造者模式
结构型适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式
行为型模板方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、责任链模式(职责链模式)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值