前言:
我学习设计模式主要根据http://blog.csdn.net/lovelion/article/details/17517213 来学习的 太牛了 。够我玩好几年吧 哈哈哈哈哈!!!设计模式解决的问题是:设计模式用于在特定的条件下为一些重复出现的软件设计问题提供合理的、有效的解决方案。
结合来看吧,从招式与内功谈起——设计模式概述(一) :模式:是在特定环境下人们解决某类重复出现问题的一套成功或有效的解决方案。【A pattern is a successful or efficient solution to a recurring problem within a context】。由"四人组"简称GOF 将模式引入软件工程方面。标志着软件模式的诞生--软件模式并非仅限于设计模式,还包括架构模式、分析模式和过程模式等,实际上,在软件开发生命周期的每一个阶段都存在着一些被认同的模式。
软件模式的基础结构主要由四部分构成,包括问题描述【待解决的问题是什么】、前提条件【在何种环境或约束条件下使用】、解法【如何解决】和效果【有哪些优缺点】
从招式与内功谈起——设计模式概述(二):设计模式可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)三种,其中创建型模式主要用于描述如何创建对象,结构型模式主要用于描述如何实现类或对象的组合,行为型模式主要用于描述类或对象怎样交互以及怎样分配职责 。
23种设计模式中包含5种创建型设计模式、7种结构型设计模式和11种行为型设计模式。设计模式还可以分为类模式和对象模式。
此外,还有个简单工厂模式 没有列入23种设计模式里,但它属于设计模式。
表1 常用设计模式一览表(我要改了哈哈先学几个慢慢来)
类型 |
模式名称 |
学习难度 |
使用频率 |
创建型模式 Creational Pattern |
单例模式 Singleton Pattern |
★☆☆☆☆ |
★★★★☆ |
简单工厂模式 Simple Factory Pattern |
★★☆☆☆ |
★★★☆☆ |
|
工厂方法模式 Factory Method Pattern |
★★☆☆☆ |
★★★★★ |
|
抽象工厂模式 Abstract Factory Pattern |
★★★★☆ |
★★★★★ |
|
原型模式 Prototype Pattern |
★★★☆☆ |
★★★☆☆ |
|
|
|||
结构型模式(都不知道) Structural Pattern |
适配器模式 Adapter Pattern |
★★☆☆☆ |
★★★★☆ |
桥接模式 Bridge Pattern |
★★★☆☆ |
★★★☆☆ |
|
组合模式 Composite Pattern |
★★★☆☆ |
★★★★☆ |
|
装饰模式 Decorator Pattern |
★★★☆☆ |
★★★☆☆ |
|
外观模式 Façade Pattern |
★☆☆☆☆ |
★★★★★ |
|
享元模式 Flyweight Pattern |
★★★★☆ |
★☆☆☆☆ |
|
代理模式 Proxy Pattern |
★★★☆☆ |
★★★★☆ |
|
行为型模式 Behavioral Pattern |
职责链模式 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种面向对象设计原则(我还不太理解哈哈先了解下 我有添加链接以后看)
面向对象设计原则之单一职责原则:定义:一个类只实现一个功能领域的相关职责,拿作者的例子来讲,原本一个类要实现 数据库链接、数据则删改查、和图表生成等。现在分为三个类实现。单独实现这些功能,以达到高内聚,低耦合的目的。
面向对象设计原则之开闭原则:定义:一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。抽象化是实现开闭原则的重因素。看这个需要理解抽象类和接口的区别(抽象方法是必须实现的方法,在实际应用中他们还是有一定的差别,
抽象类一般作为公共的父类为子类的的扩展做基础。这里扩展包括属性上或行为上)
接口是一般不考虑属性,只考虑方法子类可以自由的填补或扩展接口的方法。偏重于行为。许多情况下接口是可以代替抽象类的 (如果你不需要刻意表达属性上的继承的话)
接口是公开的里面不能有私有的方法或变量,是用于让别人使用的,而抽象类是可以有私有方法或私有变量的
接口可以实现多重继承,而一个类只能继承一个父类。。。。。。就说到这吧,要跑题了。。。。具体详解
面向对象设计原则之里氏代换原则:定义:所有引用基类(父类)的地方必须能透明地使用其子类的对象。我看例子明白 感觉和开闭原则很相似,在程序中尽量使用基类类型来对对象进行定义,而在运行时再确定其子类类型,用子类对象来替换父类对象(不太明白)。
面向对象设计原则之依赖倒转原则: 定义:抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。就是变量、参数、方法返回、数据类型转换等都要用抽象定义声明,再通过依赖注入(构造注入、设值注入和接口注入)的方式将具体对象注入到有依赖关系的对象中。我其实不太明白 。。。但有了基本了解。就是不具体定义 声明 等、抽象化实现。下篇见。