当前位置: 首页 > 图灵资讯 > 技术篇> 重学Java设计模式

重学Java设计模式

来源:图灵教育
时间:2024-01-16 13:13:52

重学Java设计模式

设计模式是软件开发中经验总结和重用的基础,为解决常见问题提供了解决方案。Java作为一种常用的编程语言,也有许多常用的设计模式可以用来提高代码的可读性、可维护性和可扩展性。本文将介绍几种常见的Java设计模式,并提供相应的代码示例。

单例模式(Singleton Pattern)

单例模式确保一个类只有一个例子,并提供一个全球访问点。在实际应用中,我们经常需要使用单例模式来管理资源,如数据库连接池、线程池等。

以下是一个简单的单例模式代码示例:

public class Singleton {    private static Singleton instance;        private Singleton() {        // 私有结构方法    }        public static Singleton getInstance() {        if (instance == null) {            synchronized (Singleton.class) {                if (instance == null) {                    instance = new Singleton();                }            }        }        return instance;    }}

在上述代码中,私有结构方法阻止了直接实例化,而静态方法getInstance()通过双重检查锁(double-checked locking)实例的唯一性得到了保证。

工厂模式(Factory Pattern)

工厂模式用于创建对象而不暴露对象的创建逻辑。它通过定义工厂类来创建对象,并返回其接口或父类。这样,我们就可以统一管理对象的创建过程,减少耦合。

以下是一个简单的工厂模式代码示例:

public interface Shape {    void draw();}public class Rectangle implements Shape {    @Override    public void draw() {        System.out.println("画一个矩形");    }}public class Circle implements Shape {    @Override    public void draw() {        System.out.println("画一个圆形");    }}public class ShapeFactory {    public static Shape getShape(String shapeType) {        if (shapeType == null) {            return null;        }        if (shapeType.equalsIgnoreCase("Rectangle")) {            return new Rectangle();        } else if (shapeType.equalsIgnoreCase("Circle")) {            return new Circle();        }        return null;    }}

在上述代码中,Shape接口定义了draw()方法,RectangleCircle类实现了界面,并重写了它draw()方法。ShapeFactory根据传入的类别shapeType创建相应对象的参数。

观察者模式(Observer Pattern)

观察者模式定义了对象之间的一对多依赖关系,当对象状态发生变化时,所有依赖者都会被通知并自动更新。

以下是观察者模式的简单代码示例:

import java.util.ArrayList;import java.util.List;public interface Observer {    void update();}public class ConcreteObserver implements Observer {    @Override    public void update() {        System.out.println("收到通知,更新状态");    }}public class Subject {    private List<Observer> observers = new ArrayList<>();        public void attach(Observer observer) {        observers.add(observer);    }        public void detach(Observer observer) {        observers.remove(observer);    }        public void notifyObservers() {        for (Observer observer : observers) {            observer.update();        }    }}

在上述代码中,Observer接口定义了update()方法,ConcreteObserver类实现了界面,并重写了它update()方法。Subject类维护观察者列表,并提供增加、删除和通知观察者的方法。

类图

以下是本文介绍的三种设计模式的类图:

classDiagram    class Singleton {        - instance: Singleton        + getInstance(): Singleton    }    class Shape {        + draw()    }    class Rectangle {        + draw()    }    class Circle {        + draw()    }    class ShapeFactory {        + getShape(shapeType: String): Shape    }    class Observer {        + update()    }    class ConcreteObserver {        + update()    }    class Subject {        - observers: List<Observer>        + attach(observer: Observer)        + detach(observer: Observer)        + notifyObservers()    }      Singleton -->|创建实例| Singleton