个人技术分享

什么是设计模式
     设计模式是一种在软件设计过程中反复出现的问题和相应解决方案的描述。它是一种被广泛接受的经验总结,可以帮助开发人员解决常见的设计问题并提高代码的重用性、可维护性和可扩展性。

设计模式可以分为三类:

  1. 创建型模式(Creational Patterns):关注对象的创建过程,以便于对象的实例化和组合,包括工厂模式、抽象工厂模式、单例模式、建造者模式和原型模式。
  2. 结构型模式(Structural Patterns):关注如何组合对象以形成更大的结构,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。
  3. 行为型模式(Behavioral Patterns):关注对象之间的通信和交互,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。
为什么要学习设计模式
     

学习设计模式的好处包括:

  1. 提高代码质量:设计模式是经过验证和优化的解决方案,能够帮助我们编写可读性更高、可维护性更好的代码。

  2. 提高开发效率:设计模式提供了一种标准化的解决方案,可以减少重复的代码编写工作,提高开发效率。

  3. 促进团队合作:设计模式提供了一种共同的语言和思维方式,能够促进团队之间的沟通和合作。

  4. 加强代码的可扩展性和可维护性:设计模式强调松耦合和可维护性,通过使用适当的设计模式可以使代码更易于扩展和修改。

  5. 提高代码的重用性:设计模式提供了一系列可复用的解决方案,可以帮助我们避免重复造轮子,提高代码的重用性。

设计模式分类

设计模式的六大原则

    

设计模式的六大原则是:

  1. 单一职责原则(SRP,Single Responsibility Principle):一个类应该只有一个引起变化的原因,即一个类应该只有一个职责。这个原则强调了类的高内聚和低耦合。
  2. 开闭原则(OCP,Open-Closed Principle):软件实体(类、模块、函数等)应该对扩展开放,对修改关闭。这个原则强调了通过扩展来实现变化,而不是通过修改原有代码来实现变化。
  3. 里氏替换原则(LSP,Liskov Substitution Principle):子类必须能够替换它们的基类,而不会影响程序的正确性。这个原则强调了子类必须保持基类的行为和约束。
  4. 依赖倒置原则(DIP,Dependency Inversion Principle):高层模块不应该依赖低层模块,它们应该依赖于抽象。这个原则强调了使用接口或抽象类作为依赖的类型,而不是具体的实现类。
  5. 接口隔离原则(ISP,Interface Segregation Principle):客户端不应该依赖它们不需要的接口。这个原则强调了将大接口拆分成多个小接口,以便只有需要的方法才能被客户端使用。
  6. 迪米特法则(LoD,Law of Demeter):一个对象应该对其他对象有尽可能少的了解,只与直接的朋友通信。这个原则强调了类之间的松耦合,减少对象之间的依赖关系。

     

单例模式  

     

单例模式是一种设计模式,保证一个类只有一个实例,并提供全局访问点。

单例模式的特点包括:

  1. 一个类只有一个实例对象;
  2. 该实例对象由类内部创建,并对外提供访问方法;
  3. 该类只能被实例化一次;
  4. 提供对该实例的访问方法是静态方法。

单例模式常用于需要共享或控制资源访问的情况,例如数据库连接、线程池等。单例模式可以确保只有一个实例存在,从而避免资源的浪费和冲突。

   实例

       

单例模式是一种设计模式,用于确保一个类只有一个实例,并提供全局访问点。

以下是一个简单的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实例存在,并且可以在程序的任何地方访问它。

       

总结 

    单例模式是一种创建型设计模式,它限制某个类只能创建一个实例,并提供全局访问的方式。单例模式的设计思想是确保一个类只有一个实例,并提供一个全局访问点来访问该实例。

单例模式的特点包括:

  1. 只有一个实例:单例模式确保只有一个唯一的实例存在。
  2. 全局访问点:单例模式提供一个全局访问点来获取该唯一实例。

单例模式的优点:

  1. 简化了对象的创建和访问:通过单例模式,我们可以简化对象的创建和访问过程,直接通过全局访问点获取该对象。
  2. 节省了系统资源:由于只有一个实例存在,可以节省系统资源的使用。

单例模式的缺点:

  1. 破坏了单一职责原则:由于单例模式的全局访问点,可能会导致该对象被多个模块访问和修改,从而破坏了单一职责原则。
  2. 可能引起线程安全问题:在多线程环境下,可能会引起线程安全问题,需要对单例对象进行进一步的处理来保证线程安全。