设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。
软件设计中要遵循以下6大原则:
开闭原则:对扩展开放,对修改关闭
里氏代换原则:如果调用的是父类的话,那么换成子类也完全可以运行
依赖倒转原则:抽象不应该依赖于细节,细节应当依赖于抽象。
接口隔离原则:定制服务的例子,每一个接口应该是一种角色,不多不少,不干不该干的事,该干的事都要干
合成/聚合复用原则:要尽量使用合成/聚合,尽量不要使用继承
最少知识原则:好像不要和陌生人说话,即一个对象应对其他对象有尽可能少的了解。
设计模式有23种,常见的有单例模式、原型模式、代理模式、工厂模式等等。
单例模式就是一个类只能创建出一个对象。有懒汉式模式和饿汉式模式,懒汉式就是在公共访问方法判断对象是否存在,不存在则创建,下次不再创建,它会有线程安全问题,一般使用双重检测锁解决。饿汉式就是类装载时就实例化对象,它不会涉及线程安全问题,但性能较差,如果这个对象用不了,白白浪费内存空间。
原型模式与单例模式正好相反,它通过克隆创建多个对象;
代理模式有静态代码和动态代表,静态代理就是加了一层封装而已。动态代码要通过反射或字节码来现实,JDK动态代理必须依靠接口才可以代理,第三方动态代理工具(例如CGLIB)一般依靠字节码工具ASM来完成。
工厂模式是客户知道需要什么对象但不知道怎么创建对象,可以使用工厂来创建。它有一个描述创建对象的接口、工厂类和创建对象方法、配置、客户类等多个角色。