内容简介:1、2、3、
装饰器模式的解析-iOS
其他 设计模式 的介绍
2、 建造者模式的解析-iOS
3、 单例模式的解析-iOS
4、 原型模式的解析-iOS
5、 代理模式的解析-iOS
6、 适配器模式的解析-iOS
7、 装饰器模式的解析-iOS
8、 外观模式的解析-iOS
9、 桥接模式的解析-iOS
10、 组合模式的解析-iOS
概率描述
装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 百度百科
他的设计原则是:
1、多用组合,少用继承。
种类
1、通过子类实现装饰模式
2、通过分类来实现装饰模式
实用场景
1、需要增加一些基本的功能组成其他的一些功能。
2、需要给一些类添加一些职能
3、需要给类扩展一些动态(可能会取消)的其他的功能
案例解析
1、通过子类实现装饰模式
作为一名爱吃的女汉子,平常在逛商场的时候,免不了会买一些小吃,尤其是那种杯装的冰淇淋,里面可以放各种坚果配料。我们以这个为例子。坚果的种类我们可以自己组合,我们不可能为每一种组合的坚果创建一个类,如果坚果的种类很多,我们得建立很多的类。所以我们采用装饰者模式,创建一个冰淇淋的基础类,再创建一个坚果类,坚果类继承冰淇凌类,然后再创建集体的坚果,具体的坚果继承坚果类。再使用具体的这样我们有哪几种坚果就创建几个坚果的类。如果再组合成自己想要的样子。这种方式就是我们上面提到的通过子类实现装饰模式。
具体代码如下:
冰淇淋类:
//.h文件#import @interface IceCream : NSObject@property(nonatomic,copy)NSString *name; -(void)content;@end//.m文件#import "IceCream.h"@implementation IceCream- (instancetype)init { self = [super init]; if (self) { _name = @"冰淇淋"; } return self; } -(void)content{ NSLog(@"%@ 里面加了 ",_name); }@end
坚果的类
//.h文件#import "IceCream.h"@interface Nut : IceCream@property(nonatomic,strong)IceCream *iceCream; - (instancetype)initWithIceCream:(IceCream *)iceCream;@end//.m文件@implementation Nut- (instancetype)initWithIceCream:(IceCream *)iceCream { self = [super init]; if (self) { _iceCream = iceCream; } return self; } -(void)content{ if (self.iceCream) { [self.iceCream content]; } }@end
具体的坚果类–瓜子
//.h文件#import "Nut.h"@interface MelonSeeds : Nut@end//.m文件#import "MelonSeeds.h"@implementation MelonSeeds-(void)content{ [super content]; NSLog(@"瓜子"); }@end
具体的坚果类 – 巴达木
//.h文件#import "Nut.h"@interface Bada : Nut@end//.m文件#import "Bada.h"@implementation Bada-(void)content{ [super content]; NSLog(@"巴达木"); }@end
具体的坚果类 — 开心果
//.h文件#import "Nut.h"@interface PistachioNuts : Nut@end//.m文件#import "PistachioNuts.h"@implementation PistachioNuts-(void)content{ [super content]; NSLog(@"开心果"); }@end
调用地方
/**************装饰模式*************************/ //通过子类实现装饰模式 IceCream *iceCream = [[IceCream alloc]init]; Nut *nut = [[Nut alloc]initWithIceCream:iceCream]; MelonSeeds *melonSeeds = [[MelonSeeds alloc]init]; Bada *bada = [[Bada alloc]init]; PistachioNuts *pistachioNuts = [[PistachioNuts alloc]init]; NSLog(@"第一次组合"); //第一次装扮 bada.iceCream = nut; pistachioNuts.iceCream = bada; [pistachioNuts content]; NSLog(@"\n"); NSLog(@"\n第一次组合"); //第二次装扮 pistachioNuts.iceCream = nut; melonSeeds.iceCream = pistachioNuts; [melonSeeds content];
命令行打印的结果:
2018-06-20 15:31:45.224052+0800 DesignDemo[3035:172018] 第一次组合 2018-06-20 15:31:45.224236+0800 DesignDemo[3035:172018] 冰淇淋 里面加了 2018-06-20 15:31:45.224386+0800 DesignDemo[3035:172018] 巴达木 2018-06-20 15:31:45.224499+0800 DesignDemo[3035:172018] 开心果 2018-06-20 15:31:45.224595+0800 DesignDemo[3035:172018] 2018-06-20 15:31:45.224691+0800 DesignDemo[3035:172018] 第二次组合 2018-06-20 15:31:45.224793+0800 DesignDemo[3035:172018] 冰淇淋 里面加了 2018-06-20 15:31:45.224892+0800 DesignDemo[3035:172018] 开心果 2018-06-20 15:31:45.224979+0800 DesignDemo[3035:172018] 瓜子
2、通过分类来实现装饰模式
IceCream类的代码
//.h 文件#import @interface IceCream : NSObject@property(nonatomic,copy)NSString *name; -(void)content;@end//.m 文件#import "IceCream.h"@implementation IceCream- (instancetype)init { self = [super init]; if (self) { _name = @"冰淇淋"; } return self; } -(void)content{ NSLog(@"%@ 里面加了 ",_name); }@end
IceCream+Bada分类的代码:
//.h文件#import "IceCream.h"@interface IceCream (Bada)-(void)yy_Name;@end//.m文件#import "IceCream+Bada.h"@implementation IceCream (Bada)-(void)yy_Name{ NSLog(@"巴达木"); }@end
调用的代码
//通过分类来实现装饰 IceCream *iceCreamTwo = [[IceCream alloc]init]; [iceCreamTwo content]; [iceCreamTwo yy_Name];
命令行打印的结果
2018-06-20 16:04:06.472324+0800 DesignDemo[3428:191882] 冰淇淋 里面加了 2018-06-20 16:04:06.472475+0800 DesignDemo[3428:191882] 巴达木
优缺点
优点:
1、可以通过一些装饰类组合成很多不同的功能
2、可以扩展类的功能。
3、适合组件化编程。
4、如果通过分类的实现装饰模式,减少了继承关系
缺点:
1、可能生出更多的类,增加程序的复杂性
总结
如果有写的不正确或者侵权的,希望大家给我提出来,我会及时修改。谢谢大家。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
啊哈C语言!逻辑的挑战(修订版)
啊哈磊 / 电子工业出版社 / 2017-1 / 49
《啊哈C语言!逻辑的挑战(修订版)》是一本非常有趣的编程启蒙书,《啊哈C语言!逻辑的挑战(修订版)》从中小学生的角度来讲述,没有生涩的内容,取而代之的是生动活泼的漫画和风趣幽默的文字。配合超萌的编程软件,《啊哈C语言!逻辑的挑战(修订版)》从开始学习与计算机对话到自己独立制作一个游戏,由浅入深地讲述编程的思维。同时,与计算机展开的逻辑较量一定会让你觉得很有意思。你可以在茶余饭后阅读《啊哈C语言!逻......一起来看看 《啊哈C语言!逻辑的挑战(修订版)》 这本书的介绍吧!