
设计模式
若明天不见
时白发未生,轻狂尚有
展开
-
面向对象七大编码设计原则
知道抽象、继承、多态这些概念,并不会马上让你变成好的面向对象程序设计者。 设计大师关心的是建立弹性的设计,可以维护,可以应对变化。1. 编码设计的原则 快速而随性(quick and dirty)地设计一个简单的程序并没有错。但如果这是复杂系统中具有代表性的一段,那么对这个程序信心就应该动摇。 在面向对象设计领域,软件开发人员在开原创 2016-05-28 18:26:45 · 3777 阅读 · 0 评论 -
设计模式之状态模式
1.状态模式 基本常识:策略模式和状态模式是双胞胎,在出生时才分开。 状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。这个模式将状态封装成为独立的类,并将动作委托到代表当前状态的对象,使得行为会随着内部状态而改变。从客户的视角来看:如果说你使用的对象能够完全改变它的行为,那么你会觉得,这个对象实际上是从别的类实例化而来的。然而,实际上是由依照模式来使用组合通过简单引原创 2016-09-16 16:43:26 · 750 阅读 · 0 评论 -
设计模式之代理模式
1.代理模式 代理模式,为其他对象提供一种代理以控制对这个对象的访问。 使用代理模式创建代表(representative)对象,让代表对象控制某对象的访问,被代理的对象可以是远程的对象、创建开销大的对象或需要安全控制的对象。2.代理模式的应用I.远程代理,也就是为一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。 WebService的引用,使得客户端程序原创 2016-09-07 17:10:47 · 696 阅读 · 0 评论 -
设计模式之命令模式
当一系列的类能直接找到我,让我帮他们干活时,其实我是拒绝的。我又要接待你们(接收命令),又要干活(执行命令),真是麻烦。自从我有了一个秘书之后,事情就好办多了,因为我再也不需要接待别的类了,因为秘书能帮我接收命令,把方法调用(method invocation)封装起来了,而且我和秘书的耦合程度也很低哦。(解耦) 1. 命令模式 命令模式将“请求”封装成对象,以便使用不同的原创 2016-06-09 12:07:02 · 767 阅读 · 0 评论 -
设计模式之装饰者模式
继承无法完全解决此类问题:类数量爆炸、设计死板,以及基类加入的新功能并不适用于所有的子类。 (适配器模式实现及例子的代码均在git) 1. 装饰者模式 装饰者模式动态地将责任附加到对象上。装饰者模式是不必改变原类文件和使用继承的情况下,动态地拓展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 设计原则:多用组合,少原创 2016-06-04 12:03:44 · 521 阅读 · 0 评论 -
设计模式之单例模式
在面向对象的世界中,一个类总是会实例化很多对象,以解决具体问题。但Singleton说:“我是独一无二的,我在任何时刻都只有一个对象。”Excuse me?Who are you?1. 单例模式 单例模式确保某个类只有一个实例,并提供一个全局访问点。在计算机系统中,线程池(threadpool)、缓存(cache)、注册表(registry)、日志对象、打印机、显卡等设原创 2016-05-24 20:01:18 · 876 阅读 · 0 评论 -
设计模式之适配器模式
问题: 如何解决不兼容的接口的问题,或者说如何提供一个稳定的接口给具有不同接口的相似组件?解决方案: 通过一个中间的适配器对象使一个组件的原有接口转变成另一个接口。(适配器模式实现及例子的代码均在git)1. 继承与接口 使用普通的类继承或接口实现,可以通过父类对象引用子类实例的方式来实现运行时多态(Java 编译时多态和原创 2016-05-27 13:51:04 · 671 阅读 · 0 评论 -
设计模式之工厂模式
问题: 谁有责任创建一些特殊考虑的对象?比如说有复杂的创建逻辑,为了更好的内聚性而希望分离创建职责。解决方案: 创建一个称为工厂(factory) 的纯虚构对象来处理这种创建。(适配器模式实现及例子的代码均在git)1. 继承与接口 使用普通的类继承或接口实现,可以通过父类对象引用子类实例的方式来实现运行时多态(见Java原创 2016-05-28 10:06:24 · 677 阅读 · 0 评论 -
设计模式之原型模式
1.原型模式 原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。当创建给定类的实例的过程很昂贵或很复杂时,就使用原型模式。 原型模式就是从一个对象再创建另外一个可定制的对象,而且不需知道任何创建的细节。2.浅复制和深复制 所谓的“浅复制”,即是被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象;对于“深复制”,则把引用对象的原创 2016-10-03 17:50:05 · 496 阅读 · 0 评论