美文网首页
iOS知识点总结(4)- 常见的设计模式

iOS知识点总结(4)- 常见的设计模式

作者: 飞哥漂流记 | 来源:发表于2019-12-13 13:04 被阅读0次

    1. iOS常见的设计模式?

    1.代理模式

    //创建代理协议

    @protocol RYTestDelegate <NSObject>

    //声明代理方法

    @optional

    - (void)delegateTestName:(NSString *)name;

    @end

    ////声明代理属性

    @property (nonatomic, weak) id<RYTestDelegate> delegate;

    //.m文件中

    -(void)clickedDeleBtn{

        NSLog(@"代理");

        //要传递的对象

        NSString *myText = @"代理传的值";

        if ([self.delegate respondsToSelector:@selector(delegateTestName:)]) {

            [self.delegate delegateTestName:myText];

        }

    }

    -(void)clickedNextBtn{

        RYDelegateSecondViewController *vc = [[RYDelegateSecondViewController alloc]init];

        vc.delegate = self;

        [self.navigationController pushViewController:vc animated:YES];

    }

    -(void)delegateTestName:(NSString *)name{

        self.textLabel.text = name;

        NSLog(@"传值回来====>>代理");

    }

    2. 观察者模式(通知机制,KVO机制)

    -(void)addObserverMethod{

        //添加监听者

        [self.tabelview addObserver:self    //监听者

                        forKeyPath:@"contentOffset"  //被观察对象的属性字符串

                            options:NSKeyValueObservingOptionNew|NSKeyValueObservingOptionOld//设置.这里的设置表示把属性变换的新旧两个值都传递给观察者

                            context:nil];//上下文内容,c语言形式的任何指针类型

    }

    //监听属性变化时的回调

    -(void)observeValueForKeyPath:(NSString *)keyPath //被观察的属性

                        ofObject:(id)object //被观察的对象

                          change:(NSDictionary<NSKeyValueChangeKey,id> *)change //字典类型包含了变化的内容,与options呼应

                          context:(void *)context //传递过来的上下文

    {

        NSLog(@"=========>>>>>>>> %@  ========>>>>>>>旧值 %@  =====>>>>新值  %@ ",keyPath,(NSString *)change[NSKeyValueChangeOldKey], (NSString *)change[NSKeyValueChangeNewKey]);//通过change字典渠道变化的属性变化前或变化后的值.

    }

    //取消监听

    -(void)dealloc{

        [self.tabelview  removeObserver:self forKeyPath:@"contentOffset"];

    }

    3. 单例

    static LoginViewController * _instance = nil;

    +(instancetype)sharedLoginHandle{

        static dispatch_once_t onceToken;

        dispatch_once(&onceToken, ^{

              //    loginVC = [[LoginViewController alloc] init];

        _instance= [[self alloc] init];

        });

    return _instance;

    }

    4. 适配器()

    适配器模式:将一个类的接口转换成客户端希望的另一个接口。适配器模式使得原来由于接口不兼容而不能一起工作的那些类可以一起工作。

    基本上有两种实现适配器的方式。

    第一种是通过集成来适配两个接口,这称为类适配器。类适配器是通过多重集成来实现的。

    第二种是对象适配器,与类适配器不同,对象适配器不继承被适配者,而是组合了一个对它的引用。

    5. 策略

    策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。

    6.工厂模式

    场景:工厂方式创建类的实例,多与proxy模式配合,创建可替换代理类。

    “专门定义一个类来负责创建其他类的实例,被创建的实例通常具有共同的父类。”

    世界上就是由一个工厂类,根据传入的参数,动态地决定创建出哪一个产品类的实例。

    7. 装饰器(Decorator)

    装饰器模式在不修改原来代码的情况下动态的给对象增加新的行为和职责,它通过一个对象包装被装饰对象的方法来修改类的

    行为,这种方法可以做为子类化的一种替代方法。

    这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装。

    在Objective-C中,存在两种非常常见的实现:Category(类别)和Delegation(委托)。

    2. 

    相关文章

      网友评论

          本文标题:iOS知识点总结(4)- 常见的设计模式

          本文链接:https://www.haomeiwen.com/subject/grhfnctx.html