详细介绍请看这里
https://github.com/ochococo/Design-Patterns-In-Swift
创建型模式
创建型模式是处理对象创建的设计模式,试图根据实际情况使用合适的方式创建对象。基本的对象创建方式可能会导致设计上的问题,或增加设计的复杂度。创建型模式通过以某种方式控制对象的创建来解决问题。
根据不同的实际情况、场景或业务创建适合的对象
1、单例模式
单例对象的类必须保证只有一个实例存在。许多时候整个系统只需要拥有一个的全局对象,这样有利于我们协调系统整体的行为
对于Angular单例服务,服务还是那个服务 注意服务依赖注入与组件供应商
2、工厂方法
定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类。工厂方法让类的实例化推迟到子类中进行。
3、抽象工厂
抽象工厂模式提供了一种方式,可以将一组具有同一主题的单独的工厂封装起来。在正常使用中,客户端程序需要创建抽象工厂的具体实现,然后使用抽象工厂作为接口来创建这一主题的具体对象。
工厂模式 根据不同的参数生产不同的产品
工厂方法模式 不同的工厂 相同的行为创建不同的产品
抽象工厂 与工厂方法模式不同之处是 可以创建多种产品
4、原型
通过“复制”一个已经存在的实例来返回新的实例,而不是新建实例。被复制的实例就是我们所称的“原型”,这个原型是可定制的。
也称克隆模式 就是深拷贝一份对象
5、生成器
一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性)的对象。
行为型模式
在软件工程中, 行为型模式为设计模式的一种类型,用来识别对象之间的常用交流模式并加以实现。如此,可在进行这些交流活动时增强弹性。
1、责任链模式
责任链模式在面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。
具体处理者包含下级或上级或关联对象的引用或指针 处理不掉的任务会传递给上级或下级或关联对象处理
2、命令模式
命令模式是一种设计模式,它尝试以对象来代表实际行动。命令对象可以把行动(action) 及其参数封装起来,于是这些行动可以被:
重复多次
取消(如果该对象有实现的话)
取消后又再重做
游戏机方向键
3、解释器
给定一种语言,定义他的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中句子。
对对象或表达式进行分析或解释,根据不同的解释结果做不同的行为
4、迭代器
迭代器模式可以让用户通过特定的接口巡访容器中的每一个元素而不用了解底层的实现。
5、中介者
用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互。
对象之间交互通过中间对象交互,类似中介 P层
6、备忘录
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存的状态
记住登录密码
7、观察者
一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知
8、状态模式
在状态模式中,对象的行为是基于它的内部状态而改变的。 这个模式允许某个类对象在运行时发生改变。
App状态等
9、策略模式
对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。策略模式:
定义了一族算法(业务规则);
封装了每个算法;
这族的算法可互换代替(interchangeable)。
10、访问者模式
封装某些作用于某种数据结构中各元素的操作,它可以在不改变数据结构的前提下定义作用于这些元素的新的操作。
结构型模式
在软件工程中结构型模式是设计模式,借由一以贯之的方式来了解元件间的关系,以简化设计。
1、适配器
适配器模式有时候也称包装样式或者包装(wrapper)。将一个类的接口转接成用户所期待的。一个适配使得因接口不兼容而不能在一起工作的类工作在一起,做法是将类自己的接口包裹在一个已存在的类中。
多一层类的访问, 不兼容的类工作在一起
2、桥接
桥接模式将抽象部分与实现部分分离,使它们都可以独立的变化。
3、组合
将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
多个对象的相同行为可以组合在一起一起调用
4、修饰
修饰模式,是面向对象编程领域中,一种动态地往一个类中添加新的行为的设计模式。 就功能而言,修饰模式相比生成子类更为灵活,这样可以给某个对象而不是整个类添加一些功能。
5、外观
外观模式为子系统中的一组接口提供一个统一的高层接口,使得子系统更容易使用。
6、享元
使用共享物件,用来尽可能减少内存使用量以及分享资讯给尽可能多的相似物件;它适合用于当大量物件只是重复因而导致无法令人接受的使用大量内存。
7、保护代理模式
在代理模式中,创建一个类代表另一个底层类的功能。 保护代理用于限制访问。
8、 虚拟代理
在代理模式中,创建一个类代表另一个底层类的功能。 虚拟代理用于对象的需时加载。
抽离API、分层、扩展、继承、传递参数动态创建、传递对象、更改属性、更改状态等 手法可以实现设计模式,没有完美的设计模式,设计模式也有缺点,要根据自己的使用场景、业务逻辑选择或创造合适的设计模式才能达到方便的效果。因使用了设计模式,简单的逻辑会变的复杂化,复杂的逻辑会变的更清晰,不要一味的强制使用设计模式、架构模式,要由主到次的使用。核心模块、复杂模块要精心设计,简单页面、不常访问页面要快速开发,在迭代优化。