设计模式系列(一) ——设计模式入门

设计模式入门 一、为什么要学习设计模式 二、 设计模式分类 三、 设计模式中的设计原则 一、为什么要学习设计模式为什么要学习设计模式,不使用设计模式会怎样,对于初级程序猿来说更容易忽略设计模式的重要性,认为我已经可以熟练使用封装、多态、继承,日常的开发任务已经是小菜一碟,为何要浪费时间去学习设计模式,我的项目没使用设计模式,也没出什么大问题. 但是经过长期的项目开发,版本迭代,可以思考一下你用在项目维护与开发上的时间比例,下面的图可以很形象的说明,不使用设计模式所带来的后果.既然设计模式这么重要,那
摘要由CSDN通过智能技术生成

一、为什么要学习设计模式

为什么要学习设计模式,不使用设计模式会怎样,对于初级程序猿来说更容易忽略设计模式的重要性,认为我已经可以熟练使用封装、多态、继承,日常的开发任务已经是小菜一碟,为何要浪费时间去学习设计模式,我的项目没使用设计模式,也没出什么大问题. 但是经过长期的项目开发,版本迭代,可以思考一下你用在项目维护与开发上的时间比例,下面的图可以很形象的说明,不使用设计模式所带来的后果.

在这里插入图片描述

既然设计模式这么重要,那它到底有哪些好处呢,简单罗列以下几点:

1. 设计模式已经成为软件开发人员的 "共享词汇"

    当你使用模式和其他开发人员或开发团队沟通时,你们之间的交流不只是模式名称,而是一整套模式背后所象征的框架,质量,特性,约束. 模式能够让你用更少的词汇做更充分的沟通,当你用模式描述的时候,其他开发人员能够很容易的知道你对项目设计的想法。

2. 设计模式是开发人员技术能力提高的捷径

设计模式是很多前辈在软件开发过程中遇到问题时不断摸索并经过实践检验的针对特定场景特定问题的优秀的解决方案,很多问题都是典型的、有代表性的问题。如果把软件系统比作人,那设计模式就是人体的骨骼,是软件系统的灵魂所在.

学习设计模式,可以学习到众多前辈的经验,在实践中体会他们的设计思想,掌握他们解决问题的方法,可以让我们个人的技术能力得到快速的提升。使用设计模式开发软件系统,让你不会把时间耗在对象、类、功能逻辑这种琐碎的细节实现上,而把时间用在更有意义更有成就感的事情上。

3.设计模式可以让你的程序更灵活,更健壮,可扩展性更好,更易于维护

通过文字描述可能感受不到设计模式的魅力,《大话设计模式》中举了一个特别生动又浅显易懂的栗子,我用自己的理解参考使用下,大家可以感受下:

据说曹操率兵攻打东吴,号称百万大军,而东吴据说只有几万兵马。曹军驻扎赤壁,浩浩荡荡,一望无际。曹操觉得统一天下应该是没问题了,那就先庆祝一下吧,所以就搞了个大Party。吃饱喝够之后呢,曹操突然觉得要显示一下自己的逼格,就出口成诗,吟道:“喝酒唱歌,人生真爽。······”。下面的文臣武将纷纷表示“好诗啊好诗”。这时候一个精于奉承的臣子就赶紧召集工匠刻板印刷,让主公诗名远扬,到时候自己好处肯定是少不了。

在这里插入图片描述

赶紧先印出来几张样板呈给曹操过目,曹操想了想,觉得不对,说:“喝和唱,觉得用在这里怎么有点俗气,改为‘对酒当歌’比较好。改!”。于是,工匠就很郁闷地去返工,重新刻板了。
  在这里插入图片描述

 改过之后,曹操又想了想,觉得还不够好,觉得“人生真爽”太过直白,应该改一改,说道:“当为‘人生几何’为妙。再改!”。工匠一听,只好再次加班。  
在这里插入图片描述

 在三国时期,活字印刷还没有发明出来,所以即使是只改一个字,也必须换个新的刻板重新刻。所以说,曹操这样的行为就有点像甲方客户或者公司的产品频繁的需求变更一样,如果我们的软件开发还像雕版印刷那样,我们的时间就会不断浪费在单调重复的逻辑更改上。看到活字印刷,只要更改四个字就可以了,而且不用全部重新推倒重来。

在这里插入图片描述
  为什么说活字印刷术体现了设计模式带来的巨大好处呢
 
 第一: 要进行改动的话,只需要变动要改的字,这既体现了封装又体现了可维护
 
 第二: 这些字并不是用完这次就没用了,完全可以在后来的印刷中重复使用,这是可复用
 
 第三,如果这首诗要加字,主要另外刻字就可以了,这是可扩展
 
 第四,字的排列其实可能是竖排可能是横排,只需要将活字移动就可以满足不同的排列需求,这是灵活性好

二、 设计模式分类

有23种设计模式,分为三类:

创建型模式:抽象了对象实例化过程,用来帮助创建对象的实例。主要包含以下5种设计模式:

工厂方法模式(Factory Method Pattern)
抽象工厂模式(Abstract Factory Pattern)
建造者模式(Builder Pattern)
原型模式(Prototype Pattern)
单例模式(Singleton Pattern)

结构型模式:描述如何组合类和对象以获得更大的结构。主要包含以下7种设计模式:

适配器模式(Adapter Pattern)
桥接模式(Bridge Pattern)
组合模式(Composite Pattern)
装饰者模式(Decorator Pattern)
外观模式(Facade Pattern)
享元模式(Flyweight Pattern)
代理模式(Proxy Pattern)

行为型模式:描述算法和对象间职责的分配。主要包含以下11种设计模式:
责任链模式(Chain of Responsibility Pattern)
命令模式(Command Pattern)
解释器模式(Interpreter Pattern)
迭代器模式(Iterator Pattern)
中介者模式(Mediator Pattern)
备忘录模式(Memento Pattern)
观察者模式(Observer Pattern)
状态模式(State Pattern)
策略模式(Strategy Pattern)
模板方法模式(Template Method Pattern)
访问者模式(Visitor Pattern)

三、 设计模式中的设计原则

为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序猿要尽量根据 以下7 条原则来开发你的程序,从而提高软件开发效率、缩短软件开发周期, 节约软件开发和维护成本。

1.开闭原则:软件实体应当对扩展开放,对修改关闭

实现方法:通过“抽象约束、封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一个相对稳定的抽象层,而将相同的可变因素封装在具体实现类中。后面在讲到具体某个设计模式–策略模式时会举例.

2. 里氏替换原则:继承必须确保超类所拥有的性质在子类中仍然成立(也就是说:子类继承父类时,除添加新的方法完成新增功能外,尽量不要重写父类的方法,抽象类除外)

3. 依赖倒置原则:高层模块不应该依赖低层模块,两者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象(要面向接口编程,不要面向实现编程,降低类耦合)

实现方法:面向接口编程

4. 单一职责原则:一个类应该有且仅有一个引起它变化的原因,否则类应该被拆分(控制类的粒度大小、将对象解耦、提高其内聚性)

实现方法:发现类的不同职责并将其分离,再封装到不同的类或模块中。

5. 接口隔离原则:要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

6. 迪米特法则:只与你的直接朋友交谈,不跟“陌生人”说话(如果两个软件实体无须直接通信,那么就不应当发生直接的相互调用,可以通过第三方转发该调用。其目的是降低类之间的耦合度,提高模块的相对独立性)

实现方法:从依赖者的角度来说,只依赖应该依赖的对象。从被依赖者的角度说,只暴露应该暴露的方法。

7. 合成复用原则:在软件复用时,要尽量先使用组合或者聚合等关联关系来实现,其次才考虑使用继承关系来实现。(如果要使用继承关系,则必须严格遵循里氏替换原则。)

实现方法:通过将已有的对象纳入新对象中,作为新对象的成员对象来实现的,新对象可以调用已有对象的功能,从而达到复用。

读到这里,很多童鞋可能觉得设计模式过于抽象与晦涩,是否有速成的捷径,但任何技能的掌握都不是一蹴而就的,后续的更新我会尽量用一些浅显易懂的样例来介绍每种设计模式.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值