设计模式之Bridge Bridge定义 : 将抽象和行为划分开来,各自独立,但能动态的结合. 为什么使用? 通常,当一个抽象类或接口有多个具体实现(concrete subclass),这些concrete之间关系可能有以下两种: 1. 这多个具体实现之间恰好是并列的,如前面举例,打桩,有两个concrete class:方形桩和圆形桩;这两个形状上的桩是并列的,没有概念上的重复,那么我们只要使
设计模式之Adapter(适配器) 定义: 将两个不兼容的类纠合在一起使用,属于结构型模式,需要有Adaptee(被适配者)和Adaptor(适配器)两个身份. 为何使用? 我们经常碰到要将两个没有关系的类组合在一起使用,第一解决方案是:修改各自类的接口,但是如果我们没有源代码,或者,我们不愿意为了一个应用而修改各自的接口。 怎么办? 使用Adapter,在这两种接口之间创建一个混合接口(混血儿)
装饰(Decorator) Intent 为对象动态添加功能。 Class Diagram 装饰者(Decorator)和具体组件(ConcreteComponent)都继承自组件(Component),具体组件的方法实现不需要依赖于其它对象,而装饰者组合了一个组件,这样它可以装饰其它装饰者或者具体组件。所谓装饰,就是把这个装饰者套在被装饰者之上,从而动态扩展被装饰者的功能。装饰者的方法有一部分是
组合(Composite) Intent 将对象组合成树形结构来表示“整体/部分”层次关系,允许用户以相同的方式处理单独对象和组合对象。 Class Diagram 组件(Component)类是组合类(Composite)和叶子类(Leaf)的父类,可以把组合类看成是树的中间节点。 组合对象拥有一个或者多个组件对象,因此组合对象的操作可以委托给组件对象去处理,而组件对象可以是另一个组合对象或者叶
9. 策略(Strategy) Intent 定义一系列算法,封装每个算法,并使它们可以互换。 策略模式可以让算法独立于使用它的客户端。 Class Diagram Strategy 接口定义了一个算法族,它们都实现了 behavior() 方法。 Context 是使用到该算法族的类,其中的 doSomething() 方法会调用 behavior(),setStrategy(Strategy)
设计模式是解决问题的方案,学习现有的设计模式可以做到经验复用。拥有设计模式词汇,在沟通时就能用更少的词汇来讨论,并且不需要了解底层细节。 二、创建型 单例.md 简单工厂.md 工厂方法.md 抽象工厂.md 生成器.md 原型模式.md 三、行为型 责任链.md 命令.md 解释器.md 迭代器.md 中介者.md 备忘录.md 观察者.md 状态.md 策略.md 模板方法.md 访问者.md
8. 状态(State) Intent 允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它所属的类。 Class Diagram Implementation 糖果销售机有多种状态,每种状态下销售机有不同的行为,状态可以发生转移,使得销售机的行为也发生改变。 // java public interface State { /** * 投入 25 分钱 */
桥接(Bridge) Intent 将抽象与实现分离开来,使它们可以独立变化。 Class Diagram Abstraction:定义抽象类的接口 Implementor:定义实现类接口 Implementation RemoteControl 表示遥控器,指代 Abstraction。 TV 表示电视,指代 Implementor。 桥接模式将遥控器和电视分离开来,从而可以独立改变遥控器或者电
外观(Facade) Intent 提供了一个统一的接口,用来访问子系统中的一群接口,从而让子系统更容易使用。 Class Diagram Implementation 观看电影需要操作很多电器,使用外观模式实现一键看电影功能。 // java public class SubSystem { public void turnOnTV() { System.out.prin
2. 命令(Command) Intent 将命令封装成对象中,具有以下作用: 使用命令来参数化其它对象 将命令放入队列中进行排队 将命令的操作记录到日志中 支持可撤销的操作 Class Diagram Command:命令 Receiver:命令接收者,也就是命令真正的执行者 Invoker:通过它来调用命令 Client:可以设置命令与命令的接收者 Implementation 设计一个遥控器
代理(Proxy) Intent 控制对其它对象的访问。 Class Diagram 代理有以下四类: 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,
享元(Flyweight) Intent 利用共享的方式来支持大量细粒度的对象,这些对象一部分内部状态是相同的。 Class Diagram Flyweight:享元对象 IntrinsicState:内部状态,享元对象共享内部状态 ExtrinsicState:外部状态,每个享元对象的外部状态不同 Implementation // java public interface Flyweight
单例(Singleton) Intent 确保一个类只有一个实例,并提供该实例的全局访问点。 Class Diagram 使用一个私有构造函数、一个私有静态变量以及一个公有静态函数来实现。 私有构造函数保证了不能通过构造函数来创建对象实例,只能通过公有静态函数返回唯一的私有静态变量。 Implementation Ⅰ 懒汉式-线程不安全 以下实现中,私有静态变量 uniqueInstance 被延
我不确定这是否是问这个问题的正确地方。 我是dynamodb的新手,正在尝试创建一个小型web应用程序。我已经阅读了这里的最佳实践http://docs.amazonwebservices.com/amazondynamodb/latest/developerguide/BestPractices.html 我的桌子将是: 建筑物 租户(一栋建筑可以有尽可能多的租户,由楼层编号确定) 收件人(每个
单例模式(Singleton) 单例模式是一种常见的设计模式,在 Cocoa 开发中也经常使用。 一个简单的单例模式示例代码如下: /* Singleton.h */ #import "Foundation/Foundation.h" @interface Singleton : NSObject + (Singleton *)shardInstance; @end /* Singleton.m