A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Errors 中级黑马   /  2015-4-15 22:00  /  1169 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

单例设计模式有好多种写法啊

10 个回复

正序浏览
就那段代码 你把他背下来理解了 不就不用担心了
回复 使用道具 举报
丶小千 发表于 2015-4-16 11:31
这个需要掌握,入学题不是有吗,面试有可能就是你做过的题。写最简单的一个单例就行了
8、 写一个Person类 ...

正在做这个题目,单例不知道是什么。不过非常感谢!
回复 使用道具 举报
单例设计模式好像就提到了一下
回复 使用道具 举报
这个需要掌握,入学题不是有吗,面试有可能就是你做过的题。写最简单的一个单例就行了
8、 写一个Person类,要保证无论什么情况下创建Person对象返回的都是同一个对象(单例设计模式)。(Objective-C)
*/

/*
编程思想:
用不同方法创建对象要想返回的都是同一个对象必须使用static创建静态对象,将static写在Person类的方法中,使用alloc方法初始化一个类的实例的时候,默认是调用了 allocWithZone 的方法。于是覆盖allocWithZone方法的原因已经很明显了:为了保持单例类实例的唯一性,需要覆盖所有会生成新的实例的方法,于是就必须重写allocWithZone方法,满足需求。最后测试用两种方法创建几个对象,输出他们的内存地址观察是否一样
*/

#import <Foundation/Foundation.h>

#import "Person.h"

//1.在main函数里面进行简单的测试
int main()
{
   
    //2.创建一个Person对象
    Person *p1 = [Person sharePerson];
   
    //3.用同样的方法创建另一个Person对象
    Person *p2 = [Person sharePerson];
   
    //4.适用alloc创建一个Person对象
    Person *p3 = [[Person alloc]init];
   
    //5.将三者的地址返回进行对比
    NSLog(@"\n%@\n%@\n%@",p1,p2,p3);
   
    //6.程序正常退出
    return 0;
}


@interface Person : NSObject

//覆盖allocWithZone方法的声明
+ (id)allocWithZone:(NSZone *)zone; // 此方法可以不在此声明,在实现中重写亦没有错误

//sharePerson方法的声明
+ (Person *) sharePerson;

@end


@implementation Person

//sharePerson方法的实现
+(Person *)sharePerson
{
    //1.静态的Person类的实例,使通过此方法创建的实例均相同
    static Person *person = nil;
   
    //2.只有为空的时候构建实例
    if(person == nil)
        
    {
        //3.调用allocWithZone构建实例
        person = [[super allocWithZone:NULL] init];
        
    }
    //4.返回实例
    return person;
}

//覆盖allocWithZone方法的实现
+ (id)allocWithZone:(NSZone *)zone

{
    //调用sharePerson
    return [self sharePerson];
}

@end
回复 使用道具 举报
Errors 中级黑马 2015-4-16 07:58:20
7#
wxy19891017 发表于 2015-4-15 23:03
基础视频里面貌似没有的吧!

我似乎也没有看到
回复 使用道具 举报
pangang 发表于 2015-4-16 00:34
一个问题,多种解决方法吗?

类似于C语言中的全局变量,用于不同类的对象之间传值用
回复 使用道具 举报
一个问题,多种解决方法吗?
回复 使用道具 举报
基础视频里面貌似没有的吧!
回复 使用道具 举报
傲弛天下 发表于 2015-4-15 22:31
基础视频里没讲啊,要考吗

不是提到过一下吗,但会不会考就不清楚了
回复 使用道具 举报
基础视频里没讲啊,要考吗
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马