2.结构型模式
来源:互联网 发布:让人喜欢的女生知乎 编辑:程序博客网 时间:2024/06/07 10:50
这些设计模式关注类和对象的组合。继承概念被用来组合接口和定义组合对象获得新功能的方式。
适配器模式(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.javapublic 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.javapublic 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
- 2.结构型模式
- bridge模式-结构型模式
- facade模式--结构型模式
- Composite模式--结构型模式
- 结构型模式:Facade模式
- 结构型模式-代理模式
- 结构型模式-外观模式
- 结构型模式-组合模式
- 结构型模式-装饰模式
- 《设计模式》结构型模式
- 结构型模式--桥模式
- 结构型模式--组合模式
- 结构型模式--适配器模式
- 结构型模式--外观模式
- 设计模式:结构型模式
- 代理模式 - 结构型模式
- 外观模式 - 结构型模式
- 适配器模式 - 结构型模式
- Cesium-3D Tiles 跳跃式层级细节
- [bigdata-069]mysql数据迁移从自建导入到rds+代码过滤增量导入 centos6.8+pymsql+mysqldump+source
- python学习之路之六--input与while
- jQuery基础篇(一)样式篇
- 自定义标签库
- 2.结构型模式
- Linux下打包压缩war和解压war包
- Eclipse使用git命令行
- 织梦自定义表单验证字段不能为空,绝对实用灵活
- python实现获取天气信息后自动登录邮箱发送到指定邮件联系人
- 【SqlServer】 分享 几个 优化 Sql 的 语句
- Entity SQL 初入
- android新组件
- 能通过一张照片(2D)得到3D的模型吗?