0
点赞
收藏
分享

微信扫一扫

软件设计师 java 设计模式上午试题

Java设计模式: 从入门到精通

引言

在软件开发中,设计模式是一种被广泛使用的工具,用于解决常见问题并提供可重用的解决方案。设计模式是一种在软件设计中经过验证的最佳实践,它们有助于提高代码的可维护性、可读性和可扩展性。在本文中,我们将介绍一些常见的Java设计模式,并提供相应的代码示例。

设计模式概述

设计模式是一种在特定情况下的解决方案,它们描述了如何解决某个问题并提供了可重用的方法。设计模式可以根据目标和目的分为三种类型:创建型模式、结构型模式和行为型模式。

创建型模式

创建型模式主要关注对象的创建机制,它们有助于解耦对象的创建和使用。常见的创建型模式包括:单例模式、工厂模式、抽象工厂模式、建造者模式和原型模式。

单例模式

单例模式是一种常见的创建型模式,它确保一个类只有一个实例,并提供全局访问点。下面是一个简单的单例模式示例:

public class Singleton {
    private static Singleton instance;

    private Singleton() {}

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

上述示例中,私有构造函数确保无法直接创建Singleton类的实例,而getInstance方法提供了获取实例的唯一入口。

结构型模式

结构型模式主要关注对象之间的关系,它们有助于定义对象之间的组合和接口。常见的结构型模式包括:适配器模式、装饰器模式、代理模式、组合模式和享元模式。

适配器模式

适配器模式用于将一个类的接口转换成客户端所期望的接口。这种模式主要用于解决新旧系统之间的兼容性问题。下面是一个简单的适配器模式示例:

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

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

public class VlcPlayer implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {
        System.out.println("Playing vlc file: " + fileName);
    }

    @Override
    public void playMp4(String fileName) {
        // do nothing
    }
}

public class Mp4Player implements AdvancedMediaPlayer {
    @Override
    public void playVlc(String fileName) {
        // do nothing
    }

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

public class MediaAdapter implements MediaPlayer {
    private AdvancedMediaPlayer advancedMediaPlayer;

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

    @Override
    public void play(String audioType, String fileName) {
        if (audioType.equalsIgnoreCase("vlc")) {
            advancedMediaPlayer.playVlc(fileName);
        } else if (audioType.equalsIgnoreCase("mp4")) {
            advancedMediaPlayer.playMp4(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("vlc") || audioType.equalsIgnoreCase("mp4")) {
            mediaAdapter = new MediaAdapter(audioType);
            mediaAdapter.play(audioType, fileName);
        } else {
            System.out.println("Invalid media type");
        }
    }
}

上述示例中,MediaPlayer接口定义了播放音频文件的方法,AdvancedMediaPlayer接口定义了播放高级音频文件的方法。VlcPlayer和Mp4Player是实现了AdvancedMediaPlayer接口的具体类。MediaAdapter类是一个适配器,它实现了MediaPlayer接口,并根据需要调用Advanced

举报

相关推荐

0 条评论