程序开发中常用的设计模式介绍

深海里的光 2021-10-08 ⋅ 15 阅读

设计模式是一种被反复验证的、可重复使用的解决方案,它可用于解决软件开发过程中的一些常见问题。在程序开发中,设计模式可以提高代码的可维护性、可读性和可复用性,并且可以减少开发过程中的错误。本文将介绍几种常用的设计模式,并提供示例以帮助读者更好地理解。

1. 创建型设计模式

1.1. 单例模式(Singleton)

单例模式是一种创建型设计模式,它限制一个类只能有一个实例,并提供一个全局访问点。这种模式通常用于管理全局资源或跟踪某个对象的状态。以下是一个简单的示例:

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

1.2. 工厂模式(Factory)

工厂模式是一种创建型设计模式,它提供了一种将对象的创建逻辑与使用者分离的方法。工厂模式可以根据特定的条件创建不同的对象,并将其返回给调用者。以下是一个简单的示例:

public interface Shape {
    void draw();
}

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

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

public class ShapeFactory {
    public Shape createShape(String shapeType) {
        if (shapeType.equalsIgnoreCase("rectangle")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("circle")) {
            return new Circle();
        } else {
            throw new IllegalArgumentException("Unsupported shape type.");
        }
    }
}

2. 结构型设计模式

2.1. 适配器模式(Adapter)

适配器模式是一种结构型设计模式,它允许将不兼容的接口转换为客户端所期望的接口。适配器模式通常用于集成两个或更多不兼容的系统或类。以下是一个简单的示例:

public interface MediaPlayer {
    void play(String audioType, String fileName);
}

public interface AdvancedMediaPlayer {
    void playMp4(String fileName);
    void playAvi(String fileName);
}

public class Mp4Player implements AdvancedMediaPlayer {
    @Override
    public void playMp4(String fileName) {
        System.out.println("Playing mp4 file: " + fileName);
    }

    @Override
    public void playAvi(String fileName) {
    }
}

public class AviPlayer implements AdvancedMediaPlayer {
    @Override
    public void playMp4(String fileName) {
    }

    @Override
    public void playAvi(String fileName) {
        System.out.println("Playing avi file: " + fileName);
    }
}

public class MediaAdapter implements MediaPlayer {
    private AdvancedMediaPlayer advancedMediaPlayer;

    public MediaAdapter(String audioType) {
        if (audioType.equalsIgnoreCase("mp4")) {
            advancedMediaPlayer = new Mp4Player();
        } else if (audioType.equalsIgnoreCase("avi")) {
            advancedMediaPlayer = new AviPlayer();
        }
    }

    @Override
    public void play(String audioType, String fileName) {
        if (audioType.equalsIgnoreCase("mp4")) {
            advancedMediaPlayer.playMp4(fileName);
        } else if (audioType.equalsIgnoreCase("avi")) {
            advancedMediaPlayer.playAvi(fileName);
        }
    }
}

public class AudioPlayer implements MediaPlayer {
    private MediaAdapter mediaAdapter;

    @Override
    public void play(String audioType, String fileName) {
        if (audioType.equalsIgnoreCase("mp3")) {
            System.out.println("Playing mp3 file: " + fileName);
        } else if (audioType.equalsIgnoreCase("mp4") || audioType.equalsIgnoreCase("avi")) {
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        } else {
            System.out.println("Unsupported audio type: " + audioType);
        }
    }
}

3. 行为型设计模式

3.1. 观察者模式(Observer)

观察者模式是一种行为型设计模式,它定义了一种一对多的依赖关系,使得一个对象在状态发生改变时能够自动通知其他依赖于它的对象。观察者模式常用于实现事件驱动的系统。以下是一个简单的示例:

public interface Observer {
    void update(String message);
}

public interface Subject {
    void attach(Observer observer);
    void detach(Observer observer);
    void notifyObservers(String message);
}

public class Blog implements Subject {
    private List<Observer> observers = new ArrayList<>();
    private String message;

    @Override
    public void attach(Observer observer) {
        observers.add(observer);
    }

    @Override
    public void detach(Observer observer) {
        observers.remove(observer);
    }

    @Override
    public void notifyObservers(String message) {
        for (Observer observer : observers) {
            observer.update(message);
        }
    }

    public void setMessage(String message) {
        this.message = message;
        notifyObservers(message);
    }
}

public class User implements Observer {
    private String name;

    public User(String name) {
        this.name = name;
    }

    @Override
    public void update(String message) {
        System.out.println(name + " received a new message: " + message);
    }
}

以上只是介绍了一些常用的设计模式,实际上还有很多其他的设计模式可以用于不同的场景和问题。在实际开发中,选择适当的设计模式可以提高代码的复用性和可维护性,并且有助于更好地组织和设计软件系统。

希望本文对您理解程序开发中常用的设计模式有所帮助!


全部评论: 0

    我有话说: