相识
这要追溯到大二的时候,刚开始接触设计模式的时候,记得当时不知从谁哪里听说设计模式这个玩意,对我来说这是一个既陌生而又富有神秘感的词汇。
于是,在某天跑到学校的图书馆找寻相关的书籍,在网上百度了一下,听说《大话设计模式》这本书不错,于是乎便拿过来一看究竟,当时也看的也不知所云,
毕竟只是看,没有运用到项目中去;开始只感到这本书写的颇有意思,从小菜的成长过程我也渐渐认识到设计模式的魅力所在。
相知
大三时候,开了一门专业课程,名字叫做Java设计模式,当时的讲授老师姓马,我们都称他为马老师,人很和蔼。到那时也并未接触到什么实质性的项目,
只是一直在空谈理论知识,大学的课程永远都只是理论多余实践,暂不说这种教学模式孰是孰非,缺乏实践的课堂只能是让人感觉索然无味。不过,因为当时对
设计模式颇感兴趣,所以每每课下,便向老师讯问一些不懂的地方,凭借着这种态度,我也收获了许多课堂之上无法学到的知识,让我一步一步地揭开了设计模式
神秘的面纱。
从此我便开始慢慢了解一些设计模式上的专有词汇,虽然还是又很多疑问,但是相比开始已经成长了许多。让我最苦恼的当属那些类或者对象之间的关系,可以
说在那是是相当让我头大的事情,从依赖到关联,再从聚合到组合这两组是最容易出错的地方。
首先谈谈依赖关系
依赖(Dependency) 关系是类与类之间的联接,一般而言,依赖关系体现为局域变量、方法的形参,或者对静态方法的调用
关联关系
关联(Association)关系是类与类之间的联接,它使一个类知道另一个类的属性和方法。关联可以是单向的,也可以是双向的。
聚合关系
聚合(Aggregation) 关系是关联关系的一种,是弱的关联关系。聚合是整体和个体之间的关系。
组合关系
组合(Composition) 关系是关联关系的一种,是强的关联关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生
命周期,组合关系是不能共享的。
最后说说继承与实现
继承(inherited):子类可继承抽象类或普通类,抽象类使用关键字abstract表示,JAVA和NET中子类只能继承一个基类,C++可以继承多个基类。
实现(implement):子类可以实现多个接口,接口使用关键字interface表示,接口中不允许有普通成员(也就是常量和变量),NET可以有属性、方
法和事件,而JAVA只能有方法和事件,C++没有接口interface这个关键字,但可以用抽象类代替接口,里面都是纯虚函数。
相熟
设计模式(Design Patterns) 是由四人组(GOF :Gang of Four)四位作者提出的。《Design Patterns: Elements
of Reusable Object-Oriented Software》(即后述《设计模式》一书),由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides
合著(Addison-Wesley,1995)。这几位作者常被称为"四人组(Gang of Four)",而这本书也就被称为"四人组(或 GoF)"书。
设计模式为什么会出现
每一种设计模式都说明一个一再出现的问题,并描叙了解决问题的核心。让你能够据以变化,产生出各种各样的招式来解决上万个类似的问题。
面向对象设计方法强调:以类,对象,继承,组合来作为软件设计分析的方式,故将软件功能拆分为不同的类/组件,之后将这些不同的类与组件
加以组装,对切来最终完成软件的开发。
怎样拆分,如何设计
以经验累积的方式,将一些经常用来解决特定情况的“类设计”,”对象组装”加以整理成为一种设计模式。
设计模式能够完成的
解决一再出现的问题
解决问题的方案和问题核心的关键点
可以重复使用的解决方案