外观模式提供了一个统一的接口,用来访问子系统中的一组接口。外观定义了一个高层接口,让子系统更易使用。
在以下两种常见的情形下,会考虑使用这一模式:
- 子系统正逐渐变得复杂。可以使用外观为这些子系统类提供一个较简单的接口.
- 可以使用外观对子系统进行分层。每个子系统级别有一个外观作为入口点。让它们通过其外观进行通讯,可以简化它们的依赖关系
外观模式提供了一个统一的接口,用来访问子系统中的一组接口。外观定义了一个高层接口,让子系统更易使用。
在以下两种常见的情形下,会考虑使用这一模式:
适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。
适配器不是在详细设计时添加的,而是解决当前已有项目遇到的问题。以下情况可以使用适配器模式:
客户使用适配器的过程如下:
命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
命令模式可通过“命令对象”将“动作的请求者”从“动作的执行者”对象中解耦。一个命令对象通过在特定接收者上绑定一组动作来封装一个请求。要达到这一点,命令对象需要将动作和接收者封装进对象中。
也可以创建命令的宏,以便一次执行多个命令。
优点:
缺点:
所有工厂模式都用来封装对象的创建。实际开发中,实例化一个具体对象不应该公开进行,初始化一个具体对象也经常造成“耦合”问题。适当的使用工厂模式将有助于解决复杂的依赖问题。
下面简单介绍了工厂模式的三种用法:
装饰者模式通过创建一个装饰对象来包裹真实的对象,动态地将责任附加到对象上。若要扩展功能,装饰着提供了比继承更有弹性的替代方案。
以下情况推荐使用装饰者模式:
装饰者模式的优点:
装饰者模式的缺点:
策略模式定义了算法族,分别封装起来, 让他们可以相互替换,此模式让算法的变化独立于使用算法的客户。
策略模式的重心不是如何来实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活、具有更好的维护性和扩展性。
策略模式的本质:分离算法,选择实现。
策略模式优点:
策略模式缺点:
观察者模式定义了对象之间的一对多依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。
观察者模式主要涉及四个关键对象:
Subject被观察者:定义被观察者必须实现的职责,它必须能够动态地增加、取消观察者。它一般是抽象类或者是实现类,仅仅完成作为被观察者必须实现的职责:管理观察者并通知观察者。
Observer观察者:观察者接收到消息后,即进行update(更新方法)操作,对接收到的信息进行处理。
ConcreteSubject具体的被观察者:定义被观察者自己的业务逻辑,同时定义对哪些事件进行通知。
ConcreteObserver具体的观察者:每个观察在接收到消息后的处理反应是不同,各个观察者有自己的处理逻辑。
观察者模式的两种类型:
推模型:主题对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或部分数据。
拉模型:主题对象在通知观察者的时候,只传递少量信息。如果观察者需要更具体的信息,由观察者主动到主题对象中获取,相当于是观察者从主题对象中拉数据。
观察者模式的优点:
观察者模式的缺点:
接上文SVN+Cocoapods, 使用SVN存放Specs索引库有一个致命缺陷,如果开发组件库的过程中又在podspec
文件里使用dependency依赖了其他私有库, 那么之后在使用pod package
打包时会报错无法找到依赖的私有库。这是因为pod package
默认搜索官方索引库, 而且手动指定–spec-sources
并不支持SVN路径。
为解决打包问题,代码依旧托管到SVN,改将Specs索引库托管到第三方Git。 详细操作流程见下文。
本文主要记录了SVN和Cocoapods的配合使用, 为组件化工作的基础部分. 目录如下: