美文网首页
装饰模式Decorator在iOS中的理解

装饰模式Decorator在iOS中的理解

作者: 盛夏凉风 | 来源:发表于2021-08-08 00:42 被阅读0次

    装饰模式Decorator的定义:

    动态给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更加灵活。
    关系图如下:


    1920px-Decorator_UML_class_diagram.svg.png

    名词解释:

    Component:一个被添加装饰的对象
    ConcreteComponent:继承与Component的子类对象
    Decorator:装饰器对象,其中Component的子类是其中一个属性
    ConcreteDecorator:装饰器的子类对象,可以实现或者添加operation

    看定义的话比较抽象,下面直接演示代码。

    iOS事例:

    假如有一个勇者,勇者的装备只有一把剑,然后我们用装饰器模式给勇者加上其他装备,例如一个盾牌。下面是具体代码。


    WeChat7cb898aaaee90bb7af107b165a6c75c0.png 角色代码 勇者的代码 装饰器的代码 盾的代码

    其中Component对应Role(角色),ConcreteComponent对应Brave(勇者),Decorator对应Decorator,ConcreteDecorator对应Shiled(盾),operation对应函数equipment

    下面是执行顺序与结果:


    执行 输出结果

    以上就是装饰器模式在iOS的一个小小例子。

    思考:

    问题:看到以上代码,你肯定会想,iOS里面如果要给一个对象添加额外的功能函数甚至属性,直接用Category或Extension去扩充不就更方便吗?
    我的理解:Category和Extension都是Objective-c和Swift特性,其中Category更是Objective-c作为动态语言特有特性,其他静态语言未必具备Category特性。Decorator模式适用与所有语言,不需要依赖语言特性。而Extension是编译时添加扩展,这么看Extension确实实现了装饰模式同样的功能,但按照上面的结构定义,并不属于装饰模式。

    总结:
    1:装饰模式下,不能对被装饰对象的类作任何修改
    2:装饰器和被装饰对象都需实现同一个函数(接口)

    以上是本人的理解,如果有不对的地方,欢迎指导交流。

    相关文章

      网友评论

          本文标题:装饰模式Decorator在iOS中的理解

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