b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

第四种Java设计模式-----适配器模式和桥接模式

电脑杂谈  发布时间:2020-07-06 04:29:24  来源:网络整理

java jmf播放rtsp视频_java视频格式转换mp4_mp4播放器java版

在上一篇文章中,我们学习了构建器模型和创建模型的原型模型. 在本文中,我们将学习适配器模式和结构模式的桥接模式.

简介

适配器模式用作两个不兼容接口之间的桥梁. 这种设计模式是一种结构模式,结合了两个独立接口的功能.

简单地说,两个不兼容的类通过某个接口(通常称为转换器)兼容.

典型的寿命示例是电器的电压. 美国的电压约为110V,而中国的电压为220V. 如果要使用美国或日本的电器,则需要使用转换器将110V转换为220V. . 另一个非常典型的例子是曾经的通用充电器,它基本上可以为各种手机电池充电.

这里我们用一个简单的例子来说明.

视频播放器只能播放MP4格式的视频,但主流的视频格式包括MP4,AVI,RVMB等. 这时,有一个软件,格式工厂用于转换视频格式(适配器)播放视频. 目前,我们可以使用适配器模式来完成代码的编写.

适配器模式主要有两种类型,一种是类适配器模式,主要通过继承来实现适配器功能. 另一个是对象适配器模式,它通过组合来实现适配器功能.

首先是类似适配器的模式,它需要完成以下步骤:

建立MP4,AVI,RVMB视频格式界面;建立视频播放器类,实现MP4视频格式类;编写格式工厂类以将AVI,RVMB和其他格式的视频文件转换为MP4格式的文件. 播放这些视频.

mp4播放器java版_java jmf播放rtsp视频_java视频格式转换mp4

代码如下:

代码示例:


    interface Mp4{
        void playMp4();
    }
    
    interface Avi{
        void playAvi();
    }
    
    
    interface Rvmb{
        void playRvmb();
    }
    
    class VideoPlayer implements Mp4{
    
        @Override
        public void playMp4() {
            System.out.println("播放Mp4格式的视频文件.");
        }
    }
    
    
    class FormatFactory extends VideoPlayer  implements Avi{    
        @Override
        public void playAvi() {
            //转换成MP4格式的视频
            playMp4();
        }
    }
    
    
    public static void main(String[] args) {        
            Mp4 mp4=new VideoPlayer();
            mp4.playMp4();
            Avi avi=new FormatFactory();
            avi.playAvi();
    }

运行结果:

    播放Mp4格式的视频文件.
    播放Mp4格式的视频文件.

通过上面的代码和运行结果,我们可以获得期望的结果. 如果需要使用此视频播放器播放新的视频格式,只需添加接口和格式工厂类即可. 也是.

对象适配器模式

组合以实现适配器功能.

所以在这里,我们只需要更改格式工厂中的继承关系即可创建对象.

更改后的代码如下:

mp4播放器java版_java jmf播放rtsp视频_java视频格式转换mp4

代码示例


class FormatFactory2  implements Rvmb{
        private Mp4 mp4;
        
         public FormatFactory2(Mp4 mp4) {
            this.mp4=mp4;
        }
        
        @Override
        public void playRvmb() {
            mp4.playMp4();
        }   
    }
    public static void main(String[] args) {
    
            Rvmb rvmb=new FormatFactory2(new VideoPlayer());
            rvmb.playRvmb();
            
    }

运行结果:

    播放Mp4格式的视频文件.

在两种适配器模式下都实现了该功能,但是在这里建议使用对象适配器模式. 与类适配器模式相比,它更加灵活,并且在设计原则上符合复合重用的原则:

尝试使用综合/聚合而不是继承.

适配器模式的优点:

改进的类重用性和灵活性.

适配器模式的缺点:

过度使用会使系统混乱并且难以掌握.

mp4播放器java版_java视频格式转换mp4_java jmf播放rtsp视频

注意:

在详细设计过程中未添加适配器,而是为了解决服务中项目的问题.

简介

Bridge用于分离抽象和实现,以便两者可以独立更改. 这种设计模式是一种结构模式. 通过在抽象和实现之间架起桥梁,它提供了两者之间的解耦.

字面意义是通过中间的桥梁将两边的事物连接起来,但是相关的两者不会互相影响. “大谈话设计模式”给手机品牌和手机软件留下了深刻的印象. 手机的品牌很多,市场上有很多软件. 每个手机中安装的软件都不同. 手机品牌包括软件,但该软件不属于手机,它们处于聚合关系中. 如果A品牌手机安装了a和b软件,而B品牌手机安装了b和c软件,则如果A品牌手机需要安装新的c软件,则只需添加软件却不知道软件是如何生产的. 同样,如果添加了新的C品牌手机,则只需安装所需的a,b或c软件.

好的,我不需要胡说八道,我仍然使用一个例子来说明.

市场上有很多类型的笔,例如铅笔,黑色圆珠笔和红色圆珠笔. 纸张也有很多类型,例如用于考试纸的纸张和用于报纸的纸. 一般来说,报纸上的文字是黑色的. 在这里,我们使用黑色的圆珠笔书写. 试卷上的分数颜色为红色. 在这里,我们使用红色的圆珠笔书写. 笔和纸是彼此独立的,但是在纸上书写并将它们关联在一起,我们可以在此处使用桥接模式.

实现步骤如下:

使用这种书写方法定义笔类接口;定义红笔和黑笔的类,以实现笔类的接口;定义纸类的抽象类,设置笔的类型,并需要实现所写的方法定义卷纸和新闻纸mp4播放器java版,继承纸并实现该方法;写.

代码示例

java jmf播放rtsp视频_mp4播放器java版_java视频格式转换mp4


interface Pen{
    void write();
}
class RedPen implements Pen{
    @Override
    public void write() {
        System.out.println("红色的字");
    }
}
class BlackPen implements Pen{
    @Override
    public void write() {
        System.out.println("黑色的字");
    }
}
abstract class  Paper{
    protected  Pen pen;
    
    void setPen(Pen pen){
        this.pen=pen;
    }   
    abstract void writing();
}
class ExaminationPaper extends Paper{
    @Override
    void writing() {
        pen.write();
    }
}
class NewsPaper extends Paper{
    @Override
    void writing() {
        pen.write();
    }
}
public static void main(String[] args) {
        Paper paper=new ExaminationPaper();
        paper.setPen(new RedPen());
        paper.writing();
        
        Paper paper2=new NewsPaper();
        paper2.setPen(new BlackPen());
        paper2.writing();
    }

运行结果

红色的字
黑色的字

从以上结果中,我们可以获得所需的结果. 如果添加笔类或纸类,则只需添加相应的接口和实现mp4播放器java版,由于结构上的变化,不会直接相互影响.

桥接模式的优点:

1. 将抽象与实现分离以实现解耦;

2. 增强的扩展功能.

桥接模式的缺点:

使系统看起来复杂,对新手不友好,并且如果没有某些抽象设计功能就很难理解.

使用场景:

一个类有两个独立更改的维度,两个维度都需要扩展.


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-270124-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      热点图片
      拼命载入中...