深入理解设计模式(Java)

68 阅读3分钟

前言

设计模式是软件开发中非常重要的一部分,它是一种被广泛使用的解决问题的方法。设计模式提供了一种通用的解决方案,可以帮助开发人员更好地组织和管理代码。在Java后端开发中,设计模式是必不可少的,因为它可以帮助我们更好地组织和管理代码,提高代码的可读性和可维护性。

设计模式的分类

设计模式可以分为三类:创建型模式、结构型模式和行为型模式。

创建型模式

创建型模式主要关注对象的创建过程,包括简单工厂模式、工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。

结构型模式

结构型模式主要关注对象的组合方式,包括适配器模式、桥接模式、组合模式、装饰器模式、外观模式、享元模式和代理模式。

行为型模式

行为型模式主要关注对象之间的通信方式,包括责任链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

单例模式

单例模式是创建型模式中最常用的一种模式,它保证一个类只有一个实例,并提供一个全局访问点。

饿汉式单例模式

饿汉式单例模式是最简单的一种单例模式,它在类加载时就创建了实例,因此线程安全。

public class Singleton {
    private static Singleton instance = new Singleton();

    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

懒汉式单例模式

懒汉式单例模式是在需要时才创建实例,因此需要考虑线程安全问题。

线程不安全的懒汉式单例模式

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

线程安全的懒汉式单例模式

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

    public static synchronized Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

双重检查锁定单例模式

双重检查锁定单例模式是在需要时才创建实例,并且考虑了线程安全问题。

public class Singleton {
    private volatile static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

工厂模式

工厂模式是创建型模式中的一种,它提供了一种创建对象的方式,而不需要暴露对象的创建逻辑。

简单工厂模式

简单工厂模式是最简单的一种工厂模式,它通过一个工厂类来创建对象。

public class SimpleFactory {
    public static Product createProduct(String type) {
        if ("A".equals(type)) {
            return new ProductA();
        } else if ("B".equals(type)) {
            return new ProductB();
        } else {
            return null;
        }
    }
}

public interface Product {
    void doSomething();
}

public class ProductA implements Product {
    @Override
    public void doSomething() {
        System.out.println("ProductA do something");
    }
}

public class ProductB implements Product {
    @Override
    public void doSomething() {
        System.out.println("ProductB do something");
    }
}

工厂方法模式

工厂方法模式是将工厂类抽象出来,每个产品对应一个工厂类。

public interface Factory {
    Product createProduct();
}

public class ProductAFactory implements Factory {
    @Override
    public Product createProduct() {
        return new ProductA();
    }
}

public class ProductBFactory implements Factory {
    @Override
    public Product createProduct() {
        return new ProductB();
    }
}

抽象工厂模式

抽象工厂模式是将工厂类抽象出来,每个工厂类可以创建多个产品。

public interface Factory {
    ProductA createProductA();
    ProductB createProductB();
}

public class ConcreteFactory implements Factory {
    @Override
    public ProductA createProductA() {
        return new ConcreteProductA();
    }

    @Override
    public ProductB createProductB() {
        return new ConcreteProductB();
    }
}

public interface ProductA {
    void doSomething();
}

public class ConcreteProductA implements ProductA {
    @Override
    public void doSomething() {
        System.out.println("ConcreteProductA do something");
    }
}

public interface ProductB {
    void doSomething();
}

public class ConcreteProductB implements ProductB {
    @Override
    public void doSomething() {
        System.out.println("ConcreteProductB do something");
    }
}

结语

设计模式是Java后端开发中非常重要的一部分,它可以帮助我们更好地组织和管理代码,提高代码的可读性和可维护性。在实际开发中,我们需要根据具体的情况选择合适的设计模式,以达到最佳的效果。