Java设计模式三大类

在软件开发过程中,设计模式是一种解决常见问题的通用方法。设计模式可以帮助我们更好地组织代码、降低耦合度、提高代码复用性。在Java中,设计模式通常被分为三大类:创建型模式、结构型模式和行为型模式。

创建型模式

创建型模式主要关注对象的创建过程,包括对象的实例化、初始化和配置。在创建型模式中,最常见的是单例模式、工厂模式和建造者模式。

单例模式

单例模式保证一个类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式通常使用静态变量、静态方法或枚举。以下是一个简单的单例模式示例:

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

工厂模式

工厂模式是一种创建对象的设计模式,它提供一个接口来创建对象,但具体的实现类由子类决定。工厂模式可以根据不同的条件生产不同的对象。以下是一个简单的工厂模式示例:

public interface Shape {
    void draw();
}

public class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw a circle.");
    }
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Draw a rectangle.");
    }
}

public class ShapeFactory {
    public Shape getShape(String shapeType) {
        if ("circle".equalsIgnoreCase(shapeType)) {
            return new Circle();
        } else if ("rectangle".equalsIgnoreCase(shapeType)) {
            return new Rectangle();
        }
        return null;
    }
}

建造者模式

建造者模式将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。建造者模式可以一步一步地构建一个复杂的对象。以下是一个简单的建造者模式示例:

public class User {
    private String name;
    private int age;

    private User(Builder builder) {
        this.name = builder.name;
        this.age = builder.age;
    }

    public static class Builder {
        private String name;
        private int age;

        public Builder name(String name) {
            this.name = name;
            return this;
        }

        public Builder age(int age) {
            this.age = age;
            return this;
        }

        public User build() {
            return new User(this);
        }
    }
}

结构型模式

结构型模式主要关注类和对象的组合,以形成更大的结构。在结构型模式中,最常见的是适配器模式、装饰器模式和代理模式。

适配器模式

适配器模式将一个接口转换成客户希望的另一个接口。适配器模式可以让不兼容的接口能够一起工作。以下是一个简单的适配器模式示例:

public interface Target {
    void request();
}

public class Adaptee {
    public void specificRequest() {
        System.out.println("Specific request.");
    }
}

public class Adapter implements Target {
    private Adaptee adaptee = new Adaptee();

    @Override
    public void request() {
        adaptee.specificRequest();
    }
}

装饰器模式

装饰器模式允许向一个现有的对象添加新的功能,同时又不改变其结构。装饰器模式可以动态地扩展一个对象的功能。以下是一个简单的装饰器模式示例:

public interface Component {
    void operation();
}

public class ConcreteComponent implements Component {
    @Override
    public void operation() {
        System.out.println("Concrete component operation.");
    }
}

public class Decorator implements Component {
    private Component component;

    public Decorator(Component component) {
        this.component = component;
    }

    @Override
    public void operation() {
        component.operation();
    }
}

代理模式

代理模式为其他对象提供一种代理以控制对这个