23种设计模式(1)

23种设计模式(1)

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

设计模式(Design Pattern)是前辈们对代码开发经验得总结,是解决特定问题的一系列套路,他不是于法规定,而是一套用来提高代码可复用性,可维护性,可读性,稳健性以及安全性的解决方案。

设计模式的本质是面向对象设计原则的实际运用,是对类的封装性,继承性和多态性以及类的关联关系和组合关系的充分理解。

正确的使用设计模式具有一下优点:
1).可以提高程序员的思维能力,编程能力和设计能力
2).可以让程序更加标准化,代码更加工程化,使软件开发效率大大提高,从而缩短软件的开发周期。
3).使设计的代码可重用性高,可读性强,可靠性高,灵活性好,可维护性强。

23种设计模式可分为三大类,他们分别是
一).创建型模式
抽象工厂模式(Abstract Factory)
建造者模式(Builder)
工厂方法模式(Factory Method)
原型模式(Prototype)
单例模式(Singleton)
二).结构型模式
适配器模式(Adapter)
桥接模式(Bridge)
组合模式(Composite)
装饰模式(Decorator)
外观模式(Facade)
享元模式(Flyweight)
代理模式(Proxy)
三).行为型模式
职责链模式(Chain of Responsibility)
命令模式(Command)
解释器模式(Interpreter)
迭代器模式(Iterator)
中介者模式(Mediator)
备忘录模式(Memento)
观察者模式(Observer)
状态模式(State)
策略模式(Strategy)
模板方法模式(Template Method)
访问者模式(Visitor)

衡量软件质量的两个重要属性
1).可复用性:指软件能够被重复使用的难易程度。
2).可维护性:指软件能够被理解,改正,适应以及拓展的难易程度。
首先是:能复用,能维护。
在是复用和维护的简单程度。

设计模式至少满足面向对象设计原则中的一部分,即一个或者多个:
1.面向对象设计的目标之一是支持可维护性复用。
2.面向对象设计原则:是用于评价一个设计模式的使用效果的重要指标之一。

这二十三种设计模式有七大原则(oop七大原则)
分别是:
一.单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中
1.一个类(大到模块,小到方法)承担的职责越多,它被复用的可能性就越小(简单点来说就是一个方法干好一件事儿)
2.当一个职责变化时,可能会影响其他职责的运作
3.将这些职责进行分离,将不同的职责封装在不同的类中
4.将不同的变化原因封装在不同的类中
5.单一职责原则是实现高内聚、低耦合的指导方针
二.开闭原则:软件实体应当对扩展开放,对修改关闭
1.在开闭原则的定义中,软件实体可以是一个软件模块、一个由多个类组成的局部结构或一个独立的类
2.开闭原则是指软件实体应尽量在不修改原有代码的情况下进行扩展
3.抽象化是开闭原则的关键
4.相对稳定的抽象层 + 灵活的具体层
5.对可变性封装原则(Principle of Encapsulation of Variation, EVP):找到系统的可变因素并将其封装起来
三.里氏代换原则:所有引用基类的地方必须能透明地使用其子类的对象
1.在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常
2.反过来则不一定成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象
3.在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型
四.依赖倒转原则:高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象(要面向接口编程,而不是面向实现编程)
1.在程序代码中传递参数时或在关联关系中,尽量引用层次高的抽象层类,即使用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等
2.在程序中尽量使用抽象层进行编程,而将具体类写在配置文件中
3.针对抽象层编程,将具体类的对象通过依赖注入(Dependency Injection, DI)的方式注入到其他对象(构造注入,设值注入(Setter注入),接口注入)
五.接口隔离原则:客户端不应该依赖那些它不需要的接口(与单一职责原则类似)
1.当一个接口太大时,需要将它分割成一些更细小的接口
2.使用该接口的客户端仅需知道与之相关的方法即可
3.每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干
六.合成复用原则:优先使用对象组合,而不是继承来达到复用的目的
1.合成复用原则就是在一个新的对象里通过关联关系(包括组合关系和聚合关系)来使用一些已有的对象,使之成为新对象的一部分
2.新对象通过委派调用已有对象的方法达到复用功能的目的
3.复用时要尽量使用组合/聚合关系(关联关系),少用继承
七.迪米特法则:每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位
简单点来说举个例子就是A要做一件事,他需要先交给B,然后B在交给C,迪米塔法则就是有中间流程,有中间商B的存在,因为AC本身联系不到一起,这样系统的结构性就很清晰,减少了数据冗余,降低系统整体耦合度,提高内聚性。
1.迪米特法则要求一个软件实体应当尽可能少地与其他实体发生相互作用
2.应用迪米特法则可降低系统的耦合度,使类与类之间保持松散的耦合关系
3.迪米特法则要求在设计系统时,应该尽量减少对象之间的交互
4.如果两个对象之间不必彼此直接通信,那么这两个对象就不应该发生任何直接的相互作用
5.如果其中一个对象需要调用另一个对象的方法,可以通过“第三者”转发这个调用
6.通过引入一个合理的“第三者”(中间类)来降低现有对象之间的耦合度
这里讲的耦合度的意思是:
处理机之间连接的紧密程度,可用处理机之间的距离及相互连接的信号线数目表示计算机网络与多机系统在耦合程度上有明显差别:多机系统是紧耦合系统,计算机网络属于松耦合系统。
软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准。划分模块的一个准则就是高内聚低耦合。
耦合度(coupling)是对模块间关联程度的度量。耦合的强弱取决与模块间接口的复杂性、调用模块的方式以及通过界面传送数据的多少。
模块间的耦合度是指模块之间的依赖关系,包括控制关系、调用关系、数据传递关系。模块间联系越多,其耦合性越强,同时表明其独立性越差。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值