设计模式之策略模式
设计模式之策略模式意图策略模式(Strategy) 是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。 适用场景 当你想使用对象中各种不同的算法变体, 并希望能在运行时切换算法时, 可使用策略模式。 当你有许多仅在执行某些行为时略有不同的相似类时, 可使用策略模式。 如果算法在上下文的逻辑中不是特别重要, 使用该模式能将类的业务逻辑与其算法实现细节隔离开来。 当类中使用了复杂条件运算符以在同一算法的不同变体中切换时, 可使用该模式。 结构结构说明 上下文 (Context) 维护指向具体策略的引用, 且仅通过策略接口与该对象进行交流。 策略 (Strategy) 接口是所有具体策略的通用接口, 它声明了一个上下文用于执行策略的方法。 具体策略 (Concrete Strategies) 实现了上下文所用算法的各种不同变体。 当上下文需要运行算法时, 它会在其已连接的策略对象上调用执行方法。 上下文不清楚其所涉及的策略类型与算法的执行方式。 客户端 (Client) 会创建一个特定策略对象并将其传递给上下文。 上下文则...
设计模式之代理模式
设计模式之代理模式意图代理模式 (Proxy) 是一种结构型设计模式, 为其他对象提供一种代理以控制对这个对象的访问。 代理模式介绍了一种访问对象的间接等级。 一个远程代理可以隐藏一个对象在不同地址空间的细节。 一个虚拟代理可以根据需要最优化创建对象的开销。 而安全代理和智能指引都允许访问对象的同时处理其他事务。 适用场景 延迟初始化 (虚拟代理)。 如果你有一个偶尔使用的重量级服务对象, 一直保持该对象运行会消耗系统资源时, 可使用代理模式。 访问控制 (保护代理)。 如果你只希望特定客户端使用服务对象, 这里的对象可以是操作系统中非常重要的部分, 而客户端则是各种已启动的程序 (包括恶意程序), 此时可使用代理模式。 本地执行远程服务 (远程代理)。 适用于服务对象位于远程服务器上的情形。 记录日志请求 (日志记录代理)。 适用于当你需要保存对于服务对象的请求历史记录时。 代理可以在向服务传递请求前进行记录。 智能引用。 可在没有客户端使用某个重量级对象时立即销毁该对象。 结构 结构说明 服务接口 (Service Interface) 声明了服务接口。 代理必须遵循该...
设计模式之适配器模式
设计模式之适配器模式意图适配器模式 (Adapter)是一种结构型设计模式, 它能使不兼容的对象能够相互合作。 适配器模式通过封装对象将复杂的转换过程隐藏于幕后。 被封装的对象甚至察觉不到适配器的存在。 适配器不仅可以转换不同格式的数据, 其还有助于采用不同接口的对象之间的合作。 它的运作方式如下: 适配器实现与其中一个现有对象兼容的接口。 现有对象可以使用该接口安全地调用适配器方法。 适配器方法被调用后将以另一个对象兼容的格式和顺序将请求传递给该对象。 适用场景 当你希望使用某个类, 但是其接口与其他代码不兼容时, 可以使用适配器类。 如果您需要复用这样一些类, 他们处于同一个继承体系, 并且他们又有了额外的一些共同的方法, 但是这些共同的方法不是所有在这一继承体系中的子类所具有的共性。 结构适配器实现了其中一个对象的接口, 并对另一个对象进行封装。 结构说明 客户端 (Client) 是包含当前程序业务逻辑的类。 客户端接口 (Client Interface) 描述了其他类与客户端代码合作时必须遵循的协议。 服务 (Service) 中有一些功能类 (通常来自第三方...






