• IOS开发基础Object-C(12)—单例模式


    单例模式的意思就是仅仅有一个实例。

    单例模式确保某一个类仅仅有一个实例,并且自行实例化并向整个系统提供这个实例。这个类称为单例类。

    1.单例模式的要点:

      显然单例模式的要点有三个;一是某个类仅仅能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。

    2.单例模式的长处:

      1.实例控制:Singleton 会阻止其它对象实例化其自己的 Singleton 对象的副本,从而确保全部对象都訪问唯一实例。

      2.灵活性:由于类控制了实例化过程,所以类能够更加灵活改动实例化过程
     

    我们来举一个样例吧

    比方说。我们须要有一个银行,能够在银行中存钱和取钱。银行的总钱数会随着存钱取钱而变化


    我们来新建一个类 银行类

    //
    //  Bank.h
    //  08-Bank
    //
    //  Created by cuixuerui on 15/12/29.
    //  Copyright (c) 2015年 cuixuerui. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    @interface Bank : NSObject
    
    @property int money;
    
    -(instancetype)initWithMoney:(int)money;
    
    
    +(Bank *)defaualtBank;
    @end

    实现算法 Bank.m

    //
    //  Bank.m
    //  08-Bank
    //
    //  Created by cuixuerui on 15/12/29.
    //  Copyright (c) 2015年 cuixuerui. All rights reserved.
    //
    
    #import "Bank.h"
    
    @implementation Bank
    
    -(instancetype)initWithMoney:(int)money {
        
        if (self =[super init]) { 
            _money=money;
        }
        return self;
    }
    
    
    +(Bank *)defaualtBank {
        
        static Bank *bank;//全局变量
        if (!bank) {//这句确保仅仅有一个实例
            bank = [[Bank alloc]initWithMoney:1000];//自行创建实例
        }
        return bank;
        
    }
    @end
    

    事实上最重要的就是
    +(Bank *)defaualtBank;
    这是单例模式的关键所在

    以下我们就来新建一个Person类

    //  PersonOne.h
    //  08-Bank
    //
    //  Created by cuixuerui on 15/12/29.
    //  Copyright (c) 2015年 cuixuerui. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import "Bank.h"
    
    @interface PersonOne : NSObject{
        
        Bank * _bank;
    }
    
    -(void)withDrawMoney:(int)money;
    -(void)saveMoney:(int)money;
    
    //-(instancetype)init;
    @end

    实现person类


    //
    //  PersonOne.m
    //  08-Bank
    //
    //  Created by cuixuerui on 15/12/29.
    //  Copyright (c) 2015年 cuixuerui. All rights reserved.
    //
    
    #import "PersonOne.h"
    #import "Bank.h"
    @implementation PersonOne
    
    -(instancetype)init{
        
        if (self = [super init]) {
            _bank = [Bank defaualtBank];
        }
        return self;
    }
    
    
    -(void)saveMoney:(int)money {
        
        //一定要用创建单例对象的方法去创建
        
    
        [_bank setMoney:[_bank money]+money];
        
        
        NSLog(@"银行里还有%d",[_bank money]);
        
        
    }
    
    -(void)withDrawMoney:(int)money {
        
        
        [_bank setMoney:[_bank money]-money];
        
        NSLog(@"银行里还有%d",[_bank money]);
        
    }
    @end
    

    最后在main方法中调用


    //
    //  main.m
    //  08-Bank
    //
    //  Created by cuixuerui on 15/12/29.
    //  Copyright (c) 2015年 cuixuerui. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    
    #import "PersonOne.h"
    int main(int argc, const char * argv[]) {
       
        PersonOne *p1 = [[PersonOne alloc] init];
        
        
        [p1 saveMoney:500];
        
        
        return 0;
    }
    



  • 相关阅读:
    品尝阿里云容器服务:负载均衡与容器的关系
    基于微服务架构、运行于容器中的.NET Core示例应用eShopOnContainers
    基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署
    用工厂模式解决ASP.NET Core中依赖注入的一个烦恼
    终于知道什么情况下需要实现.NET Core中的IOptions接口
    ASP.NET Core Web API处理HttpResponseMessage类型返回值的问题
    ASP.NET Core奇遇记:无用户访问,CPU却一直100%
    省一行是一行:在if语句中使用C# 7.0的模式匹配
    ASP.NET Core 2.0 Preview 1 中贴心的新特性
    .NET Core类库项目中如何读取appsettings.json中的配置
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/7347943.html
Copyright © 2020-2023  润新知