清华大神详解,这么详细的设计模式不收藏可惜了

设计模式是很多程序员总结出来的优秀实践。曾经在刚开始写项目的时候学习过设计模式,在开发过程中,也主动或者被动的使用过。现在写代码虽说不会特意明确在用哪种设计模式,但潜移默化的写出来公认的优秀实践代码,毕竟看的比较清爽。

为什么再看一遍设计模式,主要有几个原因:

第一,很多优秀的源码基本都使用了设计模式,明确设计模式能够更好的看源码。

第二,很多中间件设计理念也是基于设计模式的,还有其他的语言,都有自己的设计优秀实践。对于我来说,设计模式始于java,不止于java。

第三,有了这种规范,可以更好的和他人沟通,言简意赅。

设计模式的六大原则:

单一职责原则,对扩展开放,对修改关闭。

开闭原则,类的职责单一。

里氏替换原则,子类可以透明替换父类。

依赖倒置原则,面向接口编程。

接口隔离原则,接口的职责要单一。

迪米特法则,降低耦合。

六大原则是基础,所有的设计模式都是基于这六大设计原则进行设计编程的。

二十三种设计模式

创建型:

单件模式(Singleton Pattern);

保证一个类仅有一个实例,并提供一个访问它的全局访问点。

减少了内存的开销,避免对资源的多重占用。

抽象工厂(Abstract Factory);

抽象工厂模式主要设计产品组的概念,就是某一个工厂生产出配套的一系列产品。

建造者模式(Builder);

分离复杂对象的构建和表示。

同样的构建过程可以创建不同的表示。

工厂方法模式(Factory Method);

任何可以产生对象的方法或类,都可以称之为工厂。

工厂可以灵活的控制生产过程,定制权限、修饰、日志。

原型模式(Prototype);

原型模式用的比较少,用于创建重复对象。需要实现Cloneable 可以选择重写clone()方法。clone分为浅克隆和深克隆。

结构型:

适配器模式(Adapter Pattern);

让两个不兼容的东西可以一起工作。

桥接模式(Bridge Pattern);

用于抽象化和实现化的解耦。

提高了代码的拓展性,并且可以实现代码的动态切换。

装饰模式(Decorator Pattern);

代理模式是原对象做不了那件事,必须让代理对象去做,主导侧重于代理对象

组合模式(Composite Pattern);

组合模式是将存在某种包含关系的数据组织在一起,典型的例子就是树状结构。

外观模式(Facade Pattern);

把内外关系封装起来,对外提供的接口封装到一个类里。由这一个类管理其他的类,对外提供一个统一的接口。这就是门面模式。

享元模式(Flyweight Pattern);

尽可能的让用户复用已经有的对象,从而避免造成反复创建对象的资源浪费。

代理模式(Proxy Pattern);

代理就是,一个对象辅助另一个对象去做某件事,同时还可以增加一点辅助功能。

行为型:

模板方法(Template Method);

一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。

命令模式(Command Pattern);

将请求以命令的形式包裹在对象中,并传递给对象,调用对象寻找到处理该命令的合适的对象,并将该命令传递给相应的对象,该对象执行。

迭代器模式(Iterator Pattern);

提供一个方法,可以顺序访问一个对象内部的各个元素,不需要知道内部构造。现在基本很少自己实现迭代器了,基本成熟的框架或者强大的JDK都会给出访问的方法。

进一步封装对象内部的结构,让行为和结构想耦合。

观察者模式(Observer Pattern);

多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。

解释器模式(Interpreter Pattern);

构建一种翻译方式,将某种语言或描述翻译成我们很好理解的语言或者描述。

中介者模式(Mediator Pattern);

各部门内部之间的关系也很复杂时,想添加一个新的部门进来,又要和其他部门打交道。这是我们可以抽出一个部分,让它和其他的部门打交道。这种模式叫调停者。

职责链模式(Chain of Responsibility Pattern);

责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。

备忘录模式(Memento Pattern);

在不破坏对象本身结构的情况下,记录对象的一个状态,合适的时候可以恢复到这种状态。

策略模式(Strategy Pattern);

此接口强行对实现它的每个类的对象进行整体排序。

实现此接口的对象可以用作有序映射中的键或有序集合中的元素,无需指定比较器。

访问者模式(Visitor Pattern);

在结构不变的情况下动态改变对于内部元素的动作。

只适合结构固定的程序设计,当程序由增加删除组件的操作时,visitor设计模式是不适合的。所以Visitor会被使用在编译器和语法分析中。

状态模式(State Pattern);

一个对象有不同的状态,根据状态不同,可能有不同的行为。

小结

虽然设计模式在企业的正式开发中并不能全部用到。但是,代码的整洁与编程思路的清晰条理是一个程序员所必须的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191019A0CZEW00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券