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
原创粉丝点击