设计模式
阿宇万岁
学无止境
展开
-
各个设计模式的优缺点
设计原则1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。2、针对接口编程(实际上是针对超类编程),而不是针对实现编程。策略模式(Strategy Pattern)优点:缺点:1.客户端必须知道所有的策略类,并自行决定使用哪一个策略类。 2.造成很多的策略类。详细请参考:http://www.cnblogs.com/mengd原创 2015-11-02 14:04:47 · 9450 阅读 · 0 评论 -
状态模式(State Pattern)
状态模式(State Pattern)是设计模式的一种,属于行为模式。定义(源于Design Pattern):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 状态模式主要解决的是当控制一个对象状态的条件表达式过于复杂时的情况。把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化。 意图:允许一个对象在其内部状态改变时改变它的行为原创 2015-11-18 11:58:18 · 319 阅读 · 0 评论 -
设计模式中类的关系
在java以及其他的面向对象设计模式中,类与类之间主要有6种关系,他们分别是:依赖、关联、聚合、组合、继承、实现。他们的耦合度依次增强。1. 依赖(Dependence) 依赖关系的定义为:对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。定义比较晦涩难懂,但在java中的表现还是比较直转载 2015-11-18 12:03:43 · 232 阅读 · 0 评论 -
设计模式六大原则
1. 单一职责原则(Single Responsibility Principle)详情请参考:http://blog.csdn.net/zhengzhb/article/details/72781742. 里氏替换原则(Liskov Substitution Principle)里氏替换原则的内容可以描述为: “派生类(子类)对象能够替换其基类(超类)对象被使用。”原创 2015-11-18 14:03:31 · 321 阅读 · 0 评论 -
迭代器模式(游标(Cursor)模式)
定义提供一种方法访问一个容器对象中各个元素,而又不暴露该对象的内部细节。迭代器模式(Iterator Pattern)依赖于一个名为迭代器的接口。一旦有了这个接口,就可以为各种对象集合实现迭代器:数组、列表、散列表……设计原则:一个类应该只有一个引起变化的原因。优点简化了遍历方式,对于对象集合的遍历,还是比较麻烦的,对于数组或者有序列表,我们尚可以通过游原创 2015-11-17 15:17:18 · 1949 阅读 · 0 评论 -
模板方法模式 Template Method
概念:定义一个算法的骨架,而将一些实现步骤延迟到子类中。 把不变的行为搬到超类,去除子类中重复的代码来体现他的优势。模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。优点:1)模板方法原创 2015-11-17 14:27:48 · 403 阅读 · 0 评论 -
外观模式(Facade Pattern)或门面模式
Facade模式概述 实际应用中,我们在对付一些老旧的code(尤其是将C的代码转成C++代码)或者即便不是老旧code,但涉及多个子系统时,除了重写全部代码(对于老旧code而言),我们还可能采用这样一种策略:重新进行类的设计,将原来分散在源码中的类/结构及方法重新组合,形成新的、统一的接口,供上层应用使用。 这在某种意义上与Adapter及Proxy有类似之处,原创 2015-11-16 10:02:19 · 284 阅读 · 0 评论 -
观察者模式
设计原则1、为了交互对象之间的松耦合设计而努力。优点:1、当两个对象之间送耦合,他们依然可以交互,但是不太清楚彼此的细节。观察者模式提供了一种对象设计,让主题和观察者之间送耦合。主题所知道只是一个具体的观察者列表,每一个具体观察者都符合一个抽象观察者的接口。主题并不认识任何一个具体的观察者,它只知道他们都有一个共同的接口。2、观察者模式支持“广播通信”。主题会向所有原创 2015-11-16 09:27:13 · 475 阅读 · 0 评论 -
策略模式(Strategy Pattern)
设计原则1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。2、针对接口编程(实际上是针对超类编程),而不是针对实现编程。3、多用组合,少用继承。优点:1.利用组合、委托和多态等技术和思想,可以有效地避免多重条件选择语句2、提供了对开放—封闭原则的完美支持,将算法封装在独立的strategy中,使得它们易于切换,易于理解,易于扩展原创 2015-11-16 09:09:53 · 245 阅读 · 0 评论 -
命令模式
优点1、命令模式的封装性很好:每个命令都被封装起来,对于客户端来说,需要什么功能就去调用相应的命令,而无需知道命令具体是怎么执行的。比如有一组文件操作的命令:新建文件、复制文件、删除文件。如果把这三个操作都封装成一个命令类,客户端只需要知道有这三个命令类即可,至于命令类中封装好的逻辑,客户端则无需知道。2、命令模式的扩展性很好,在命令模式中,在接收者类中一般会对操作进行最基本的封装原创 2015-11-16 08:47:08 · 277 阅读 · 0 评论 -
抽象工厂模式
优点:1、抽象工厂模式隔离了具体类的生产,使得客户并不需要知道什么被创建。2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中的对象。3、增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。 缺点:增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。原创 2015-11-16 09:29:27 · 270 阅读 · 0 评论 -
工厂方法模式
工厂方法模式,英文Factory method pattern,工厂方法模式是简单工厂模式的进化版,工厂方法模式是定义一个创建产品对象的工厂接口,工厂接口本身不去创建对象,而是交给其子类或者是其实现类去创建,将实际创建工作推迟到子类中进行详情请参考:http://www.cnblogs.com/zhangchenliang/p/3700820.html代码请参考:http://原创 2015-11-16 09:29:01 · 221 阅读 · 0 评论 -
适配器(Adapter)模式
定义将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。优点1、将目标类和适配者类解耦2、增加了类的透明性和复用性,将具体的实现封装在适配者类中,对于客户端类来说是透明的,而且提高了适配者的复用性3、灵活性和扩展性都非常好,符合开闭原则类适配器还有的优点:1、由于适配器类是原创 2015-11-16 09:49:22 · 286 阅读 · 0 评论 -
简单工厂模式
简单工厂模式(Simple Factory Pattern)属于类的创新型模式,又叫静态工厂方法模式(Static FactoryMethod Pattern),是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。优点:工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。用户在使用时可以直接根据工厂类去创原创 2015-11-16 09:28:34 · 283 阅读 · 0 评论 -
装饰器模式(Decorator)
设计原则1、类应该对扩展开发,对修改关闭。特点:1、装饰对象和真实对象有相同的接口。这样客户端对象就可以以和真实对象相同的方式和装饰对象交互。2、装饰对象包含一个真实对象的引用(reference)。3、装饰对象接收所有来自客户端的请求,它把这些请求转发给真实的对象。4、装饰对象可以在转发这些请求之前或之后附加一些功能。这样就确保了在运行时,不用修改给定对象的结构就可以在外原创 2015-11-16 09:27:49 · 272 阅读 · 0 评论 -
单例模式(Singleton Pattern)
定义:单件模式确保一个类只有一个实例,并提供一个全局访问点。单件模式常常被用来管理共享的资源,例如数据库连接或者线程池。主要优点:1、提供了对唯一实例的受控访问。2、由于在系统内存中只存在一个对象,因此可以节约系统资源,对于一些需要频繁创建和销毁的对象单例模式无疑可以提高系统的性能。主要缺点:1、由于单利模式中没有抽象层,因此单例类的扩展有很大的原创 2015-11-16 09:30:11 · 254 阅读 · 0 评论 -
代理模式(Proxy Pattern)
定义为其他对象提供一种代理以控制对这个对象的访问。使用代理模式创建代理对象,让代理对象控制目标对象的访问(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),并且可以在不改变目标对象的情况下添加一些额外的功能。优点:1)代理模式能将代理对象与真正被调用的对象分离,在一定程度上降低了系统的耦合度。2)代理模式在客户端和目标对象之间起到一个原创 2015-11-19 08:55:27 · 438 阅读 · 0 评论