设计模式——单例模式

设计模式是有用的抽象工具,用于解决工程和建筑等其它领域的设计问题。出于同样的目的,软件开发领域借用了这一概念。设计模式是用于解决特定领域发生的特定问题。
单例模式是设计模式的一种。单例模式的使用保证一个类仅有一个实例,并提供一个访问它的全局访问点。
单例模式的作用:当一个‘A类’被设计成单例模式时,由‘类A’构造出的实例对象之于其它类来讲为全局实例对象,即在每一个类中由‘A’构造出的实例对像,都为相同的对象。
在OC中如何将一个类设计成单例对象?
1.在被设计成单例对象的类的.h文件中声明一个构造单例方法
2.在.m文件中实现该方法。

//Student.h文件
//引入NSCopying协议,防止通过copy产生新的对象
@interface Student : NSObject<NSCopying>
//创建一个类方法
+(Student *)shareInstance;
//声明一个静态的实例对象,只会执行一次
static Student *stu = nil;

@implementation Student
//实现方法
+(Student *)shareInstance{
    //如果为空,则初始化一个stu对象,并返回stu
    if(stu == nil)
    {
        stu = [[Student alloc]init]
        }
        return stu;
}
//为了防止alloc 或者new创建新的实例变量
+(id)allocWithZone:(struct _NSZone *)zone{
    //使用@sychronized 设置一个互斥锁,保证此时不会受到其它线程的影响
    @synchronized (self){
        if(stu == nil){
            stu = [super allocWithZone:zone];
            }
        }
    return stu;
}

//为了防止copy产生新的对象。需要遵循NSCopying协议
-(id)copyWithZone:(NSZone *)zone{
    return self;
}

以上三个方法其实时比较单例模式比较固定的写法。
因为当我们创建对象的时候,我们的方法有:

Student *student1 = [[Student alloc]init];
Student *student2 = [Student shareIntance];
Student *student3 = [student2 copy];

如果不将Student类设计成单例类,那么,这三种方法将创建三个不一样的对象。而如果使用单例设计模式,则产生的三个对象都是一样的。输出结果如下:
这里写图片描述
单例模式的实现思路:
一个类只能创建一个实例(永远是同一个人)和一个获得该实例的方法(必须是类方法,通常使用getInstance或者shareInstance等名字);当我们调用这个方法时,如果一个类的唯一实例不为空,就返回这个实例,如果一个类的唯一实例为空就创建该类的实例。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值