zoukankan      html  css  js  c++  java
  • 第一节:桥接模式

    一、传统方式

      1、需求分析

        现在对不同手机类型的不同品牌实现操作编程(比如:开机、关机,上网,打电话等)

        

      2、传统方式解决手机操作问题:

        传统方式解决手机使用问题(类图)

        

      3、传统方式解决手机操作问题分析

        (1)扩展性问题(类爆炸),如过再增加手机的样式(旋转式),就需要增加各个品牌手机的类,同样如果增加一个手机品牌,也要在各个手机样式类下增加;

        (2)违反了单一职责原则,当增加手机样式时,也要同时增加所有品牌的手机,这样增加了代码维护成本

    二、桥接模式(Bridge Pattern)——基本介绍

      1、基本介绍

        (1)桥接模式(Bridge模式)是指:将 实现 抽象 放在两个不同的类层次中,使两个层次可以独立改变;

        (2)桥接模式是一种结构型设计模式

        (3)Bridge 模式基于 类的最小设计原则,通过使用封装、聚合及集成等行为让不同的类承担不同的职责。

            它的主要特点是把 抽象(Abstraction)行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及对他们的功能扩展;

      2、桥接模式:原理类图

        

         (1)Client类:桥接模式的调用者;

        (2)抽象类(Abstraction):维护了 Implementor /即它的实现类 ConcreteImplementorA..., 二者是聚合关系,Abstraction 充电桥接类;

        (3)RefinedAbstraction:是 Abstraction 抽象类的子类;

        (4)Implementor:行为实现类的接口;

        (5)ConcreteImplementorA/B :行为的具体实现类;

        (6)从 UML 图:这里的抽象类和 接口是聚合的关系,其实 调用 和 被调用关系;

        

     

    三、桥接模式实现需求

      1、桥接模式解决手机操作问题

        使用桥接模式改进传统方式,让程序须有更好的扩展性,利用程序维护

        (1)应用实例与前面一样;

        (2)使用桥接模式对应的类图

          

      2、代码实现

        接口端(实现端):定义行为

     1 /**
     2  * 接口
     3  */
     4 public interface Brand {
     5 
     6     void open();
     7     void close();
     8     void call();
     9 }
    10 
    11 --------------------------------
    12 public class Xiaomi implements Brand {
    13 
    14     @Override
    15     public void open() {
    16         System.out.println("小米手机开机");
    17     }
    18 
    19     @Override
    20     public void close() {
    21         System.out.println("小米手机关机");
    22     }
    23 
    24     @Override
    25     public void call() {
    26         System.out.println("小米手机打电话");
    27     }
    28 }
    29 --------------------------------
    30 public class Vivo implements Brand{
    31     @Override
    32     public void open() {
    33         System.out.println("Vivo手机开机");
    34     }
    35 
    36     @Override
    37     public void close() {
    38         System.out.println("Vivo手机关机");
    39     }
    40 
    41     @Override
    42     public void call() {
    43         System.out.println("Vivo手机打电话");
    44     }
    45 }

        抽象端(抽象类端):

     1 public abstract class Phone {
     2 
     3     //组合品牌
     4     private Brand brand;
     5 
     6     //构造器
     7     public Phone(Brand brand) {
     8         super();
     9         this.brand = brand;
    10     }
    11     public Phone() {
    12         super();
    13     }
    14 
    15     protected void open() {
    16         this.brand.open();
    17     }
    18 
    19     protected void close() {
    20         this.brand.close();
    21     }
    22 
    23     protected void call() {
    24         this.brand.call();
    25     }
    26 }
    27 -----------------------------------------
    28 public class FoldedPhone extends Phone{
    29 
    30     public FoldedPhone(Brand brand) {
    31         super(brand);
    32     }
    33 
    34     @Override
    35     public void open() {
    36         super.open();
    37         System.out.println("折叠样式手机");
    38     }
    39 
    40 
    41     @Override
    42     public void close() {
    43         super.close();
    44         System.out.println("折叠样式手机");
    45     }
    46 
    47 
    48     @Override
    49     public void call() {
    50         super.call();
    51         System.out.println("折叠样式手机");
    52     }
    53 }
    54 -----------------------------------------
    55 public class UpRighPhone extends Phone {
    56 
    57     public UpRighPhone(Brand brand) {
    58         super(brand);
    59     }
    60 
    61     @Override
    62     public void open() {
    63         super.open();
    64         System.out.println("直立样式手机");
    65     }
    66 
    67 
    68     @Override
    69     public void close() {
    70         super.close();
    71         System.out.println("直立样式手机");
    72     }
    73 
    74 
    75     @Override
    76     public void call() {
    77         super.call();
    78         System.out.println("直立样式手机");
    79     }
    80 }

      

        客户端:

     1 public class Client {
     2 
     3     public static void main(String[] args) {
     4         FoldedPhone foldedPhone = new FoldedPhone(new Xiaomi());
     5         foldedPhone.open();
     6         foldedPhone.close();
     7         foldedPhone.call();
     8 
     9         System.out.println("-----------------------");
    10         FoldedPhone foldedPhone1 = new FoldedPhone(new Vivo());
    11         foldedPhone1.open();
    12         foldedPhone1.close();
    13         foldedPhone1.call();
    14 
    15         System.out.println("---------------------");
    16         UpRighPhone upRighPhone = new UpRighPhone(new Xiaomi());
    17         upRighPhone.open();
    18         upRighPhone.close();
    19         upRighPhone.call();
    20 
    21         System.out.println("---------------------");
    22         UpRighPhone upRighPhone1 = new UpRighPhone(new Vivo());
    23         upRighPhone1.open();
    24         upRighPhone1.close();
    25         upRighPhone1.call();
    26     }
    27 }

     

     

  • 相关阅读:
    How to Downgrade From iPhone Firmware 2.2 to 2.1 视频教程降级iphone 2.2 到2.1
    11种网站测试软件(转) 沧海一粟
    GoF23种设计模式之行为型模式之观察者模式
    Android柳叶刀之Button之图文并茂
    GoF23种设计模式之行为型模式之迭代器模式
    某大型银行深化系统之十九:日志规范
    GoF23种设计模式之行为型模式之中介者模式
    GoF23种设计模式之行为型模式之备忘录模式
    Android血刀之CheckBox之问卷调查
    Android应用开发之MetaData之数据挖掘
  • 原文地址:https://www.cnblogs.com/niujifei/p/14300466.html
Copyright © 2011-2022 走看看