• java设计模式--结构型模式--桥接模式


     1                                     桥接模式
     2  概述
     3     将抽象部分与它的实现部分分离,使它们都可以独立地变化。
     4  
     5  
     6  适用性
     7     1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
     8       例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。
     9 
    10     2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
    11       这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。
    12 
    13     3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。
    14 
    15     4.正如在意图一节的第一个类图中所示的那样,有许多类要生成。
    16       这样一种类层次结构说明你必须将一个对象分解成两个部分。
    17 
    18     5.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。
    19  
    20  
    21  参与者
    22     1.Abstraction
    23       定义抽象类的接口。
    24       维护一个指向Implementor类型对象的指针。
    25 
    26     2.RefinedAbstraction
    27       扩充由Abstraction定义的接口。
    28 
    29     3.Implementor
    30       定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。
    31       事实上这两个接口可以完全不同。
    32       一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。
    33 
    34     4.ConcreteImplementor
    35       实现Implementor接口并定义它的具体实现。

    测试类:

     1 public class Test {
     2 
     3     public static void main(String[] args) {
     4         
     5         Person man = new Man();
     6         
     7         Person lady = new Lady();
     8         
     9         Clothing jacket = new Jacket();
    10         
    11         Clothing trouser = new Trouser();
    12         
    13         jacket.personDressCloth(man);
    14         trouser.personDressCloth(man);
    15 
    16         jacket.personDressCloth(lady);
    17         trouser.personDressCloth(lady);
    18     }
    19 }
     1 public abstract class Person {
     2 
     3     private Clothing clothing;
     4     
     5     private String type;
     6 
     7     public Clothing getClothing() {
     8         return clothing;
     9     }
    10 
    11     public void setClothing() {
    12         this.clothing = ClothingFactory.getClothing();
    13     }
    14     
    15     public void setType(String type) {
    16         this.type = type;
    17     }
    18     
    19     public String getType() {
    20         return this.type;
    21     }
    22     
    23     public abstract void dress();
    24 }
    1 public abstract class Clothing {
    2 
    3     public abstract void personDressCloth(Person person);
    4 }
     1 public class Lady extends Person {
     2 
     3     public Lady() {
     4         setType("女人");
     5     }
     6     
     7     public void dress() {
     8         Clothing clothing = getClothing();
     9         clothing.personDressCloth(this);
    10     }
    11 }
    1 public abstract class Clothing {
    2 
    3     public abstract void personDressCloth(Person person);
    4 }
    1 public class Jacket extends Clothing {
    2 
    3     public void personDressCloth(Person person) {
    4         System.out.println(person.getType() + "穿马甲");
    5     }
    6 }
     1 @SuppressWarnings("static-access")
     2 public class ClothingFactory {
     3     private static Clothing clothing;
     4     
     5     public ClothingFactory(Clothing clothing){
     6         this.clothing = clothing;
     7     }
     8     
     9     public static Clothing getClothing() { 
    10         return clothing;
    11     }
    12 
    13 }
    1 public class Trouser extends Clothing {
    2 
    3     public void personDressCloth(Person person) {
    4         System.out.println(person.getType() + "穿裤子");
    5     }
    6 }
  • 相关阅读:
    Class的一些使用技巧?
    简述tcp和udp的区别?
    java中list和map详解
    $(this) 和 this 关键字在 jQuery 中有何不同?
    多维数组转一维数组
    纯CSS画基本图形
    2020前端面试题个人收藏
    最简单的移动端适配方案(rem+vw)--没有之一
    http-serve开启一个服务器
    微信小程序端 Provisional headers are shown
  • 原文地址:https://www.cnblogs.com/huzi007/p/4045500.html
Copyright © 2020-2023  润新知