小话设计模式
一.布景
在我们平时开发进程中,遇到最多的问题基本上都是软件规划相关的一系列问题,如规划不合理,形成开发效率低下,保护和扩展性底,bug率高,那么这个时候优异的规划形式就至关重要了。
学习规划形式能够协助软件开发人员更好地规划和开发高质量的软件体系。规划形式是在软件开发中经过实践证明有用的最佳实践的总结,它们供给了一组可复用的处理计划,可协助开发人员处理常见的软件规划问题。
以下是规划形式对我们日常开发保护起到的一些优点:
- 进步代码质量:规划形式鼓舞开发人员运用一些经过验证的处理计划,这些计划已经在实践中证明是有用的。经过运用这些处理计划,开发人员能够编写愈加清晰、易于保护和扩展的代码。
- 进步代码复用性:规划形式供给了可重用的处理计划,使得开发人员能够在不同的项目和场景中运用这些计划来处理类似的问题。
- 更好的团队协作:规划形式供给了一种共同的语言和标准,使得团队成员能够更好地彼此交流和理解。
- 更快的开发速度:运用规划形式能够加速软件开发进程,由于它们供给了可重用的处理计划,使得开发人员能够更快地完成体系功用。
总归,学习规划形式能够协助软件开发人员愈加高效地工作,进步软件体系的质量和可保护性。下面就详细梳理下23种规划形式。
二.规划形式的6大规划准则
规划形式的6大规划准则,也被称为SOLID准则,它们是:
1. 单一责任准则(Single Responsibility Principle,SRP):
一个类应该只要一个引起它改动的原因。简单来说,便是一个类应该只要一种责任,不应该承担太多的责任,避免代码耦合性过高。
2. 敞开封闭准则(Open-Closed Principle,OCP):
一个软件实体(类、模块、函数等)应该对扩展敞开,对修改关闭。也便是说,在不修改原有代码的情况下,能够经过扩展来添加功用。
3. 里氏替换准则(Liskov Substitution Principle,LSP):
一切引用基类目标的当地,都能够用其子类目标替换,而不影响程序的正确性。也便是说,子类目标能够在程序中替换父类目标,而程序的行为不会发生改动。
4. 接口阻隔准则(Interface Segregation Principle,ISP):
客户端不应该依靠它不需要的接口。简单来说,便是要将一个庞大的接口拆分成多个小的、专门的接口,以便于客户端只需知道它需要运用的办法。
5. 依靠倒置准则(Dependency Inversion Principle,DIP):
高层模块不应该依靠底层模块,二者都应该依靠笼统接口;笼统接口不应该依靠详细完成,详细完成应该依靠笼统接口。简单来说,便是要面向接口编程,而不是面向完成编程。
6. 迪米特规律(Law of Demeter,LoD):
一个目标应该对其他目标保持最少的了解。简单来说,便是一个目标应该只与它直接的朋友进行交流,不与陌生人说话。这能够减少目标之间的耦合,进步代码的复用性和可保护性。
三.规划形式
能够分为三类:
1. 创立型形式(Creational Patterns):
用于创立目标的形式,这些形式将目标的创立和运用别离开来,然后进步了体系的灵活性和可扩展性。工厂办法形式、笼统工厂形式、单例形式、制作者形式和原型形式归于创立型形式。
2. 结构型形式(Structural Patterns):
用于描绘怎么将类或目标组合成更大的结构,然后构成更为杂乱的体系。这些形式关注目标的组合方式,以及类和目标之间的关系。适配器形式、桥接形式、组合形式、装饰者形式、外观形式、享元形式和署理形式归于结构型形式。
3. 行为型形式(Behavioral Patterns):
用于描绘目标之间的通信和协作,以及类和目标之间的责任分配。这些形式关注目标之间的交互方式,以及怎么完成目标的行为。模板办法形式、指令形式、迭代器形式、观察者形式、中介者形式、备忘录形式、解说器形式、状况形式、战略形式、责任链形式和拜访者形式归于行为型形式。
以下是23种常见的规划形式:
1. 工厂办法形式(Factory Method Pattern)
界说:界说了一个创立目标的接口,但由子类决定要实例化的类是哪一个。工厂办法让类把实例化推迟到子类。
2. 笼统工厂形式(Abstract Factory Pattern)
界说:供给一个接口,用于创立相关或依靠目标的家族,而不需要明确指定详细类。
3. 单例形式(Singleton Pattern)
界说:保证一个类只要一个实例,并供给全局拜访点。
4. 制作者形式(Builder Pattern)
界说:将一个杂乱目标的构建与它的表明别离,使得相同的构建进程能够创立不同的表明。
5. 原型形式(Prototype Pattern)
界说:用原型实例指定创立目标的种类,并且经过复制这些原型创立新的目标。
6. 适配器形式(Adapter Pattern)
界说:将一个类的接口转换成客户希望的另一个接口。适配器让原本接口不兼容的类能够合作无间。
7. 桥接形式(Bridge Pattern)
界说:将笼统部分与它的完成部分别离,使它们都能够独立地改动。
8. 组合形式(Composite Pattern)
界说:将目标组合成树形结构以表明“部分-全体”的层次结构。Composite使得用户对单个目标和组合目标的运用具有一致性。
9. 装饰者形式(Decorator Pattern)
界说:动态地给一个目标添加一些额定的责任。就添加功用来说,Decorator形式比较生成子类愈加灵活。
10. 外观形式(Facade Pattern)
界说:为子体系中的一组接口供给一个一致的界面,Facade形式界说了一个高档接口,这个接口使得这一子体系愈加简单运用。
11. 享元形式(Flyweight Pattern)
界说:运用共享技术有用地支撑很多细粒度的目标。
12. 署理形式(Proxy Pattern)
界说:为其他目标供给一种署理以控制对这个目标的拜访。
13. 模板办法形式(Template Method Pattern)
界说:界说一个操作中的算法的骨架,而将一些过程延迟到子类中。TemplateMethod使得子类能够不改动一个算法的结构即可重界说该算法的某些特定过程。
14. 指令形式(Command Pattern)
界说:将一个恳求封装为一个目标,然后使你可用不同的恳求对客户进行参数化;对恳求排队或记载恳求日志,以及支撑可撤销的操作。
15. 迭代器形式(Iterator Pattern)
界说:供给一种办法顺序拜访一个聚合目标中各个元素,而又不需暴露该目标的内部表明。
16. 观察者形式(Observer Pattern)
界说:界说目标间的一种一对多的依靠关系,当一个目标的状况发生改动时,一切依靠于它的目标都得到告诉并被自动更新。
17. 中介者形式(Mediator Pattern)
界说:用一个中介目标来封装一系列的目标交互。中介者使各目标不需要显示地彼此引用,然后使其耦合松散,并且能够独立地改动它们之间的交互。
18. 备忘录形式(Memento Pattern)
界说:在不损坏封装性的前提下,捕获一个目标的内部状况,并在该目标之外保存这个状况。这样以后就可将该目标康复到原先保存的状况。
19. 解说器形式(Interpreter Pattern)
界说:给定一个语言,界说它的一种表明,并界说一个解说器,这个解说器运用该表明来解说语言中的语句。
20. 状况形式(State Pattern)
界说:答应一个目标在其内部状况改动时改动它的行为。目标看起来好像修改了它的类。
21. 战略形式(Strategy Pattern)
界说:界说一系列的算法,把它们一个个封装起来,并且使它们可相互替换。本形式使得算法可独立于运用它的客户而改动。
22. 责任链形式(Chain of Responsibility Pattern)
界说:使多个目标都有机会处理恳求,然后避免恳求的发送者和接受者之间的耦合关系。将这些目标连成一条链,并沿着这条链传递该恳求,直到有一个目标处理它为止。
23. 拜访者形式(Visitor Pattern)
界说:表明一个作用于某目标结构中的各元素的操作。它使你能够在不改动各元素的前提下界说作用于这些元素的新操作。
以上是23种规划形式的介绍,在项目中还需要多去实践才能灵活贯穿。