Heim  >  Artikel  >  Java  >  Einführung in Adaptermuster und Brückenmuster in Java-Entwurfsmustern (Codebeispiel)

Einführung in Adaptermuster und Brückenmuster in Java-Entwurfsmustern (Codebeispiel)

不言
不言Original
2018-09-12 16:02:391742Durchsuche

Dieser Artikel bietet Ihnen eine Einführung in den Adaptermodus und den Bridge-Modus in Java-Designmustern. Ich hoffe, dass er für Sie hilfreich ist.

Vorwort

Im vorherigen Artikel haben wir etwas über das Builder-Muster und das Prototyp-Muster des kreativen Musters erfahren. In diesem Artikel lernen wir den Adaptermodus und den Bridge-Modus des Strukturmodus kennen.

Adaptermuster

Einführung

Das Adaptermuster dient als Brücke zwischen zwei inkompatiblen Schnittstellen. Bei dieser Art von Entwurfsmuster handelt es sich um ein Strukturmuster, das die Funktionalität zweier unabhängiger Schnittstellen kombiniert.

Vereinfacht ausgedrückt werden zwei inkompatible Klassen über eine Schnittstelle, allgemein als Konverter bekannt, kompatibel gemacht.
Ein typisches Beispiel im Leben ist die Spannung von Elektrogeräten. Die Spannung in den USA beträgt etwa 110 V, während die Spannung in China im Allgemeinen 220 V beträgt. Wenn wir amerikanische oder japanische Elektrogeräte verwenden möchten, benötigen wir einen Konverter 110V in 220V umwandeln. Ein weiteres typisches Beispiel ist das Universalladegerät, mit dem grundsätzlich die Akkus verschiedener Mobiltelefone aufgeladen werden können.

Hier verwenden wir ein einfaches Beispiel zur Veranschaulichung.
Ein bestimmter Videoplayer kann nur Videos im MP4-Format abspielen, aber neben MP4 gehören zu den gängigen Videoformaten auch AVI, RVMB usw. Derzeit gibt es eine Software, Format Factory, die zur Konvertierung verwendet wird Videoformate (Adapter) zum Abspielen des Videos. Zu diesem Zeitpunkt können wir das Adaptermuster verwenden, um das Schreiben des Codes abzuschließen.

Es gibt zwei Haupttypen von Adaptermustern: Das eine ist das Klassenadaptermuster, das hauptsächlich Adapterfunktionen durch Vererbung implementiert; das andere ist das Objektadaptermuster, das Adapterfunktionen durch Kombination implementiert.

Der erste ist der Klassenadaptermodus, der die folgenden Schritte ausführen muss:

  1. Eine Schnittstelle für MP4-, AVI- und RVMB-Videos einrichten Formate;

  2. Erstellen Sie eine Videoplayer-Klasse, um die MP4-Videoformatklasse zu implementieren.

  3. Schreiben Sie eine Format-Factory-Klasse, um Videodateien in AVI zu konvertieren , RVMB und andere Formate. Konvertieren Sie Dateien im MP4-Format.

  4. Spielen Sie diese Videos.

Dann lautet der Code wie folgt:

Codebeispiel:

    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();
    }

Ergebnis ausführen:

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

Durch den obigen Code und die Ausführungsergebnisse können wir die gewünschten Ergebnisse erzielen. Wenn es neue Videoformate gibt und wir den Videoplayer zum Abspielen verwenden müssen, müssen wir nur eine Schnittstelle und eine Formatfabrik hinzufügen Klasse. Das ist es.

Objektadaptermuster
Die Adapterfunktion wird durch Kombination implementiert.
Hier müssen wir also nur die Vererbung in der Formatfabrik ändern, um ein Objekt zu erstellen.
Der geänderte Code lautet wie folgt:
Codebeispiel

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();
            
    }

Laufende Ergebnisse:

    播放Mp4格式的视频文件.

In diesen beiden Adaptermodi Alle haben diese Funktion implementiert, aber hier wird empfohlen, das Objektadaptermuster zu verwenden. Im Vergleich zum Klassenadaptermuster ist es flexibler und entspricht dem Synthese- und Wiederverwendungsprinzip die Designprinzipien:

Versuchen Sie, Zusammensetzung/Aggregation anstelle von Vererbung zu verwenden.

Vorteile des Adaptermusters:

Verbessert die Wiederverwendung und Flexibilität von Klassen.

Nachteile des Adaptermodus: Wenn

zu oft verwendet wird, wird das System chaotisch und schwer zu beherrschen.

Hinweis:

Der Adapter wird nicht während der Detailkonstruktion hinzugefügt, sondern um das Problem des Projekts im Betrieb zu lösen.

Bridge-Modus

Einführung

Bridge wird verwendet, um Abstraktion und Implementierung zu entkoppeln, sodass sich beide unabhängig voneinander ändern können. Bei dieser Art von Entwurfsmuster handelt es sich um ein Strukturmuster, das Abstraktion und Implementierung entkoppelt, indem es eine Brückenstruktur zwischen ihnen bereitstellt.

Die wörtliche Interpretation besteht darin, Dinge auf beiden Seiten durch eine Brücke in der Mitte zu verbinden, aber die beiden verbundenen Dinge beeinflussen sich nicht gegenseitig. Was mich am meisten beeindruckt hat, waren die Mobiltelefonmarken und die mobile Software in 12db3c63aeaac454b7e6113240c6531e. Es gibt viele Marken von Mobiltelefonen und es gibt viele Softwareprogramme auf jedem Mobiltelefon , aber die Software ist nicht der Mobiltelefonteil, es handelt sich um Aggregationsbeziehungen. Wenn auf dem Mobiltelefon der Marke A die Software a und b installiert ist und auf dem Mobiltelefon der Marke B die Software b und c installiert ist und auf dem Mobiltelefon der Marke A eine neue Software c installiert werden muss, muss nur die Software hinzugefügt werden, ohne zu wissen, wie Die Software wird erstellt. Wenn ein neues Mobiltelefon der Marke C hinzugefügt wird, muss ebenfalls nur die erforderliche a-, b- oder c-Software installiert werden.

Okay, kein Unsinn mehr, lassen Sie uns ein Beispiel zur Veranschaulichung verwenden.
Es gibt viele Arten von Stiften auf dem Markt, wie zum Beispiel Bleistifte, schwarze Kugelschreiber, rote Kugelschreiber usw. Es gibt auch viele Arten von Papier, wie zum Beispiel Papier für Prüfungsunterlagen, Zeitungspapier usw. Im Allgemeinen ist die Farbe der Wörter auf der Zeitung zum Schreiben schwarz. Die Farbe der Markierungswörter auf dem Prüfungspapier ist hier zum Schreiben. Stifte und Papier sind voneinander unabhängig, aber das Schreiben auf Papier verbindet sie. Hier können wir den Bridge-Modus verwenden.

实现步骤如下:

  1. 定义一个笔类的接口,有写的这个方法;

  2. 定义红笔和黑笔的类,实现笔类的接口;

  3. 定义一个纸类的抽象类,设置笔的种类,并需要实现被写的方法;

  4. 定义卷子纸和新闻纸类,继承纸类并实现该方法;

  5. 进行书写。

代码示例

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();
    }

运行结果

红色的字
黑色的字

从上述结果中我们可以得出我们想要的结果。如果新增一个笔类或者一个纸类,那么只需新增相应的接口和实现即可,并不会因为结构化改变而相互直接影响。

桥接模式的优点:

1、抽象和实现的分离,实现了解耦;
2、提升的扩展能力。

桥接模式的缺点:

会使系统看起复杂,对新手不友好,没有一定的抽象进行设计能力难以理解。

使用场景:

一个类存在两个独立变化的维度,且这两个维度都需要进行扩展。

相关推荐:

Java设计模式中建造者模式和原型模式的介绍(代码示例)

Java设计模式中工厂模式的介绍(代码示例)

Das obige ist der detaillierte Inhalt vonEinführung in Adaptermuster und Brückenmuster in Java-Entwurfsmustern (Codebeispiel). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn