设计模式学习之命令模式
什么是命令模式命令模式(Command Design Pattern)将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 将封装带入一个新的境界在本文中,我们将介绍命令模式。这个模式有多大的本事呢?通过使用该模式我们能将方法调用(Method Invocation)进行封装。没错,就是方法调用。我们可以将运算块包装成形。调用这个运算的对象根本就不需
什么是命令模式命令模式(Command Design Pattern)将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 将封装带入一个新的境界在本文中,我们将介绍命令模式。这个模式有多大的本事呢?通过使用该模式我们能将方法调用(Method Invocation)进行封装。没错,就是方法调用。我们可以将运算块包装成形。调用这个运算的对象根本就不需
什么是单例模式单例模式(Singleton Desgin Pattern)确保一个类只有一个实例,并提供一个全局的访问点。 为啥使用单例模式使用单例模式有什么好处呢?一般来说,我们在程序编写中,有些对象我们只需要一个,比如:线程池(threadpool)、缓存(cache)、对话框、处理偏好设置以及注册表(registry)的对象、日志对象等等。事实上,有些对象其实只能有一个,因为如果有多个的话程
单例模式的特点: 首先,单例模式使类在程序生命周期的任何时刻都只有一个实例, 然后,单例的构造函数是私有的,外部程序如果想要访问这个单例类的话, 必须通过getInstance()来请求(注意是请求)得到这个单例类的实例。 有的时候,总是容易把全局变量和单例模式给弄混了,下面就剖析一下全局变量和单例模式相比的缺点: 首先,全局变量呢就是对一个对象的静态引用,全局变量确实可以提供单例模式实现的全局
什么是抽象工厂模式抽象工厂模式(Abstract Factory Design Pattern)提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。 是时候使用抽象工厂模式啦抽象工厂允许客户使用抽象的接口来创建一组相关的产品,而不需要知道(或者关心)实际产出的具体产品是什么。这样一来,客户就从具体的产品中被解耦。 抽象工厂模式类图 Client客户的代码中只需要涉及抽象工厂,运行时
什么是工厂方法模式工厂方法模式(Factory Method Design Pattern)定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到了子类。 是时候从new中解放出来啦当我们看到new,就会立马想到具体。是的,的确是这样的,我们在使用new创建一个对象的时候,我们实际上是针对实现编程,而不是针对接口。设计模式中有一个原则就是针对接口编程而不是针对实现编
什么是装饰者模式装饰者模式(Decorator Desgin Pattern)动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 给爱用继承的人一个全新的设计眼界我们会再次讨论继承滥用的问题。我们之前说过,设计模式有一个原则就是多用组合 ,少用继承。那么在本设计模式中,我们将讨论如何使用对象组合的方式,在运行时动态地装饰类。这样我们就可以在运行时不修改任何底层代码的情况
什么是观察者模式观察者模式(Observer Design Pattern)定义了对象之间的一对多依赖,这样一来,当一个对象改变状态的时候,它的所有依赖者都会收到通知并自动更新。 出版者+订阅者=观察者模式如果你了解报纸的订阅方式,我想你基本上也就知道了观察者模式是怎样的一回事了。在观察者模式中我们一般使用主题来表示出版者,用观察者来表示订阅者。 观察者模式类图 可以看到整个类图非常简单,定义了两
什么是策略模式策略模式(Strategy Design Pattern)定义算法族,分别封装起来,让他们之间可以相互替换,此模式让算法的“变化”独立于使用算法的客户。 策略模式类图 策略模式实例分析先从一个简单的例子开始(盗用Head First图片哈),假设你的公司要你做一个鸭子模拟的游戏SimDuck,这个很简单吧,我们只需要熟悉OO设计原则即可以利用继承,多态来做。于是,我们有了以下的设计图