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