zoukankan      html  css  js  c++  java
  • 设计模式(Design Patterns)

    相识

      这要追溯到大二的时候,刚开始接触设计模式的时候,记得当时不知从谁哪里听说设计模式这个玩意,对我来说这是一个既陌生而又富有神秘感的词汇。

    于是,在某天跑到学校的图书馆找寻相关的书籍,在网上百度了一下,听说《大话设计模式》这本书不错,于是乎便拿过来一看究竟,当时也看的也不知所云,

    毕竟只是看,没有运用到项目中去;开始只感到这本书写的颇有意思,从小菜的成长过程我也渐渐认识到设计模式的魅力所在。

    相知

      大三时候,开了一门专业课程,名字叫做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)"书。

      

      设计模式为什么会出现

      每一种设计模式都说明一个一再出现的问题,并描叙了解决问题的核心。让你能够据以变化,产生出各种各样的招式来解决上万个类似的问题。

      面向对象设计方法强调:以类,对象,继承,组合来作为软件设计分析的方式,故将软件功能拆分为不同的类/组件,之后将这些不同的类与组件

    加以组装,对切来最终完成软件的开发。

      怎样拆分,如何设计

      以经验累积的方式,将一些经常用来解决特定情况的“类设计”,”对象组装”加以整理成为一种设计模式。

      

      设计模式能够完成的

      解决一再出现的问题

      解决问题的方案和问题核心的关键点

      可以重复使用的解决方案

     

    GoF 23种设计模式,主要可以分成三类:

      生成模式(Creational) :产生对象的过程和方式

      结构模式(Structural):类或者对象之间组合方式

      行为模式(Behavioral):类或者对象之间互动或责任分配的方式

    最后,避免过度设计(Over-Engineering)

      无限制地使用设计模式进行软件设计(把握一个度)

      

  • 相关阅读:
    linux进程管理相关命令
    win7 64位系统使用vs2010编译OSG3.2.1
    Linux入门
    Implement strStr()
    Remove Element
    Remove Duplicates from Sorted Array
    Reverse Nodes in k-Group
    node npm vue.js 笔记
    NodeJS、NPM安装配置与测试步骤(windows版本)
    Python HTTP库requests中文页面乱码解决方案!
  • 原文地址:https://www.cnblogs.com/springword/p/8229061.html
Copyright © 2011-2022 走看看