"GOF设计模式笔记包含了对GOF23种设计模式的详细解析,强调了面向对象设计的基本原则,如SRP、LSP、OCP、ISP、DIP和LoD,并提供了创建型模式的实例,如单例模式的不同实现方式以及工厂模式的应用场景。"
GOF设计模式是软件工程中的经典之作,它总结了23种被广泛接受的设计模式,这些模式在实际开发中起到了重大的指导作用。设计模式基于面向对象设计的基本原则,包括:
1. 单一职责原则(SRP):一个类应该只有一个引起它变化的原因,这有助于保持类的职责清晰,降低耦合度。
2. 里氏替换原则(LSP):任何基类可以出现的地方,其子类也应该可以出现,保证了代码的可扩展性和可替换性。
3. 开闭原则(OCP):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭,这意味着我们可以添加新的功能而无需改动现有的代码。
4. 接口隔离原则(ISP):客户端不应该被迫依赖它不需要的方法,提倡将庞大的接口拆分为更小的、更具体的接口。
5. 依赖倒转原则(DIP):高层次的模块不应该依赖低层次的模块,两者都应该依赖其抽象,使得系统更加灵活,易于维护和测试。
6. 迪米特法则(LoD):也称为最少知识原则,每个对象都应当尽量减少与其他对象的交互,以减少耦合。
在创建型设计模式中,单例模式用于确保一个类只有一个实例,常见的实现包括懒汉式、饿汉式、双重检查锁式、静态内部类式和枚举单例。其中,懒汉式提供延迟加载,但线程安全需要额外处理;饿汉式在类加载时即初始化,线程安全但可能导致不必要的资源消耗;双重检查锁式利用volatile关键字来实现线程安全,但存在潜在问题;静态内部类式结合了延迟加载和线程安全;枚举单例既线程安全又无法被反射或反序列化破坏。
工厂模式则是用来创建对象的一种方法,包括简单工厂模式、工厂方法模式和抽象工厂模式。简单工厂模式提供一个静态方法来创建对象,但扩展性较差;工厂方法模式通过定义工厂接口和实现不同工厂类来支持扩展;抽象工厂模式关注的是多个产品族的创建,可以在不修改已有代码的情况下添加新的产品族。
这些模式在实际应用中非常常见,例如JDK的Calendar类通过getInstance方法使用工厂模式创建实例,JDBC连接的获取、Hibernate的Session创建、Spring的bean对象管理、XMLDocumentBuilderFactory的配置以及Class.newInstance方法的调用等都体现了设计模式的使用。理解并掌握这些模式对于提升软件设计质量和可维护性至关重要。