软件设计师 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的适配器