IOS Design Patterns декоратор

Во-первых, что декоративный узор

  • Schema Definition
    Декоратор содержит все интерфейсы и ссылки декораторов, метод полностью ссылки назвать свой собственный путь, чтобы добавить новые функции декоратора подкласс.
    Комментарий:
    Категория Не переписывайте метод украсили объекты или изменить поведение объектов украшения, не соответствует шаблону декоратора, только применимой специальной сцену. Классификация используется в основном для расширения класса декоратор методов и свойств
  • сценарий спроса
    Статические расширения библиотеки. Не изменяю (исходный класс), не наследования, динамические расширения.
    • Я не знаю, оригинальные детали реализации класса, обеспечивают только интерфейс, динамические расширения.
    • Я не хочу, чтобы иметь больше подклассов, не хочет, чтобы добавить функциональность путем наследования.
    • Динамическое расширение функции объекта.
    • Должно содержать ссылку на объект содержит экземпляр класса украшается.

Во-вторых, схема конфигурации орнамент

  Реализация:

  1. определяется декоратор, и все методы определены в .h ливневой канализации в .h класса декоратора (метод работы может быть изменен, чтобы добавить) и ссылку на класс декоратор.
  2. С объектом декоратора вызывает метод, то есть выводить результаты, которые мы хотим в классе декоратора.
  3. Если вы хотите расширить декоратор, классифицируют по способу, который не может быть разрушен, декоратор родной логики.  

В-третьих, образец кода

  • Target (Декоратор)
    • Target.h
      целевая @interface: NSObject
       / * * 
       * количество монет 
       * / 
      @property (неатомические, ASSIGN) NSInteger МОНЕТКА; 
      
      / * * 
       * вертикальные и горизонтальные операции 
       * / 
      - ( пустоты ) до;
      
       - ( пустоты ) Вниз;
      
       - ( недействительный ) влево;
      
       - ( недействительный ) право;
       / * * 
       * операция выбора начальных 
       * / 
      - ( пустоты ) выберите ;
       - ( недействительный ) старт;
       / * * 
       * кнопку управления A + B из 
       * / 
      - ( пустот ) Commanda;
       - ( пустоты ) commandB; 
      @end
    • Target.m
      @implementation Target
      
       - ( аннулируются ) до { 
          NSLog ( @ " вверх " ); 
      }
      
       - ( аннулируются ) вниз { 
          NSLog ( @ " вниз " ); 
      }
      
       - ( аннулируются ) левый { 
          NSLog ( @ " влево " ); 
      }
      
       - ( недействительными ) {право 
           NSLog ( @ " вправо " ); 
      }
      
       - ( аннулируются ) выберите { 
          
          NSLog ( @ " выберите " ); 
      }
      
       - ( недействительными) начать { 
          
          NSLog ( @ " начать " ); 
      }
      
       - ( аннулируются ) commandA { 
          
          NSLog ( @ " commandA " ); 
      }
      
       - ( аннулируются ) commandB { 
          
          NSLog ( @ " commandB " ); 
      } 
      
      @end  
  • Декоратор (декоратор)
    • Decorator.h
      #import <Foundation / Foundation.h> 
      
      NS_ASSUME_NONNULL_BEGIN 
      
      @interface декоратор: в NSObject 
      
      #pragma Марка - метод декоратор 
      
      @property (неатомической) NSInteger МОНЕТЫ;
      
       - ( ничтожной ) вверх;
       - ( ничтожной ) Вниз;
       - ( ничтожной ) слева ;
       - ( недействительное ) право;
       - ( аннулируется ) ВЫБРАТЬ ;
       - ( аннулируется ) Start;
       - ( аннулируется ) Commanda;
       - ( аннулируется ) commandB; 
      
      #pragma Марки - следующий декоративные функции вновь добавленных объекты / * * 
       * оставшиеся несколько команда * / 
      @property (неатомический,
      
      
       Readonly ) NSInteger Lives; 
      
      / * * 
       * чит (вверх и вниз по вертикали около ABAB) 
       * / 
      - ( аннулируются ) Чит; 
      
      @end
    • Decorator.m
      #import " Decorator.h " 
      #import " Target.h " 
      @interface декоратор () 
      
      @property (неатомическая, сильная) Целевая цель; // держать объект класса декоратора 
      
      @end 
      
      @implementation декоратор 
      
      #pragma Марк - Initialization 
      
      - ( instanceType) инициализация { 
          
          IF (Self = [Супер INIT]) { 
              
              // декоративный объект содержит ссылку на реальный объект 
              self.target = [мишень нового новый ]; 
          } 
          
          вернуть себе; 
      } 
      
      
      #pragma Марки - пусть реальный объект соответствует эталонному выполнению метод 
      
      - ( недействительными ) {вверх 
          
          [_target вверх]; 
      }
      
       - (недействительными ) вниз { 
          
          [_target вниз]; 
      }
      
       - ( пустоты ) левый { 
          
          [_target влево]; 
      }
      
       - ( недействительными ) вправо { 
          [_target вправо]; 
      }
      
       - ( недействительными ) выберите { 
          [_target выбора ]; 
      }
      
       - ( пустоты ) начало { 
          
          [_target пуск]; 
      }
      
       - ( недействительными ) commandA { 
          
          [_target commandA]; 
      }
      
       - ( недействительными ) commandB { 
          
          [_target commandB]; 
      } 
      
      #Pragma марка -装饰器新添加的方法
      - ( недействительными) обмануть { 
          [_target вверх]; 
          [_target вниз]; 
          [_target вверх]; 
          [_target вниз]; 
          [_target влево]; 
          [_target право]; 
          [_target влево]; 
          [_target право]; 
          [_target commandA]; 
          [_target commandB]; 
          [_target commandA]; 
          [_target commandB]; 
      } 
      
      @Synthesize живет = _lives;
      - (NSInteger) живет {
           // 相关处理逻辑
          возврата  10 ; 
      } 
      
      @end

В-четвертых, преимущества и недостатки орнаментами

  • Преимущество
    в случае определенных классов без изменения бизнес - логики и функции для расширения существующего метода

Пять, демо

  декоратор

рекомендация

отwww.cnblogs.com/lxlx1798/p/11483200.html