设计模式基础
设计模式可以分为三类:
- 创建型模式(Creational Patterns):关注对象的创建过程,以便于对象的实例化和组合,包括工厂模式、抽象工厂模式、单例模式、建造者模式和原型模式。
- 结构型模式(Structural Patterns):关注如何组合对象以形成更大的结构,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。
- 行为型模式(Behavioral Patterns):关注对象之间的通信和交互,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
学习设计模式的好处包括:
-
提高代码质量:设计模式是经过验证和优化的解决方案,能够帮助我们编写可读性更高、可维护性更好的代码。
-
提高开发效率:设计模式提供了一种标准化的解决方案,可以减少重复的代码编写工作,提高开发效率。
-
促进团队合作:设计模式提供了一种共同的语言和思维方式,能够促进团队之间的沟通和合作。
-
加强代码的可扩展性和可维护性:设计模式强调松耦合和可维护性,通过使用适当的设计模式可以使代码更易于扩展和修改。
-
提高代码的重用性:设计模式提供了一系列可复用的解决方案,可以帮助我们避免重复造轮子,提高代码的重用性。

设计模式的六大原则
设计模式的六大原则是:
- 单一职责原则(SRP,Single Responsibility Principle):一个类应该只有一个引起变化的原因,即一个类应该只有一个职责。这个原则强调了类的高内聚和低耦合。
- 开闭原则(OCP,Open-Closed Principle):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这个原则强调了通过扩展来实现变化,而不是通过修改原有代码来实现变化。
- 里氏替换原则(LSP,Liskov Substitution Principle):子类必须能够替换它们的基类,而不会影响程序的正确性。这个原则强调了子类必须保持基类的行为和约束。
- 依赖倒置原则(DIP,Dependency Inversion Principle):高层模块不应该依赖低层模块,它们应该依赖于抽象。这个原则强调了使用接口或抽象类作为依赖的类型,而不是具体的实现类。
- 接口隔离原则(ISP,Interface Segregation Principle):客户端不应该依赖它们不需要的接口。这个原则强调了将大接口拆分成多个小接口,以便只有需要的方法才能被客户端使用。
- 迪米特法则(LoD,Law of Demeter):一个对象应该对其他对象有尽可能少的了解,只与直接的朋友通信。这个原则强调了类之间的松耦合,减少对象之间的依赖关系。
单例模式
单例模式是一种设计模式,保证一个类只有一个实例,并提供全局访问点。
单例模式的特点包括:
- 一个类只有一个实例对象;
- 该实例对象由类内部创建,并对外提供访问方法;
- 该类只能被实例化一次;
- 提供对该实例的访问方法是静态方法。
单例模式常用于需要共享或控制资源访问的情况,例如数据库连接、线程池等。单例模式可以确保只有一个实例存在,从而避免资源的浪费和冲突。
实例
单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点。
以下是一个简单的Java代码示例,实现了单例模式:
public class Singleton {private static Singleton instance;private Singleton() {// 私有构造方法,防止外部实例化}public static Singleton getInstance() {if (instance == null) {// 当instance为空时,创建新的实例instance = new Singleton();}return instance;}
}
在上面的示例中,Singleton
类有一个私有的静态变量instance
,用于保存类的唯一实例。构造方法被声明为私有的,这意味着只能在类内部访问它,外部无法实例化该类。
getInstance
方法是一个公共的静态方法,用于获取Singleton
类的实例。在方法内部,首先检查instance
是否为null,如果为null,则创建一个新的实例并赋值给instance
变量,然后返回该实例。如果instance
已经存在,则直接返回它。
使用单例模式时,可以通过调用Singleton.getInstance()
来获取Singleton
类的实例:
Singleton singleton = Singleton.getInstance();
这样就确保了只有一个Singleton
实例存在,并且可以在程序的任何地方访问它。
总结
单例模式是一种创建型设计模式,它限制某个类只能创建一个实例,并提供全局访问的方式。单例模式的设计思想是确保一个类只有一个实例,并提供一个全局访问点来访问该实例。
单例模式的特点包括:
- 只有一个实例:单例模式确保只有一个唯一的实例存在。
- 全局访问点:单例模式提供一个全局访问点来获取该唯一实例。
单例模式的优点:
- 简化了对象的创建和访问:通过单例模式,我们可以简化对象的创建和访问过程,直接通过全局访问点获取该对象。
- 节省了系统资源:由于只有一个实例存在,可以节省系统资源的使用。
单例模式的缺点:
- 破坏了单一职责原则:由于单例模式的全局访问点,可能会导致该对象被多个模块访问和修改,从而破坏了单一职责原则。
- 可能引起线程安全问题:在多线程环境下,可能会引起线程安全问题,需要对单例对象进行进一步的处理来保证线程安全。