美文网首页
设计模式

设计模式

作者: 小凡凡520 | 来源:发表于2018-09-16 17:09 被阅读4次
代理模式

当一个类的某些功能需要由别的类来实现、但是又不确定具体会是哪个类实现。

有两个主体:委托者(方法调用者)、代理者(方法实现者)。

观察者模式

观察者注册自己感兴趣的事件、被观察者不需要知道观察者的存在。

  • 通知
    UIKeyboardWillShowNotification、UIKeyboardWillHideNotification
  • KVO
    键值观察
单例模式

主要用于共享资源、并且确保该实例只被初始化一次。

工厂模式

专门定义一个类来负责创建其他类的实例、被创建的实例常常具有共同的父类(基于多态)。

工厂模式分为三种:简单工厂模式、工厂模式、抽象工厂模式。

  • 简单工厂模式
    由一个工厂类、根据传入的参数(通常是枚举)、动态的决定创建出哪一个产品类的实例。

      //AnimalHouse
      + (Animal *)animalWithType:(AnimalType)type {
          Animal *animal = nil;
          if (type == AnimalTypeDog) {//狗
              animal = [[Dog alloc] init];
          } else if (type == AnimalTypeCat) {
              animal = [[Cat alloc] init];
          } else if (type == AnimalTypeSheep) {
              animal = [[Sheep alloc] init];
          }
          return animal;
      }
    
      Animal *dog = [AnimalHouse animalWithType:AnimalTypeDog];
      [dog shout];
      Animal *cat = [AnimalHouse animalWithType:AnimalTypeCat];
      [cat shout];
      Animal *sheep = [AnimalHouse animalWithType:AnimalTypeSheep];
      [sheep shout];
    
  • 工厂模式
    相比简单工厂、将《工厂》也进行抽象处理。

      //DogHouse
      + (Animal *)animal {
          Animal *animal = [[Dog alloc] init];
          return animal;
      }
    
      Animal *dog = [DogHouse animal];
      [dog shout];
      Animal *cat = [CatHouse animal];
      [cat shout];
      Animal *sheep = [SheepHouse animal];
      [sheep shout];
    
  • 抽象工厂模式
    与工厂模式的基本模式相同。最大的区别就是工厂实例不在只生产一种产品、而是生产一个产品族。

      //AnimalHouse
      + (AnimalHouse *)houseWithType:(AnimalType)type {
          AnimalHouse *house = nil;
          if (type == AnimalTypeDog) {//狗
              house = [[DogHouse alloc] init];
          } else if (type == AnimalTypeCat) {
              house = [[CatHouse alloc] init];
          } else if (type == AnimalTypeSheep) {
              house = [[SheepHouse alloc] init];
          }
          return house;
      }
    
      //内部生成具体工厂`DogHouse `
      // AnimalHouse *animalHouse = [AnimalHouse houseWithType:AnimalTypeDog];
      //或者也可以直接使用具体工厂
      AnimalHouse *animalHouse = [[DogHouse alloc] init];
      //内部生成具体产品`MaleDog`
      MaleAnimal* maleAnimal = [animalHouse maleAnimal];
      //内部生成具体产品`femaleDog`
      FemaleAnimal* femaleAnimal = [animalHouse femaleAnimal];
      //使用该产品
      [maleAnimal shout];
      [femaleAnimal shout];

相关文章

  • 设计模式

    常用的设计模式有,单例设计模式、观察者设计模式、工厂设计模式、装饰设计模式、代理设计模式,模板设计模式等等。 单例...

  • 设计模式笔记汇总

    目录 设计原则 “依赖倒置”原则 未完待续... 设计模式 设计模式——策略模式 设计模式——装饰者模式 设计模式...

  • 设计模式

    《C#设计模式》 《C#设计模式》-设计模式概述 《C#设计模式》-面向对象设计原则 《C#设计模式》-单例模式 ...

  • 浅谈JS的一些设计模式

    @(书籍阅读)[JavaScript, 设计模式] 常见设计模式 设计模式简介 设计模式概念解读 设计模式的发展与...

  • 前端设计模式

    JS设计模式一:工厂模式jS设计模式二:单例模式JS设计模式三:模块模式JS设计模式四:代理模式JS设计模式五:职...

  • 设计模式之工厂模式

    设计模式之工厂模式 标签(空格分隔): 设计模式 工厂模式 设计模式的感念 设计模式的应用 工厂设计模式的产生 工...

  • JavaJavascript基础进阶(十七)JS中常用的设计模式

    单利设计模式、构造原型设计模式、发布订阅设计模式、promise设计模式 单利模式 构造原型设计模式 最贴近OOP...

  • 设计模式 - 目录

    设计模式01 - 单例模式 设计模式02 - 工厂模式 设计模式03 - 建造者模式 设计模式04 - 适配器模式...

  • 第1章 设计模式概述

    一、设计模式的概念 二、设计模式的历史 三、设计模式的要素 四、设计模式的分类 ■ 创建型设计模式 ■ 结构型设计...

  • iOS设计模式(3)适配器模式

    设计模式系列文章 《iOS设计模式(1)简单工厂模式》《iOS设计模式(2)工厂模式》《iOS设计模式(4)抽象工...

网友评论

      本文标题:设计模式

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