• 设计模式--适配器模式--简记


    适配器模式(Adapter Pattern):

      将一个类的接口转换成客户希望的另外一个接口。

      使得原本由于接口不兼容而不能一起工作的那些类可以在一起工作。

    何时使用:

      1.系统需要使用现有的类,而此类的接口不符合系统的需要。

      2.想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类。

      3.通过接口转换,讲一个类插入另一个类系中。

    优点:

      1.可以让任何两个没有关联的类一起运行

      2.提高类的复用性

      3.灵活性好

    缺点:

      1.过多的使用适配器会让系统变的非常的凌乱,不易整体进行把握

      2.由于Java至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类

    注:适配器不是在详细设计中添加的,而是解决正在服役的项目

     1 //一个接口
     2 public interface MediaPlayer {
     3     public void play(String audioType, String fileName);
     4 }
     5 
     6 //另一个接口
     7 public interface AdvancedMediaPlayer {
     8     public void playVlc(String fileName);
     9     public void playMp4(String fileName);
    10 }
    11 
    12 //实现接口的类
    13 public class VlcPlayer implements AdvancedMediaPlayer {
    14     @override
    15     public void playVlc(String fileName) {
    16         System.out.println("Playing vlc file : " + fileName);
    17     }
    18     
    19     @override
    20     public void playMp4(String fileName) {
    21         //do nothing
    22     }
    23 }
    24 
    25 public class Mp4Player implements AdvancedMediaPlayer {
    26     @override
    27     public void playVlc(String fileName) {
    28         //do nothing
    29     }
    30     
    31     @override
    32     public void playMp4(String fileName) {
    33         System.out.println("Playing mp4 file : " + fileName);
    34     }
    35 }
    36 
    37 //创建实现MediaPlay接口的适配器
    38 public class MediaAdapter implements MediaPlayer {
    39     
    40     AdanceMediaPlayer advanceMusicPlayer;
    41     
    42     public MediaAdapter(String audioType) {
    43         if(audioType.equalsIgnoreCase("vlc")) {
    44             advanceMusicPlayer = new VlcPlayer();
    45         } else if(audioType.equalsIgnoreCase("mp4")) {
    46             advanceMusicPlayer = new Mp4Player();
    47         }
    48     }
    49     
    50     @Override
    51     public void play(String audioType, String fileName) {
    52         if(audioType.equalsIgnoreCase("vlc")) {
    53             advanceMusicPlayer.playVlc(fileName);
    54         }else if(audioType.equalsIgnoreCase("mp4")) {
    55             advanceMusicPlayer.playMp4(fileName);
    56         }
    57     }
    58 }
    59 
    60 //创建实现了MediaPlayer接口的实现类
    61 public class AudioPlay implements MeidaPlayer {
    62     
    63     MediaAdapter mediaAdapter;
    64     
    65     @override
    66     public void play(String audioType, String fileName) {
    67         if(audioType.equalsIgnoreCase("mp3")) {
    68             System.out.println("Playing mp3 file : " + fileName);
    69         }
    70         else if(audioType.equalsIgnoreCase("vlc") || audioType.equalsIgnoreCase("mp4")) {
    71             mediaAdapter = new MeidaAdapter(audioType);
    72             mediaAdapter.play(audioType, fileName);
    73         }
    74         else {
    75             System.out.println("Invalid media.");
    76         }
    77     }
    78 }
    79 
    80 
    81 //Test
    82 public class AdapterPatternDemo {
    83     
    84     public static void main(String[] args) {
    85         AudioPlayer audioPlayer = new AudioPlayer();
    86         
    87         audioPlayer.play("mp3","beyond the horizon.mp3");
    88         audioPlayer.play("mp4","alone.mp4");
    89         audioPlayer.play("vlc","far far.vlc");
    90         audioPlayer.play("avi","mind me.avi");
    91     }
    92 }
    View Code

    详情:http://www.runoob.com/design-pattern/adapter-pattern.html

  • 相关阅读:
    工具类-vim在shell中卡死的情况
    tomcat日志分类
    逻辑运算
    牛客练习赛29 F 算式子
    牛客练习赛29 B
    查询
    hdu 5984
    zoj 4057
    zoj 4056
    zoj 4054
  • 原文地址:https://www.cnblogs.com/fqfanqi/p/8522828.html
Copyright © 2020-2023  润新知