设计模式二——结构型模式(笔记)

一、适配器模式简介:作为两个不兼容的接口之间的桥梁。解决正在运行使用的项目的问题。eg:安卓的耳机搭上接口转换器便可在苹果手机上使用。何时使用:1、系统想使用一个现有的类,但类的接口不符合系统要求。2、通过接口转换,将一个类插入另一个类系中(适配器继承或依赖已有的对象,实现想要的目标接口)。优点:1、可一起运行两个无关联的类;2、类复用性提高(通过继承或依赖);3、类的透明性增加;4、灵活性。缺点:1、过多使用使得系统整体凌乱2、Java最多继承一个类,故最多只能适配一个适配器
摘要由CSDN通过智能技术生成

一、适配器模式

简介:

作为两个不兼容的接口之间的桥梁。
解决正在运行使用的项目的问题。
eg:安卓的耳机搭上接口转换器便可在苹果手机上使用。

何时使用:
1、系统想使用一个现有的类,但类的接口不符合系统要求。
2、通过接口转换,将一个类插入另一个类系中(适配器继承或依赖已有的对象,实现想要的目标接口)。
优点:
1、可一起运行两个无关联的类;
2、类复用性提高(通过继承或依赖);
3、类的透明性增加;
4、灵活性。
缺点:
1、过多使用使得系统整体凌乱
2、Java最多继承一个类,故最多只能适配一个适配器类,且目标必须为抽象类。

实现:

  1. 创建接口
package interfaceofthis;

public interface MediaPlayer {
   
	public void play(String audioType,String filename);
}
package interfaceofthis;

public interface AdvancedMediaPlayer {
   
	public void playVlc(String fileName);
	public void playMpe(String fileName);
}
  1. 创建一个接口的实体类
package interfaceentity;

import interfaceofthis.AdvancedMediaPlayer;

public class Mp4Player implements AdvancedMediaPlayer {
   

	@Override
	public void playVlc(String fileName) {
   
		// TODO 自动生成的方法存根
		
	}

	@Override
	public void playMpe(String fileName) {
   
		// TODO 自动生成的方法存根
		System.out.println("这是MP4文件"+fileName);
	}

	
}

package interfaceentity;

import interfaceofthis.AdvancedMediaPlayer;

public class VlcPlayer implements AdvancedMediaPlayer{
   

	@Override
	public void playVlc(String fileName) {
   
		// TODO 自动生成的方法存根
		System.out.println("这是Vlc文件"+fileName);
	}

	@Override
	public void playMpe(String fileName) {
   
		// TODO 自动生成的方法存根
		
	}
	
}

  1. 创建另一个接口的适配器类
package adapterclass;

import interfaceentity.Mp4Player;
import interfaceentity.VlcPlayer;
import interfaceofthis.AdvancedMediaPlayer;
import interfaceofthis.MediaPlayer;

public class MediaAdapter implements MediaPlayer{
   

	AdvancedMediaPlayer advancedMediaPlayer;
	public void play(String audioType, String filename) {
   
		// TODO 自动生成的方法存根
		if(audioType.equalsIgnoreCase("vlc")) {
   
			advancedMediaPlayer.playVlc(filename);
		}
		if(audioType.equalsIgnoreCase("mp4")) {
   
			advancedMediaPlayer.playMpe(filename);
		}
	}

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

  1. 创建接口的实体类
package interfaceentity;

import adapterclass.MediaAdapter;
import interfaceofthis.MediaPlayer;

public class AudioPlayer implements MediaPlayer{
   

	MediaAdapter mediaAdapter;
	@Override
	public void play(String audioType, String filename) {
   
		// TODO 自动生成的方法存根
		if(audioType.equalsIgnoreCase("mp3") ) {
   
			System.out.println("这是MP3文件"+filename);
			
		}
		else if(audioType.equalsIgnoreCase("vlc")||audioType.equalsIgnoreCase("mp4")) {
   
			mediaAdapter=new MediaAdapter(audioType);
			mediaAdapter.play(audioType, filename);
		}
		else {
   <
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值