浅谈设计模式
转载请注明出处:https://www.cnblogs.com/wenjunwei/p/9770693.html
设计模式简介
设计模式(design pattern)代表了最佳实践,通常被有经验的软件开发人员所采用。设计模式是软件开发人员在开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长时间的实验和总结出来的。
设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了代码重用、让代码更容易被他人理解、保证代码可靠性。
设计模式的出现可以让我们站在前人的肩膀上,通过一些成熟的设计方案来指导新项目的开发和设计,以便于我们开发出具有更好的灵活性和可扩展性,也更易于复用的软件系统。设计模式有助于对框架结构的理解,成熟的框架通常使用了多种设计模式,如果你熟悉这些设计模式,毫无疑问,你将迅速掌握框架的结构,我们一般开发者如果突然接触ejb、spring等框架,会觉得特别难学、难掌握,那么转而先掌握设计模式,无疑是给了你剖析ejb或j2ee系统的一把利器。学习这些模式有助于经验不足的开发人员通过一种简单快捷的方式来学习软件设计。
设计模式的六大原则
1.开闭原则(open close principle)
开闭原则的意思是:对扩展开放,对修改关闭。在程序需要扩展的时候,尽量在不修改原有的代码的情况下进行扩展,实现热插拔的效果。这样做是为了使程序的扩展性好,易于维护和升级。
任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。当软件系统需要面对新的需求时,我们应该尽量保证系统的设计框架是稳定的。如果一个软件设计符合开闭原则,那么可以非常方便地对系统进行扩展,而且在扩展时无须修改现有代码,使得软件系统在拥有适应性和灵活性的同时具备较好的稳定性和延续性。随着软件规模越来越大,软件寿命越来越长,软件维护成本越来越高,设计满足开闭原则的软件系统也变得越来越重要。
2.里氏代换原则(liskov substitution principle)
里氏代换原则是面向对象设计的基本原则之一。 里氏代换原则中说,任何基类(父类)可以出现的地方,子类一定可以出现。里氏代换原则是对开闭原则的补充。实现开闭原则的关键步骤就是抽象化,而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。
在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。 例如:我喜欢动物,那我一定喜欢猫,因为猫是动物的子类;但是我喜欢猫,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。
3.依赖倒转原则(dependence inversion principle)
依赖倒转原则:这个原则是开闭原则的基础。抽象不应该依赖于细节,细节应当依赖于抽象。换言之,针对接口编程,依赖于抽象而不依赖于具体。依赖倒转原则要求我们在程序代码中传递参数时或在关联关系中,尽量引用接口和抽象类进行变量类型声明、参数类型声明、方法返回类型声明,以及数据类型的转换等,而不要用具体类来做这些事情。
4.接口隔离原则(interface segregation principle)
使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。每一个接口应该承担一种相对独立的角色,不干不该干的事,该干的事都要干。
在使用接口隔离原则时,我们需要注意控制接口的粒度,接口不能太小,如果太小会导致系统中接口泛滥,不利于维护;接口也不能太大,太大的接口将违背接口隔离原则,灵活性较差,使用起来很不方便。
5.迪米特法则,又称最少知道原则(demeter principle)
最少知道原则是指:一个实体应当尽量少地与其他实体之间发生相互作用,使得系统功能模块相对独立。不要和陌生人说话,只与你的直接朋友通信,即一个对象应对其他对象有尽可能少的了解。简言之,就是通过引入一个合理的第三者来降低现有对象之间的耦合度。
6.合成复用原则(composite reuse principle)
合成复用原则是指:尽量使用合成/聚合的方式,少用继承。
例如:有几个类要与数据库打交道,就写了一个数据库操作的类,然后别的跟数据库打交道的类都继承这个。结果后来,修改了数据库操作类的一个方法,各个类都需要改动。
设计模式分类
设计模式分为三大类:
1.创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
包括5个:
工厂模式(factory pattern) 抽象工厂模式(abstract factory pattern) 单例模式(singleton pattern) 建造者模式(builder pattern) 原型模式(prototype pattern)
结构型模式
这些设计模式关注类和对象的组合。继承的概念被用来组合接口和定义组合对象获得新功能的方式。
包括7个:
适配器模式(adapter pattern) 桥接模式(bridge pattern) 组合模式(composite pattern) 装饰器模式(decorator pattern) 外观模式(facade pattern) 享元模式(flyweight pattern) 代理模式(proxy pattern)
行为型模式
这些设计模式特别关注对象之间的通信。
包括11个:
责任链模式(chain of responsibility pattern) 命令模式(command pattern) 解释器模式(interpreter pattern) 迭代器模式(iterator pattern) 中介者模式(mediator pattern) 备忘录模式(memento pattern) 观察者模式(observer pattern) 状态模式(state pattern) 策略模式(strategy pattern) 模板方法模式(template pattern) 访问者模式(visitor pattern)
感谢您的阅读,如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮。本文欢迎各位转载,但是转载文章之后必须在文章开头给出原文链接。
上一篇: 自定义checkbox样式