今天和大家分享的是外观模式。这个模式也不难,我猜想很多人都不经意间用过。好吧,先让我们看看他是如何定义的。
外观模式(Facade),为子系统中的一组接口提供一个一致的界面,此模式定义 一个高层接口,这个接口使得这一子系统更加容易使用。
下面给大家展示一下类的结构图,想必大家一看就明白了:
其实这个模式中,没有类与类之间的继承关系,只是进行了简单的类引用,统一了对外的接口而已。看起来是不是很简单?废话不多说了,下面简单向大家展示一下代码吧!
1
2
3
4
5
|
#import <Foundation/Foundation.h>
@interface SubSystemOne:NSObject
-(void)MethodOne;
@end
|
1
2
3
4
5
6
7
|
#import "SubSystemOne.h"
@implementation SubSystemOne
-(void)MethodOne{
NSLog(@"子系统方法一");
}
@end
|
1
2
3
4
5
|
#import <Foundation/Foundation.h>
@interface SubSystemTwo:NSObject
-(void)MethodTwo;
@end
|
1
2
3
4
5
6
7
|
#import "SubSystemTwo.h"
@implementation SubSystemTwo
-(void)MethodTwo{
NSLog(@"子系统方法二");
}
@end
|
1
2
3
4
5
|
#import <Foundation/Foundation.h>
@interface SubSystemThree:NSObject
-(void)MethodThree;
@end
|
1
2
3
4
5
6
7
|
#import "SubSystemThree.h"
@implementation SubSystemThree
-(void)MethodThree{
NSLog(@"子系统方法三");
}
@end
|
1
2
3
4
5
|
#import <Foundation/Foundation.h>
@interface SubSystemFour:NSObject
-(void)MethodFour;
@end
|
1
2
3
4
5
6
7
|
#import "SubSystemFour.h"
@implementation SubSystemFour
-(void)MethodFour{
NSLog(@"子系统方法四");
}
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#import<Foundation/Foundation.h>
@class SubSystemOne;//此处@class关键字的作用是声明(不是定义哦)所引用的类
@class SubSystemTwo;
@class SubSystemThree;
@class SubSystemFour;
@interface Facade :NSObject{
@private SubSystemOne *one;
@private SubSystemTwo *two;
@private SubSystemThree *three;
@private SubSystemFour *four;
}
-(Facade*)MyInit;
-(void)MethodA;
-(void)MethodB;
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
#import "Facade.h"
#import "SubSystemOne.h"
#import "SubSystemTwo.h"
#import "SubSystemThree.h"
#import "SubSystemFour.h"
@implementation Facade
-(Facade*)MyInit{
one= [[SubSystemOne alloc]init];
two= [[SubSystemTwo alloc]init];
three= [[SubSystemThree alloc]init];
four= [[SubSystemFour alloc]init];
return self;
}
-(void)MethodA{
NSLog(@"\n方法组A() ---- ");
[one MethodOne];
[two MethodTwo];
[three MethodThree];
[four MethodFour];
}
-(void)MethodB{
NSLog(@"\n方法组B() ---- ");
[two MethodTwo];
[three MethodThree];
}
@end
|
1
2
3
4
5
6
7
8
9
10
11
12
|
#import <Foundation/Foundation.h>
#import "Facade.h"
int main (int argc,const char * argv[])
{
@autoreleasepool{
Facade *facade = [[Facade alloc]MyInit];
[facade MethodA];
[facade MethodB];
}
return 0;
}
|
在开发软件时候,考虑使用外观模式的情况一般分为三种情况。第一种情况,设计初始阶段,应该要有意识的将不同的两个分层分离,层与层之间建立外观Facade,这样可以为复杂的子系统提供一个简单的接口,使得耦合大大降低。第二种情况,在开发阶段子系统往往因为不断的重构演化而变得越来越复杂,增加外观Facade可以提供一个简单的接口,减少它们之间的依赖。第三种情况,在维护一个遗留的大型系统时,可能这个系统已经非常难以维护和扩展了,如果有新的需求,那么可以为新系统开发一个外观Facade类,来提供设计粗糙或高度复杂的遗留代码的比较清晰简单的接口,让新系统与Facade对象交互,Facade与遗留代码交互所有复杂的工作,这样可以保持较低的耦合度。
其实,看起来并不难,但是如果想用好还是需要不断的练习和总结啊!
好啦,”打完”收工!
分享到:
相关推荐
外观10.1 何为外观模式10.2 何时使用外观模式10.3 为子系统的一组接口提供简化的接口10.4 在TouchPainter应用程序中使用外观模式10.5 总结第四部分 对象去耦第11章 中介者11.1 何为中介者模式11.2 何时使用中介者...
主要介绍了设计模式中的外观模式在iOS App开发中的运用,实例代码为传统的Objective-C,需要的朋友可以参考下
委托人可以通过更新其自身的外观(或状态)来响应消息。应用中的其他对象,并且在某些情况下,它将返回一个值,该值会影响即将发生的事件的处理方式” [1]。 现在,上面的文字对我来说并没有什么意义,直到有人问我...
C语言与C++混用975.4 本章小结985.5 本章练习98第6章 iPhone程序的设计模式996.1 MVC模式996.2 对象共享模式1016.3 目标和动作模式1046.4 通告模式1056.5 归档模式1076.6 子视图模式1086.7 委托模式1106.8...
这是一件好事,因为您将能够像以往一样以编程方式或在Storyboard UI内设计,定位和设置UITextField的外观,具体取决于您的工作方式。 您将不会改变自己的风格,因为它会适应您的风格。 但是,如果您不喜欢控件包装...
暗模式支持-自动更改外观。 充分记录和维护。 语音/ UIAccessibility支持。 向后兼容iOS 8。 可以与Swift和Objective-C一起使用。 最重要的是,它看起来不错! 下载源代码并打开“项目以尝试JGProgressHUD,...
清晰的 Objective-C 界面- 用户只能看到 Objective-C 中的外观类。 所有的技巧都是低内存消耗- C++ iostreams 用于避免内存警告,因为数据集可能相当大多行结尾支持- 正确处理 Windows ( CR LF ) 和 Unix ( LF ) 行...
StatusAlert由以下工具赞助...产品特点系统外观减少透明模式支持VoiceOver支持安全区支持通用(iPhone和iPad) Objective-C支持要求Xcode 9.0或更高版本iOS 9.0或更高版本Swift 3.2或更高版本安装可可豆要使用安装Statu
DesignPatterns-iOS 使用设计模式的示例应用程序。 在此示例中,我使用了: MVC:模型视图控制器。 单例:在整个应用程序中仅创建一个实例。 外观:到复杂子系统的单一接口。 装饰器:在不修改对象代码的情况下...
button: Objective-C(从Xcode 11.4开始)特征 :check_mark_button: 键盘操作 :check_mark_button: 复制粘贴处理 :check_mark_button: 通过“邮件”应用自动填充 :check_mark_button: 苹果启发的干净用户界面 :check...
iPhone开发入门经典》基于Apple最新发布的iPhoneOS3.0编写,循序渐进地介绍了从事iPhoneF发所需的基本知识,包括使用Xcode、Interface Builder、objective-C和(Cocoa Touch等开发工具,设计及美化用户界面,读写和...
DZAppDelegate 目的:DZAppDelegate将一些常用任务抽象为Subclass-... 您将在外观上设置外观,例如UINavigationBar , UIButton等。 如果可以使用URL方案调用您的应用,则需要设置路由。 您的网络堆栈设置(如果
这是Guillermo Muntaner生产的GMImagePicker组件的从1到1的端口,从Objective-C到Xamarin.iOS的C#。 原始资源可以在这里找到: 。 该端口是在Guillermo Muntaner的许可下出版的。 屏幕截图 产品特点 甚至可以从...
烦扰iOS Web浏览器控件,外观和行为类似于现代Safari,并且高度可自定义演示版 特征帮助您从文本中获取URL,包括主机名IDN编码,路径百分比转义,模式检查。 使用URL实例化帮助器: [CHWebBrowserViewController ...
我有比其他挑战更多的时间,所以我真的尝试通过协议和委托设计模式以及外观设计模式来实现视图/视图控制器职责与游戏逻辑职责的清晰分离和模型对象。 使用的主要框架、类和协议: 基础(NSArray,NSDictionary) ...
第10章 objective-c和iphone os128 10.1 下载sdk128 10.1.1 安装sdk128 10.1.2 sdk剖析130 10.2 objective-c介绍131 10.2.1 概述131 10.2.2 消息132 10.2.3 类定义133 10.2.4 属性135 10.2.5 ...
此类可调整您可以对其进行自定义的按钮的外观,并可以为其指定合适的框架和方向。 不管窗口中按钮的层次结构如何,下拉菜单都可以在屏幕上的任何地方进行触摸。 当超出其范围时,它会自行解散。 用法 [_dropdown ...
自定义模式转换 我为其中一个应用程序开发的自定义过渡。 它适用于iOS 7-iOS 8.2。 UIPresentationController更新(仅适用于iOS 8) 可以在找到使用UIPresentationController且没有iOS 7 hack的解决方案。 它具有...
可选的单选模式。 可选的摄像头访问权限。 可选的底部工具栏,包含有关用户选择的信息。 完整和可定制的访问权限(包括“收藏夹” ,“ Slo-mo”或“最近删除” )。 按收藏夹和相册过滤。 按媒体类型过滤。 可...
它模拟了大部分外观和感觉,但保留了常规窗口的外观和功能,包括标题栏和交通灯控件。 您可以将窗口拖入和拖出菜单栏图标,以将其从菜单栏附加和分离。 笔记: OBMenuBarWindow 与 OS X 10.7+ 兼容。 它不使用...