黑马程序员技术交流社区

标题: 单例设计模式,面试会考吗? [打印本页]

作者: Errors    时间: 2015-4-15 22:00
标题: 单例设计模式,面试会考吗?
单例设计模式有好多种写法啊

作者: 傲弛天下    时间: 2015-4-15 22:31
基础视频里没讲啊,要考吗
作者: 秋后的梦    时间: 2015-4-15 22:59
傲弛天下 发表于 2015-4-15 22:31
基础视频里没讲啊,要考吗

不是提到过一下吗,但会不会考就不清楚了
作者: wxy19891017    时间: 2015-4-15 23:03
基础视频里面貌似没有的吧!
作者: pangang    时间: 2015-4-16 00:34
一个问题,多种解决方法吗?
作者: Errors    时间: 2015-4-16 07:57
pangang 发表于 2015-4-16 00:34
一个问题,多种解决方法吗?

类似于C语言中的全局变量,用于不同类的对象之间传值用
作者: Errors    时间: 2015-4-16 07:58
wxy19891017 发表于 2015-4-15 23:03
基础视频里面貌似没有的吧!

我似乎也没有看到
作者: 丶小千    时间: 2015-4-16 11:31
这个需要掌握,入学题不是有吗,面试有可能就是你做过的题。写最简单的一个单例就行了
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

作者: Answer_QJ2Fq    时间: 2015-4-16 11:33
单例设计模式好像就提到了一下
作者: wxy19891017    时间: 2015-4-17 09:22
丶小千 发表于 2015-4-16 11:31
这个需要掌握,入学题不是有吗,面试有可能就是你做过的题。写最简单的一个单例就行了
8、 写一个Person类 ...

正在做这个题目,单例不知道是什么。不过非常感谢!
作者: q594254132    时间: 2015-4-17 10:32
就那段代码 你把他背下来理解了 不就不用担心了




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2