设计模式:对象创建(原型,单例,简单工厂,工厂方法,抽象工厂,生成器)

1、原型模式:用copy方法创建同一个类型的对象


2、单例模式 :
单例设计模式确保在整个应用中 一个类仅有一个实例,并提供一个访问它的全局访问点。它通常采用懒加载的方式在第一次用到实例的时候再去创建它。
如果单例对象要由多个线程访问,要让它线程安全,需要在静态实例的nil检查周围加入一些@synchronized() 程序块或者NSLock 实例。 如果其他属性需要保护,可以把它们声明为atomic型。

Cocoa Touch 框架中出现的几个单例类:UIApplication ,UIAccelerometer ,NSFileManager

 

3、简单工厂模式:
比方说都是某某学校的学生,那么可能有需要多些100行重复的代码了,那么,如果写一个-(void)createObj方法,把创建对象和学校属性写在这个方法里边,那么就是会省事很多,也就是说我们可以alloc 创建对象封装到一个方法里边,直接调用这个方法就可以了,这就是简单工厂方法


Animal 类
@interface Animal :NSObject
@proterty(nonatomic,strong) NSString *name;
-(void)laugh;
@end
Dog类
 
@interface Dog:Animal
@end
 
Cat类
@interface Cat:Animal
@end


<---------------------创建对象的工厂类 -------------------------
.h
@interface AnimalFactory:NSObject
+(Dog *)createDog;
+(Cat *)createCat;
@end
.m
@implementation AnimalFactory
+(Dog *)createDog{
    Dog *dog=[[Dog alloc]init];
    dog.name=@“baby”;
    return dog;
}
 
+(Cat *) createCat{
    Cat *cat=[[Cat alloc]init];
    return cat;
}
Main.m文件
Dog *dog=[AnimalFactory createDog];

Cat *cat=[AnimalFactory createCat];


4、工厂方法模式:(这个比简单工厂 好用)工厂方法模式是为每一个要创建的对象所在的类都相应地创建一个工厂。
定义创建对象的接口,让子类决定实例化哪一个类。工厂方法使得一个类的推迟到其子类。
例如,在需要在这100句代码中把createDog方法变成createCat方法了时,用这个模式比较好:
代码如下
@interface AnimalFactory:NSObject
-(Animal*)createAnimal;
@end;
Dog工厂类
@interface DogFactory:AnimalFactory;
@implementation DogFactory
-(Animal *)createAnimal{
retrurn [[Dog alloc]init];
}
@end
Cat工厂类
@interface CatFactory:AnimalFactory;
@implementation Cat Factory
-(Animal *)createAnimal
retrurn [[Cat alloc]init];
}
@end
Main.m
AnimalFactory *dogFactory=[[DogFactory alloc]init];
 
Animal *animal1=[dogFactory createAnimal];
[animal1 laugh];
Animal *animal2=[dogFactory createAnimal];
[animal2 laugh];
…….
Animal *animal100=[dogFactory createAnimal];
[animal100 laugh];


这样话如果要把100个Dog改为Cat的话,只需要吧DogFactory改为CatFactory就可以了。

但是工厂方法也有它的限制:
1.要创建的类必须拥有同一个父类
2.要创建的类在100个不同的地方所调用的方法必须一样


5、抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

通过对象组合创建抽象产品,多个系列,必须修改父类的接口才能支持新产品。


6、生成器模式(构建者模式):将一个复杂对象的构建与它的表现分离,使得同样的构建过程可以创建不同的表现。(指导者和 生成器分离)



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值