迭代器模式(Iterator Pattern) 目前已经是一个没落的模式, 基本上没人会单独写一个迭代器, 除非是产品性质的开发, 其定义如下: 它提供一种方法访问一个容器对象中各个元素, 而又不需暴露该对象的内部细节。
模式定义 给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。 解释器模式的优点 解释器是一个简单语法分析工具, 它最显著的优点就是扩展性, 修改语法规则只要修改相应的非终结符表达式就可以了, 若扩展语法, 则只要增加非终结符类就可以了。 解释器模式的缺点 ● 解释器模式会引起类膨胀 ● 解释器模式采用递归调用方法 ● 效率问题 解释器模式的使用场景 ●
模式定义 在不破坏封装性的前提下,捕获、企对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 备忘录模式的使用场景 ● 需要保存和恢复数据的相关状态场景。 ● 提供一个可回滚(rollback) 的操作; 比如Word中的CTRL+Z组合键, IE浏览器中的后 退按钮, 文件管理器上的backspace键等。 ● 需要监控的副本场景中。 例如要监控一个对象的属
模式定义 表示一个作用于某对象结构中的各元素的操作。使得可以在不改变(稳定)各元素的类的前提下定义(扩展)作用于这些元素的新操作(变化)。 class Visitor; class Element { public: virtual void accept(Visitor& visitor) = 0; //第一次多态辨析 virtual ~Element() {} }; class Eleme
模式定义 动态(组合)地给一个对象增加一些额外的职责。就增加功能而言,Decorator模式比生成子类(继承)更为灵活(消除重复代码 & 减少子类个数) 要点解析 通过采用组合而非继承的手法, Decorator模式实现了在运行时动态扩展对象功能的能力,而且可以根据需要扩展多个功能。避免了使用继承带来的“灵活性差”和“多子类衍生问题”。 Decorator类在接口上表现为is-a Componen
模式定义 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subject)的状态发生改变时,所有依赖于它的对象都得到通知并自动更新 要点总结 使用面向对象的抽象,Observer模式使得我们可以独立地改变目标与观察者,从而使二者之间的依赖关系达致松耦合。 目标发送通知时,无需指定观察者,通知(可以携带通知信息作为参数)会自动传播。 观察者自己决定是否需要订阅通知,目标对象对此一无所知。
模式定义 用一个中介对象来封装(封装变化)一系列的对象交互。中介者使各对象不需要显式的相互依赖>运行时依赖),从而使其耦合松散(管理变化),而且可以独立地改变它们之间的交互。 中介者模式的优点 中介者模式的优点就是减少类间的依赖, 把原有的一对多的依赖变成了一对一的依赖,同事类只依赖中介者, 减少了依赖, 当然同时也降低了类间的耦合。 中介者模式的缺点 中介者模式的缺点就是中介者会膨胀得很大, 而
模式定义 将一类的接口转换成客户希望的另一个接口,Adaptor模式使得原本由于接口不兼容而不能工作的那些类可以一起工作。 适配器模式的优点 适配器模式可以让两个没有任何关系的类在一起运行, 只要适配器这个角色能够搞定他们就成。 增加了类的透明性 提高了类的复用程度 灵活性非常好 适配器模式的使用场景 你有动机修改一个已经投产中的接口时, 适配器模式可能是最适合你的模式。 适配器模式最好在详细设计
模式定义 为其他对象提供一种代理控制(隔离,使用接口)对这个对象进行访问。 class ISubject { public: virtual void process(){} }; //Proxy的设计 class SubjectProxy:public ISubject { public: virtual void process() { //对RealSubject的一种间接访问 }
为系统中一组接口提供一个(稳定)的界面,Facade定义了一个高层接口,这个接口使得子系统更加容易复用。 门面模式的优点: 减少系统的相互依赖 提高了灵活性 提高安全性 门面模式的缺点: 门面模式最大的缺点就是不符合开闭原则, 对修改关闭, 对扩展开放, 看看我们那个门面对象吧, 它可是重中之重, 一旦在系统投产后发现有一个小错误, 你怎么解决? 完全遵从开闭原则, 根本没办法解决。 继承? 覆写
建造者模式的优点: 封装性 建造者独立,易于扩展 便于控制细节风险 建造者模式使用的场景: 相同的方法, 不同的执行顺序, 产生不同的事件结果时, 可以采用建造者模式多个部件或零件, 都可以装配到一个对象中, 但是产生的运行结果又不相同时, 则可以使用该模式。产品类非常复杂, 或者产品类中的调用顺序不同产生了不同的效能, 这个时候使用建造者模式非常合适。 class House{}; class
主要内容:1. “手动保留释放”或MRR,2. MRR基本规则,3. “自动参考计数”或ARC内存管理是任何编程语言中最重要的过程之一。它是在需要时分配对象的内存并在不再需要时取消分配的过程。 管理对象内存是一个性能问题; 如果应用程序不释放不需要的对象,则应用程序会因内存占用增加并且性能受损。 Objective-C内存管理技术大致可分为两类 - “手动保留或释放”或MRR “自动参考计数”或ARC 1. “手动保留释放”或MRR 在MRR中,通过跟踪自己的对象来明确管理内存。这是使用一
主要内容:1. Objective-C集合快速枚举是Objective-C的功能,用于枚举集合。 因此,要了解快速枚举,首先需要了解集合,这将在下一节中进行说明。 1. Objective-C集合 集合是基本结构。它用于保存和管理其他对象。 集合的主要目的是提供一种有效存储和检索对象的通用方法。 有几种不同类型的集合。 虽然它们都能实现能够容纳其他对象的相同目的,但它们的主要区别在于检索对象的方式。 Objective-C中使用的最常见的
主要内容:1. 类集群,2. 什么是复合对象?,复合对象示例在Objective-C中,可以在类集群中创建子类,该类集合定义了一个嵌入在其中的类。 这些类对象是复合对象。你可能想知道什么是类集群,下面首先了解什么是类集群。 1. 类集群 类集群是基础框架广泛使用的设计模式。 类集群在公共抽象超类下组合了许多私有具体子类。 以这种方式对类进行分组简化了面向对象框架的公开可见体系结构,而不会降低其功能丰富性。 类集群基于抽象工厂设计模式。 为了简单起见,创建了
动态绑定确定在运行时而不是在编译时调用的方法。 动态绑定也称为后期绑定。 在Objective-C中,所有方法都在运行时动态解析。执行的确切代码由方法名称(选择器)和接收对象确定。 动态绑定可实现多态性。例如,考虑一组对象,包括和。 每个对象都有自己的方法实现。 在下面的代码片段中,表达式执行的实际代码是在运行时确定的。 运行时系统使用方法运行的选择器来识别的任何类中的适当方法。 下面来看一下解释