zoukankan      html  css  js  c++  java
  • 设计模式IOS篇-第二章:委托模式

    委托模式从设计模式中的装饰模式,适配器模式,模板方法模式演变过来

    现在来看看IOS版的是怎样的,先说说一个场景:

    现在有一家公司,他们接到一个项目,项目的(Project),项目需要有一些懂Java的程序员来编写Java,意思就是委托一些Java程序员去完成这个项目(JavaProgrammerProtocol)

    下面这段代码就像是一个Java工程师的委托书,谁继承了,表示谁有这个资格编写Java(调用writingJava方法)

    //Java委托,如果这个委托有另外一个类可以写到另外一个类,如果没有可以跟随在一些类里面
    @protocol JavaProgrammerProtocol
    
    @required
    -(void)writingJava;
    
    @end

    下面这部分代表有一个项目,是要编写Java的人(继承JavaProtocol)的类,当某程序员承认为会JAVA的人,就必须告知自己将会为这个项目编写Java部分(必须在实例化后,设定javaProtocol的委托者)

    //Project.h文件内容
    #import <Foundation/Foundation.h>
    
    @interface Project : NSObject
    
    @property(nonatomic)id<JavaProgrammerProtocol> javaProtocol;
    
    -(void)projectStart;
    
    @end
    
    //Project.m文件内容
    #import "Project.h"
    
    @implementation Project
    
    -(void)projectStart
    {
        if (self.javaProtocol != nil) {
            [self.javaProtocol writingJava];
        }
    }
    
    @end

    下面为编程者,一个懂Java编程的人(JavaProgrammerProtocol)

    //Programmer.h文件内容
    #import <Foundation/Foundation.h>
    #import "Project.h"
    
    @interface Programmer : NSObject<JavaProgrammerProtocol>
    
    
    @end
    
    //Programmer.m文件内容
    #import "Programmer.h"
    
    
    @implementation Programmer
    
    -(id)init
    {
        self = [super init];
        if(self){
            //这里接到了项目后,设定自己(self)将会为这个项目编写Java(设定项目的委托者)
            Project *project = [[Project alloc]init];
            project.javaProtocol = self;
            //当项目运行的时候(调用projectStart方法),方法会执行调用委托者的writingJava方法
            [project projectStart];
        }
        return self;
    }
    
    //由Project调用
    -(void)writingJava
    {
        NSLog(@"Start to writing Java");
    }
    
    @end

    最好,这个代码会调用writingJava方法,打印出"Start to writing Java"字样。

  • 相关阅读:
    friend ---- public and private
    c++中const使用详解
    In c++ access control works on per-class basis not on per-object basis.
    realloc 用法
    enum don't allocate any memory
    (转)C++ STL中的vector的内存分配与释放
    计算机网络面试总结
    Redis安装与测试
    Hbase的安装与测试
    使用ActiveMQ实现简易聊天功能
  • 原文地址:https://www.cnblogs.com/oscar1987121/p/5236356.html
Copyright © 2011-2022 走看看