当前位置: 首页 > 图灵资讯 > 技术篇> 软件设计师 java 设计模式上午试题

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

来源:图灵教育
时间:2023-08-16 09:40:35

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接口并根据需要调用Advanceder的适配器