javaデザインモード--ブリッジモードの詳細解


例を引く
需要:異なる携帯電話のタイプの異なるブランド(例えば、ボタン携帯電話:ノキア、カバー携帯電話:ニューマン、スマートフォン:ファーウェイ、ミニメートル)に対して操作プログラミングを実現します。
まず、一般的な解法を説明します。携帯のタイプは違っています。父の携帯電話を引き継いで、最後に各ブランドは対応の携帯電話のタイプを継承します。
在这里插入图片描述
欠点:一見大丈夫ですが、実は拡張しにくいです。新しい携帯電話のタイプ(たとえば新興の折りたたみ式)を増やすなら、各携帯ブランドの種類を増やして継承していく必要があります。同じように、携帯電話のブランドを増やすなら、それぞれの携帯電話のスタイルによっても増加します。単一職責原則に違反し、維持コストが高い。
解決策は次の主役です。ブリッジモードです。
ブリッジモード
ブリッジモードは構造設計モードである。名前の通り、橋を架けるように連結し、パッケージ、重合、相続などの行為を使うことによって、異なる種類に異なる職責を負わせ、抽象と二つの異なるクラスのレベルにおいて実現され、二つの階層が独立に変えられ、各部分の独立性及び彼らに対する機能の拡張が保たれる。
原理類図:
在这里插入图片描述
  • Cientクラス:クライアント呼び出し
  • Abstract抽象クラス:ブリッジクラスとして機能し、Implementorインターフェース(つまり、その実現クラスのCocrete ImplementaorA)を維持しました。
  • RefindAbstractクラス:抽象的なクラスのサブ
  • です。
  • Implementorインターフェース:挙動実現インターフェース
  • ConcreteImplementaorA/Bクラス:行動の具体的な実現クラス
  • UMLクラス図から、抽象クラスとインターフェースは、集合の関係、すなわち呼び出しと呼ばれる関係であることがわかった。このように橋を架けた後、具体的に類の呼び出し方法=>父類の抽象的な方法=>行為インターフェースの方法=>具体的なインターフェースの行為の実現類を実現して、接続を完成します。
    在这里插入图片描述
    実戦例
    引例の実際問題をブリッジモードで解決します。
    クラス図:
    在这里插入图片描述
    コード:
    
    //  
    public interface Brand {
    	void open(); //  
    	void close(); //  
    	void call();//   
    }
    //     
    public class NOKIA implements Brand{
        @Override
        public void open() {
            System.out.println("       ");
        }
        @Override
        public void close() {
            System.out.println("       ");
        }
        @Override
        public void call() {
            System.out.println("        ");
        }
    }
    public class Newsmy implements Brand{
        @Override
        public void open() {
            System.out.println("      ");
        }
        @Override
        public void close() {
            System.out.println("      ");
        }
        @Override
        public void call() {
            System.out.println("       ");
        }
    }
    public class Huawei implements Brand{
        @Override
        public void open() {
            System.out.println("      ");
        }
        @Override
        public void close() {
            System.out.println("      ");
        }
        @Override
        public void call() {
            System.out.println("       ");
        }
    }
    public class Xiaomi implements Brand{
        @Override
        public void open() {
            System.out.println("      ");
        }
        @Override
        public void close() {
            System.out.println("      ");
        }
        @Override
        public void call() {
            System.out.println("       ");
        }
    }
    
    
    //   
    public abstract class Phone {
    	private Brand brand;//      
    	public Phone(Brand brand) {//   
    		super();
    		this.brand = brand;
    	}
    	public void open() {
    		this.brand.open();
    	}
    	public void close() {
    		this.brand.close();
    	}
    	public void call() { this.brand.call(); }
    }
    //    
    public class ButtonPhone extends Phone{
        public ButtonPhone(Brand brand) {
            super(brand);
        }
        public void open() {
            super.open();
            System.out.println("    ");
        }
        public void close() {
            super.close();
            System.out.println("    ");
        }
        public void call() {
            super.call();
            System.out.println("    ");
        }
    }
    public class SlidePhone extends Phone{
        public SlidePhone(Brand brand) {
            super(brand);
        }
        public void open() {
            super.open();
            System.out.println("    ");
        }
        public void close() {
            super.close();
            System.out.println("    ");
        }
        public void call() {
            super.call();
            System.out.println("    ");
        }
    }
    public class SmartPhone  extends Phone{
        public SmartPhone(Brand brand) {
            super(brand);
        }
        public void open() {
            super.open();
            System.out.println("    ");
        }
        public void close() {
            super.close();
            System.out.println("    ");
        }
        public void call() {
            super.call();
            System.out.println("    ");
        }
    }
    
    
    //     
    public class Client {
        public static void main(String[] args) {
            Phone phone1 = new ButtonPhone(new NOKIA());
            phone1.open();
            phone1.call();
            phone1.close();
            System.out.println("=======================");
            Phone phone2 = new SlidePhone(new Newsmy());
            phone2.open();
            phone2.call();
            phone2.close();
            System.out.println("=======================");
            Phone phone3 = new SmartPhone(new Huawei());
            phone3.open();
            phone3.call();
            phone3.close();
        }
    }
    
    在这里插入图片描述
    締め括りをつける
  • は抽象的かつ実現部分の分離を実現し、それによってシステムの柔軟性を大きく提供し、抽象的な部分と実現部分を独立にすることが、システムの階層的な設計を容易にし、より良い構造化システムを生成する。
  • ブリッジモードは、多層継承方式の代わりに、サブシステムの数を減らし、システムの管理と維持コストを低減することができる。
  • ブリッジモードの導入により、システムの理解と設計の難しさが増し、統合関連関係が抽象層に構築されるため、開発者に抽象的な設計とプログラミングを要求する。
  • よくあるアプリケーションシーン:-JDBCドライバ
  • -銀行振込システム
    振替の分類:ネット振替、カウンター振替、AMT振替
    振替ユーザーのタイプ:普通のユーザー、銀行カードのユーザー、ゴールドカードのユーザ…
     -メッセージ管理
    メッセージタイプ:インスタントメッセージ、遅延メッセージ
    メッセージの分類:携帯メール、メールメッセージ、QQメッセージ…
    この文章はここまでです。あなたに助けを与えたいです。私たちのもっと多い内容に注目してください。