2.设计模式

一、设计模式

设计模式主要分为三大类:创建型、结构型、行为型

  • 创建型
    主要解决:对象的创建问题
    解耦:将创建和使用代码解耦(将对象的创建和使用分离,对用户隐藏实例的创建细节)
    常用:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式
    不常用:原型模式
  • 结构型
    主要解决:类或对象的组合或组装问题
    解耦:将不同功能代码解耦
    常用:代理模式、装饰者模式、桥接模式、适配器模式
    不常用:门面模式、组合模式、享元模式
  • 行为型
    主要解决:类或对象之间的交互问题
    解耦:将不同的行为代码解耦
    常用:观察者模式、模板模式、策略模式、责任链模式、迭代器模式、状态模式
    不常用:访问者模式、备忘录模式、命令模式、解释器模式、中介模式

参考教程1:ios设计模式
参考教程2:三种类型设计模式主要解决的问题


1.创建型
1.1 创建型:单例模式
1)概念:保证一个类只有一个实例,并提供一个全局访问点。
2)意义:节约系统资源(避免频繁创建销毁对象影响性能)
ps:比如说MySingleton类中实现了单例方法sharedInstance,那么调用sharedInstance所返回的对象都是同一个,但是如果我直接 [MySingleton new],那其实返回的不是单例对象,而是新建了一个对象,如果我想new创建的对象也是单例对象,那么可以在MySingleton类中重写new方法(在new方法中调用[MySingleton sharedInstance])

1.2 创建型:工厂模式(简单工厂、工厂方法、抽象工厂)
1)概念:

简单工厂:定义一个工厂类,根参数的不同返回不同类的实例,被创建的实例通常都有共同的父类
        违反开闭原则
        缺点:工厂类集中类所有实例的创建逻辑,指责过重,1⃣️万一出错,整个系统受影响2⃣️万一要增加,就要修改工厂类的逻辑
工厂方法:将产品的具体创建过程交给具体的工厂子类去完成(抽象工厂类中知声明方法,工厂子类实现方法)。
		遵守开闭原则
		缺点:添加新产品就需要编写新的具体产品类&具体工厂类,类的个数成对增加
抽象工厂:一个工厂子类可以生产多个产品
		违反开闭原则

总结:

  • 简单工厂模式实现产品创建和使用的分离,但是暴露了一个问题:工厂类职责太重。
  • 工厂方法模式实现每个工厂子类分别负责一种产品的创建,解决了简单工厂方法中工厂类的职责太重的问题,但是暴露了一个问题:每个工厂子类只能生产一种产品,导致系统中存在大量工厂子类,增加系统开销
  • 抽象工厂模式实现一个工厂可以生产多个产品,但是这导致违反开闭原则

2)意义:


2.结构型
2.1 结构型:代理模式
1)概念
2)意义:解决1)无法直接访问某个对象2)访问某个对象存在困难,保证客户端使用的透明性

目前我没懂的点:以下两件事和意义直接的联系
我现在用代理主要处理2件事:

  • 1)设置属性:比如说tableViewCell的num等
  • 2)设置事件:点击cell之后页面跳转

不知道对不对:实现cell类的时候,定义一个代理,声明一个方法(methodA),写cell逻辑的时候:如果发生A(比如说点击了cell)则执行methodA,但是这个methodA具体实现留给外面,为什么呢,因为层面不同,访问不到你需要的属性。比如说你在页面A中创建cell,点击cell的时候要基于A实现页面跳转,同理再页面B中,要基于B实现页面跳转,你在写cell类的时候,显然无法把页面A、B写入cell中,只能说在页面A中写逻辑的时候,传入页面A的参数----》这也就对应了意义中的“无法直接访问某个对象或访问困难”

2.2 结构型:装饰者模式
1)概念:替代继承的技术,通过无须定义子类的方式来给对象动态增加职责
2)意义:可以动态增加或删除对象的职责,符合开闭原则,就扩展功能而言,装饰模式比继承更加灵活

补充:比如分类,常问:分类和扩展的区别


3.行为型
3.1 行为型:观察者模式
1)概念:一个对象的值改变就告诉其他对象。可以一对多。
2)意义:用于描述对象之间的依赖关系,实现多个对象之间的联动。

参考教程:Java设计模式:23种设计模式全面解析(超级详细)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值