设计模式是很多程序员总结出来的优秀实践。曾经在刚开始写项目的时候学习过设计模式,在开发过程中,也主动或者被动的使用过。现在写代码虽说不会特意明确在用哪种设计模式,但潜移默化的写出来公认的优秀实践代码,毕竟看的比较清爽。
为什么再看一遍设计模式,主要有几个原因:
第一,很多优秀的源码基本都使用了设计模式,明确设计模式能够更好的看源码。
第二,很多中间件设计理念也是基于设计模式的,还有其他的语言,都有自己的设计优秀实践。对于我来说,设计模式始于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);
一个对象有不同的状态,根据状态不同,可能有不同的行为。
小结
虽然设计模式在企业的正式开发中并不能全部用到。但是,代码的整洁与编程思路的清晰条理是一个程序员所必须的。
领取专属 10元无门槛券
私享最新 技术干货