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)

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

      

  • 相关阅读:
    Anagram
    HDU 1205 吃糖果(鸽巢原理)
    Codeforces 1243D 0-1 MST(补图的连通图数量)
    Codeforces 1243C Tile Painting(素数)
    Codeforces 1243B2 Character Swap (Hard Version)
    Codeforces 1243B1 Character Swap (Easy Version)
    Codeforces 1243A Maximum Square
    Codeforces 1272E Nearest Opposite Parity(BFS)
    Codeforces 1272D Remove One Element
    Codeforces 1272C Yet Another Broken Keyboard
  • 原文地址:https://www.cnblogs.com/springword/p/8229061.html
Copyright © 2011-2022 走看看