常用的设计模式 介绍

本文将会用最直白的话记录常用的设计模式的 思路,但是基本不会给出实现代码。

MVC 模式

MVC (Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式。他的核心思路是在后端已经将代码的数据全部处理好,然后全部推送到前端进行数据的展示,前端只负责数据的显示,并不关心具体的业务逻辑。(这个和 三层架构说起来有点像  有空我会专门总结一篇二者的区别)


工厂模式

应用背景

工厂类负责创建的对象比较少;

客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。

工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑使用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量。


消费者模式

生产者消费者模式并不是GOF提出的23种设计模式之一,23种设计模式都是建立在面向对象的基础之上的,但其实面向过程的编程中也有很多高效的编程模式,生产者消费者模式便是其中之一,它是我们编程过程中最常用的一种设计模式。

生产者消费者模式的原理描述:
(1)生产者仅仅在仓储未满时候生产,仓满则停止生产。
(2)消费者仅仅在仓储有产品时候才能消费,仓空则等待。
(3)当消费者发现仓储没产品可消费时候会通知生产者生产。
(4)生产者在生产出可消费产品时候,应该通知等待的消费者去消费。


适配器模式

将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

换句话就是:原本提供的接口  我们无法使用,那么我们就做个中间层,让中间层调用对方的接口,我们直接调用中间层就可以了


facade模式 //外观模式

为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

换句话就是:底层有很多方提供的接口,使用某一个方法的时候需要去寻找到特定的接口,这样就比较麻烦,所以做一个高层的接口把他们都给统一了。


观察者模式//Observer

有时又被称为发布-订阅模式,比较直观的一种是使用一种“注册——通知——撤销注册”的形式。

换句话就是:观察者订阅了某一种消息,然后到被观察者触发了某一个事件之后,观察者就相应的做一些列动作。这个类似于C#里边的事件。


单例模式//Singleton 

这是用的最多的模式,每一个正式的软件都要用它。全局配置、唯一资源,它用来确保只产生一个实例,并提供一个访问它的全局访问点。


状态模式//State

不同的状态,不同的行为;或者说,每个状态有着相应的行为.

换句话就是:当一个对象的状态属性变了之后,那么他可以调用的方法也都变了。比如对象是蝌蚪的时候有哪几种方法可以用,对象是青蛙的时候又有哪些方法可以用


装饰模式//Decorator

又叫油漆工模式,动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。

换句话就是:想要在现有的对象上增加一些新的属性和功能,比如new 出来一个跑车的类,这时候我们可能要往跑车里边加香水这个对象了,于是可以在香水的类里边写一个   以跑车为参数的方法,进行修饰跑车


建造者模式//Builder

在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。

换句话说就是:

比如你去kcf 订了一份 kfc 豪华晚餐,然后对服务员说  我要豪华晚餐,服务员这时候回头对三个厨师说  一份可乐,一份鸡翅 ,一份汉堡,然后三个厨师做好了之后摆在盘子上,然后服务员对你说 做好了,快拿去吃吧。kfc的这种模式就相当于是建造者模式,他不是由服务员自己 哼哧哼哧的去把东西都做好了然后给你,而是将一个大份的东西,交给多个人去做,做好了之后再统一给你。


策略模式//Strategy

它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。

换句话就是:我们解题的时候,有很多解题的方法,宽泛的来说有以下几种,一步一步的把题目给解答出来,还有使用排除法,还有穷举法,还有可以把答案背下来(原样输出),还可以去看下别人的做法。总之有非常多的做法,但是我们要针对不同的题目使用不同的方法,而不能使用单一的某一种方法,比如写语文作业的时候,应该没有人用排除法。


原型模式//(Prototype Pattern)

在软件系统中,有时候面临的产品类是动态变化的,而且这个产品类具有一定的等级结构。这时如果用工厂模式,则与产品类等级结构平行的工厂方法类也要随着这种变化而变化,显然不大合适。

换句话就是:比如要生产每个人的学准生证,我们不可能找到厂家说,每个学生单独有一条生产线来生产这个学生大学的学生证,而是生产一大堆模子(也就是还没填写名字年龄的这种原始状态的学生证)然后交到班主任手里,哪位学生来领学生证,或者来补办,然后老师就把上边的名字 填好了,贴好这个学生的照片,然后再发到学生手里。


待续ing

原文地址:https://www.cnblogs.com/jilodream/p/4219821.html