设计模式
贫穷的微笑
宏观经济环境是影响个人命运的最大变量
展开
-
设计模式(1)-面向对象的设计原则
设计模式要解决什么问题?--------> 设计模式要解决的问题核心为软件的:**可维护性、可复用性**。 - 在原有的模块上,很难加入新功能,因为加入新功能会影响到其他很多模块。 - 很难修改,因为修改也会影响到其他很多模块。 - 重复代码很多,复用率低,无法维护。 - 粘合度过高,导致类依赖的是实现本身而不是接口,无法替换原有设计。PS:影响到替他模块时就将对软件原有代码进行修改,此时可能会给原创 2016-07-12 09:08:22 · 317 阅读 · 0 评论 -
设计模式(4)-行为型-命令模式(Command)
> 意图:将一个请求封装为一个对象(即我们创建的Command命令对象),从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持可撤销的操作。个人理解:命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。命令模式通过命令执行者、具体命令、命令请求者来达到请求与实现解耦。可以更方便的对命令进行扩展。也可以对多个命令进行统一控制。> 适用性:在软件系统中,行为请求者原创 2016-08-24 21:22:20 · 319 阅读 · 0 评论 -
设计模式(4)-行为型-策略模式(Strategy)
> 意图:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。> 适用性: 1. 多个类只区别在表现行为不同,可以使用策略模式,在运行时动态选择具体要执行的行为. 2. 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现. 3. 对客户隐藏具体策略(算法)的实现细节,彼此完全独立.简单代码,便于理解:```//抽原创 2016-07-15 00:53:44 · 381 阅读 · 0 评论 -
设计模式(4)-行为型-责任链模式(Chain of Responsibility)
> 意图: - 使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。 - 将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。> 个人理解: - 当一个方法里面有很多个大if...else if...else判断时,就可以使用责任链模式了。> 适用性: - 有多个的对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定。 - 你想在不明确指定接收者的情原创 2016-08-02 03:57:34 · 378 阅读 · 0 评论 -
设计模式(4)-行为型-观察者模式(Observer)
> 意图: - 有时也被称作发布/订阅模式。 - 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。> 个人理解: - 首先,他们之间的关系为一个"一对多"的关系,并且代码上实现这个关系。 - 其次,在"一对多"的关系的基础上,“一”的改变能够影响到“多”的改变,并且代码上也实现这个关系。> 适用性:- 当一个抽象模型有两个方面, 其中一个原创 2016-08-01 02:49:41 · 348 阅读 · 0 评论 -
设计模式(4)-行为型-模版模式(Template Method)
> 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。TemplateMethod 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。> 个人理解: 1. 模版模式与桥接模式的不同在于使用目的:桥接模式是解决类的多维度变化的。模版模式是分离行为的可变和不变部分去满足顶级逻辑的不同执行。 2. **子类可以置换掉父类的可变部分,但是子类却不可以改变模板方法所代表的顶级逻辑。顶级逻辑原创 2016-07-15 02:10:27 · 394 阅读 · 0 评论 -
设计模式(1)-创建模式、结构模式、行为模式的区别
创建模式创建型模式,就是创建对象的模式,抽象了实例化的过程。 它帮助一个系统独立于如何创建、组合和表示它的那些对象。 关注的是对象的创建,创建型模式将创建对象的过程进行了抽象,也可以理解为将创建对象的过程进行了封装,作为客户程序仅仅需要去使用对象,而不再关心创建对象过程中的逻辑 结构模式结构型模式是为解决怎样组装现有的类,设计他们的交互方式,从而达到实现一定的功能的目的。 结构型模式包原创 2016-07-15 00:14:40 · 5094 阅读 · 2 评论 -
设计模式(2)-创建型-原型模式(Prototype)
意图:用原型实例指定创建对象的种类,当需要重复地创建相似对象时,通过拷贝这些原型创建新的对象。 个人理解:原型模式主要用于对象的复制,它的核心是就是原型类Prototype:实现Cloneable接口。在java语言有一个Cloneable接口,它的作用只有一个,就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用clone方法。在java虚拟机中,只有实现了这个接口的类才可以被拷贝,原创 2016-07-13 05:14:35 · 346 阅读 · 0 评论 -
设计模式(2)-创建型-单例模式(Singleton)
意图:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 个人理解:单例类只能有一个实例。单例类必须自己创建自己的唯一实例。单例类必须给所有其他对象提供这一实例。单例模式最常使用的场景是对系统资源的控制。 适用性:当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。 单例模式的3原创 2016-07-13 05:05:53 · 253 阅读 · 0 评论 -
设计模式(2)-创建型-建造者模式(Builder)
> 意图:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。> 个人理解 1. 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量。在本类图中,产品类是一个具体的类,而非抽象类。实际编程中,产品类可以是由一个抽象类与它的不同实现组成,也可以是由多个抽象类与他们的实现组成。 2. 抽象建造者:引入抽象建造者的目的,是为了将建造的具体过程交与它的原创 2016-07-13 04:40:31 · 278 阅读 · 0 评论 -
设计模式(2)-创建型-简单工厂,工厂,抽象工厂模式(Factory)
简单工厂模式(不属于设计模式) 意图:由一个工厂类根据传入的参量决定创建出哪一种产品类的实例 个人理解:包含了必要的逻辑判断,根据给定信息或参量,决定究竟应该创建哪个类的对象。违反了设计模式原则 适用性:当一个类不会有太多变化的时候。 简单代码,便于理解:工厂模式 意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到原创 2016-07-13 03:39:34 · 270 阅读 · 0 评论 -
设计模式(3)-结构型-代理模式(proxy)以及java动态代理的两种方式
代理与动态代理这里只阐述自己对代理与动态代理使用场景的理解,其他的信息自行百度。代理的使用场景?例子:事务 在项目中,我的service只想处理与业务相关的逻辑。我并不想在service中显示的嵌入代码去处理事务方面的问题,这样事务就和业务耦合在一起了。但是事务的处理是必不可少的,这个时候就可以使用代理模式,将事务的处理放在代理中,代理处理事务的问题,service处理业务的问题。当程序调用代理的时候,既原创 2016-07-05 08:24:05 · 339 阅读 · 0 评论 -
设计模式(3)-结构型-适配器模式(Adapter)
意图:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。个人理解:实际上就是接口(客户端期待的接口)的实现类(适配器)中注入其他类(需要适配的类),这样便可以使用其他类方法去替换实现类方法或者在实现类方法的基础上加上其他类方法。相当于实现类方法就只是一个壳,这样就改变了实现类方法的操作,来达到适配的目的。使用场景:你想使用一个已经存原创 2016-07-06 15:59:58 · 392 阅读 · 0 评论 -
设计模式(3)-结构型-桥接模式(Bridge)
意图:将抽象部分与它的实现部分分离,使它们都可以独立地变化。个人理解:桥接模式是用来应对类的多维度变化的。主要理解使用场景。使用场景:你不希望在抽象和它的实现部分之间有一个固定的绑定关系。例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。 理原创 2016-07-08 16:30:05 · 305 阅读 · 0 评论 -
设计模式(3)-结构型-组合模式(Composite)
意图: 将对象组合成树形结构以表示“部分-整体”的层次结构。C o m p o s i t e 使得用户对单个对象和组合对象的使用具有一致性。 个人理解:适用性: - 你想表示对象的部分-整体层次结构。 - 你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象。简单代码,便于理解://店面类,抽象出来的店面部件,不管是枝干部分还是节点部分,都要原创 2016-07-09 01:41:46 · 299 阅读 · 0 评论 -
设计模式(3)-结构型-装饰模式(Decorator)
意图:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator 模式相比生成子类更为灵活。 个人理解:结合代码注释理解。 适用性:在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。处理那些可以撤消的职责。当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类原创 2016-07-09 03:55:51 · 289 阅读 · 0 评论 -
设计模式(3)-结构型-外观模式(Facade)
意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 个人理解:外观模式就很好理解了。他就是一个放了很多接口的类,而且这些接口已经被其他类实现过了,把这些我需要的接口放在一起,让这个接口更加容易使用。否则每次都将引用大量的接口实现。 适用性:当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模原创 2016-07-09 04:30:26 · 322 阅读 · 0 评论 -
设计模式(3)-结构型-享元模式(Flyweight)
意图:运用共享技术有效地支持大量细粒度的对象。 个人理解:享元模式主要作用是实现对象的共享,即使用共享池,从而减少内存分配的开销。 实现享元的核心是工厂方法,在工厂方法中使用集合(通常是HashTable)来存取已经存在的对象。 可以参考各种连接池的设计,或者spring容器。 适用性:一个应用程序使用了大量的对象。完全由于使用大量的对象,造成很大的存储开销。对象的大多数状态都可原创 2016-07-09 05:28:50 · 367 阅读 · 0 评论 -
设计模式(4)-行为型-备忘录模式(Memento)
> 意图:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。相当于撤销。> 适用性:必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。> 简单代码,便于理解:```/*** 发起人角色类,发起人角色利用一个原创 2016-08-24 21:55:47 · 321 阅读 · 0 评论