设计模式总览

    面向过程通过划分功能模块和函数相互间的调用来实现一条条的业务流程,但需求变化时,就需要更改函数,被改动的函数有多少地方在调用它,关联多少数据是很不容易弄得清楚的,函数的修改极有可能引起不必要的BUG出现,维护和调试中所耗费的大多数时间不是在修改bug,而是在寻找bug……抱怨需求总是变化是没用的,改变开发过程才是王道,面向对象编程方式的诞生,就是为解决变化带来的问题。

    面向对象封装可能会发生变化的区域,从而更容易的将代码与变化产生的影响隔离开来,显然,对象比流程更稳定,也更加封闭,由于面向对象设计的复杂性,所以我们都希望能做出应对变化、提高复用的设计方案,而设计模式就能帮助我们做到这样的结果。通过复用已经公认的设计,我们能够在解决问题时避免前人所犯的种种错误,从他人的经验中获益。

    说到底,面向对象设计模式体现的就是抽象的思想,类、抽象类、接口等等,都是在不同层次、不同角度进行抽象的结果,但程序开发只有抽象是不够的,还需要封装、继承、多态,才能让软件血肉丰满,惟妙惟肖。

    在程序里加入设计模式,就好似炒菜时放的味精、蒜、葱花,使炒出来的菜色香味俱全,也就是说,设计模式的融入让程序更易维护、易扩展、易复用。

    先来浏一眼都有哪些模式,







    根据模式的特点,分为三个类型,创建型、结构型、行为型。


    创建型模式有两部分主要思想:

        1.对系统所要使用的具体类的封装

        2.隐藏这些具体类的创建和组合过程

    

    创建型模式强调在具体情况下对象实例的创建机制,通过恰当的对象创建机制,可以减少设计的麻烦和程序的复杂性。


    结构型模式关心实体(类或对象)之间如何组织起来,以形成更大的结构,主要使用继承来组织接口或者实现。


    行为型模式关心的是算法以及对象之间的任务分配,行为设计模式识别出对象之间的共同的通信模式,并实现这种模式,这样就可以提高这类通信的灵活性。


    设计模式在粒度和抽象层次上各不相同,这里,我们根据两条准则对模式进行分类:

    1.目的准则,即模式用来完成什么工作

    创建型模式与对象的创建有关

    结构型模式处理类或对象的组合

    行为型模式对类或对象怎样交互和怎样分配职责进行描述

    2.范围准则,指定对象主要是用于类还是用于对象

    类模式处理类和子类之间的关系,这些关系通过继承建立,是静态的,在编译时便确定下来了;

    对象模式处理对象间的关系,这些关系在运行时是可以变化的,更具动态性

   从某种意义上来说,几乎所有的模式都使用继承机制,所以“类模式”只指那些集中于处理类间关系的模式,而大部分模式都属于对象模式的范畴。


    创建型类模式将对象的部分创建工作延迟到子类,而创建型对象模式则将它延迟到另一个对象中。

    结构型类模式使用继承机制来组合类,而结构型对象模式则描述了对象的组装方式。

    行为型类模式使用继承描述算法和控制流,而行为型对象模式则描述一组对象怎样协作完成单个对象单个对象所无法完成的任务。


    六大原则是衡量设计模式优劣的标准,一个模式可能涉及多个原则,这六个原则是:



    


    开闭原则:软件实体(类、模块、函数等)应该对扩展开放,对修改关闭

    里氏代换原则:子类型必须能够替换掉它们的父类型,也就是说,任何能使用父类的地方一定能使用子类

    依赖倒转原则:A:高层模块不应该依赖底层模块,两个都应该依赖抽象B.抽象不应该依赖细节,细节应该依赖抽象。

    合成/聚合复用原则:尽量使用合成/聚合,而不是类继承

    迪米特法则:如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。

    单一职责原则:就一个类而言,应该仅有一个引起它变化的原因。


    六大原则告诉我们要用抽象构建框架,用实现扩展细节,回想一下,单一职责告诉我们实现类要职责单一,里氏代换原则告诉我们不要破坏继承体系,依赖倒转原则告诉我们要面向接口编程,合成/聚合复用原则告诉我们要尽量少使用类继承,迪米特法则告诉我们要降低耦合,而开闭原则是总纲,告诉我们要对扩展开放,对修改关闭。


    设计模式的工作就是解耦,提高代码质量,使得程序高内聚、低耦合,轻松应对变化,从而让编程者可以写出更优秀的软件。


评论 38
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值