一.设计模式—开篇
Posted zaijianba
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一.设计模式—开篇相关的知识,希望对你有一定的参考价值。
设计模式之:开篇
字数:1492字
阅读时间:4分钟
1.概览
设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。
? 1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」
? 这 23 种设计模式的本质是面向对象设计原则的实际运用,是对类的封装性、继承性和多态性,以及类的关联关系和组合关系的充分理解。
? 当然,软件设计模式只是一个引导,在实际的软件开发中,必须根据具体的需求来选择:
对于简单的程序,可能写一个简单的算法要比引入某种设计模式更加容易;但是对于大型项目开发或者框架设计,用设计模式来组织代码显然更好。
2.设计模式分类
设计模式共分为三大类:
? 创建型模式(Creational Pattern)的主要特点是将对象的创建与使用分离,根据对象的创建与组合方式的不同,创建型模式可分为单例(Singleton)模式、原型(Prototype)模式、工厂方法(Factory Method)模式、抽象工厂(Abstract Factory)模式和建造者(Builder)模式 5 种。
? 结构型模式(Structural Pattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木, 可以通过简单积木的组合形成复杂的、功能更为强大的结构。结构型模式可以分为类结构型模式和对象结构型模式,也可分为代理模式(Proxy)、适配器模式(Adapter)、桥接模式(Bridge)、装饰模式 (Decorator )、外观模式(Facade)、享元模式(Flyweight)和组合模式(Composite)等 7 类。
? 行为型模式(Behavioral Pattern)是对在不同的对象之间划分责任和算法的抽象化,它是 GoF 设计模式中最为庞大的一类模式,包含以下 11 种:模板方法(Template Method)模式、策略(Strategy)模式、命令(Command)模式、职责链(Chain of Responsibility)模式、状态(State)模式、观察者(Observer)模式、中介者(Mediator)模式、迭代器(Iterator)模式、访问者(Visitor)模式、备忘录(Memento)模式、解释器(Interpreter)模式。
?
? 具体分类如下图所示:??
3.六大原则
六大原则:
开闭原则(Open Closed Principle,OCP)软件实体应当对扩展开放,对修改关闭。(总原则)
里氏替换原则(Liskov Substitution Principle,LSP)继承必须确保超类所拥有的性质在子类中仍然成立。
依赖倒置原则(Dependence Inversion Principle,DIP)依赖倒置原则的原始定义为:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。其核心思想是:要面向接口编程,不要面向实现编程。
单一职责原则(Single Responsibility Principle,SRP)又称单一功能原则,单一职责原则规定一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分。
接口隔离原则(Interface Segregation Principle,ISP)客户端不应该被迫依赖于它不使用的方法,一个类对另一个类的依赖应该建立在最小的接口上。
迪米特法则(Law of Demeter,LoD)又叫作最少知识原则,如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性。
合成复用原则(Composite Reuse Principle,CRP)又叫组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP)它要求在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。
? 七大原则如下图所示??:
六大原则最后都是为了实现开闭原则。
4.总结
? 这是设计模式系列的开篇,也是对自己学习设计模式的做一个记录与总结,学习是一个不断巩固总结的过程,刚看完《大话设计模式》这本书,书中的知识似懂非懂,技术都是从看到写然后再到实际运用,希望借助写博客能更进一步掌握书中的知识。
? 因为博主不是科班毕业,大四才接触编程,基础薄弱,现在刚毕业两个月,从事的是软件开发行业,刚接触编程就被编程的魅力所吸引,互联网光鲜亮丽的背后都是由一串串代码构成,现在想想还是觉得很神奇,希望自己能在这条路上越走越远~
? 博客中如有不对的地方,请不吝指出!
以上是关于一.设计模式—开篇的主要内容,如果未能解决你的问题,请参考以下文章