2.结构型模式

这些设计模式关注类和对象的组合。继承概念被用来组合接口和定义组合对象获得新功能的方式。

一、适配器模式(Adapter Pattern)

适配器模式作为两个不兼容接口之间的桥梁,结合了两个独立接口的功能。设计单一的类加载不同或不兼容的接口

1.媒体播放器接口和更高级播放器创建接口。

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

2.创建实现AdvanceMediaPlayer接口类的实体类

public class VlcPlayer implements AdvancedMediaPlayer{
	@override
	public void playVlc(String fileName){
		System.out.println("Play Vlc:"+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("MP4:"+fileName);
	}
}

3.创建MediaPlayer接口适配器类

public class MediaAdapter implements MediaPlayer{
	AdvanceMediaPlayer advanceMusicPlayer;
	public MediaAdapter(String audioType){
		if(audioType.equalsIgnoreCase("vlc")){
			advancedMusicPlayer=new VlcPlayer();
		}else if(audioType.equalsIgnoreCase("mp4")){
			advanceMusicPlayer=new Mp4Player();
		}
	}
	@override
	public void play(String audioType,String fileName){
	if(audioType.equalsIgnoreCase("vlc")){
		advancMusicPlayer.playVlc(fileName);
	}else if(audioType.equalsIgnoreCase("Mp4")){
		advanceMusicePlayer.playMp4(fileName);
	}
	}
}

4.创建实现MediaPlayer接口的实体类

public AudioPlayer implements MediaPlayer{
	MediaAdapter mediaAdapter;
	@override
	public void play(String audioType,String fileName){
	if(audioType.equalsIgnoreCase("mp3")){
		System.out.println("mp3");
	}else if(audioType.equalsIgnoreCase("vlc")
	||audioType.equalsIgnoreCase("mp4")){
		mediaAdapter=new MediaAdapter(audioType);
		mediaAdapter.play(audioType,fileName);
	}else{
		System.out.println("Invalid media."+audioType+"format not supported");
	}
	}
}

5.使用AudioPlay来播放不同类型的音频格式

public class AdapterPatterDemo{
	AudioPlayer audioPlayer=new AudioPlayer();
	audioType.play("mp3","be.mp3");
	audioType.play("mp4","be.mp4");
	audioType.play("vlc","be.vlc");
	audioType.play("avi","be.avi");
}

二、桥接模式(Bridge Pattern)

三、过滤器模式(Filter,Criteria Pattern)

四、组合模式(Composite Pattern)

五、装饰器模式(Decorator Pattern)

六、外观模式(Facade Pattern)

七、享元模式(Flyweight Pattern)

八、代理模式(Proxy Pattern)

代理设计模式,一个类代表另一个类的功能。创建现有对象的对象,以便向外界提供功能接口。代理模式不改变代理类的接口。

1.创建一个接口Image.java

	public interface Image{
		public void display();
	}

2.创建实现接口的实体类

public class RealImage implements Image{
	private String fileName;
	public RealImage(String fileName){
		this.fileName=fileName;
		loadFromDisk(fileName);
	}
	@override
	public void display(){
		System.out.println("Display:"+fileName);
	}
	private void loadFromDisk(String fileName){
		System.out.println("Loading:"+fileName);
	}
}
//ProxyImage.java
public class ProxyImage implements Image{
	private RealImage realImage;
	private String fileName;
	public ProxyImage(String fileName){
		this.fileName=fileName;
	}
	@override
	public void display(){
		if(realImage==null){
			realImage=new RealImage(fileName);
		}
		realImage.diaplay();
	}
}

3.当被请求时,使用ProxyImage来获取RealImage类对象

public class ProxyPatternDemo{
	public static void main(String[] args){
		Image image=new ProxyImage("test_10.img");
		image.display();
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值