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


    桥接模式(Bridge Pattern):将抽象部分与其实现部分分离,使它们都可以独立地变化。它是一种对象结构型模式,又称为柄体(Handle and Body)模式或接口(Interface)模式。桥接模式用一种巧妙的方式处理多层继承存在的问题。桥接模式采用抽象关联取代了传统的多层继承,将类之间的静态继承关系转换为动态的对象组合关系,使得系统更加灵活,并易于扩展,同时有效控制了系统中类的个数。

    合成/聚合复用原则(CARP),尽量使用合成/聚合,尽量不要使用类继承。[J&DP]

     

     

    1. //首先,我们定义一个接口Implementor,它表示实现部分的接口
    2. public interface Implementor {
    3. void operationImpl();
    4. }
    5. //然后,我们创建两种实现这个接口的具体类:
    6. public class ConcreteImplementorA implements Implementor {
    7. @Override
    8. public void operationImpl() {
    9. System.out.println("ConcreteImplementorA operationImpl()");
    10. }
    11. }
    12. public class ConcreteImplementorB implements Implementor {
    13. @Override
    14. public void operationImpl() {
    15. System.out.println("ConcreteImplementorB operationImpl()");
    16. }
    17. }
    18. //接下来,我们定义一个抽象类Abstraction,它包含一个对Implementor的引用:
    19. public abstract class Abstraction {
    20. protected Implementor implementor;
    21. public Abstraction(Implementor implementor) {
    22. this.implementor = implementor;
    23. }
    24. public void operation() {
    25. implementor.operationImpl();
    26. }
    27. }
    28. //现在,我们创建两个继承自Abstraction的具体类,每个都接受一个特定的Implementor类型:
    29. public class RefinedAbstractionA extends Abstraction {
    30. public RefinedAbstractionA(Implementor implementor) {
    31. super(implementor);
    32. }
    33. }
    34. public class RefinedAbstractionB extends Abstraction {
    35. public RefinedAbstractionB(Implementor implementor) {
    36. super(implementor);
    37. }
    38. }
    39. //最后,在客户端代码中,我们可以根据需要组合抽象部分和实现部分:
    40. public class Client {
    41. public static void main(String[] args) {
    42. Implementor implementorA = new ConcreteImplementorA();
    43. Implementor implementorB = new ConcreteImplementorB();
    44. Abstraction abstractionA1 = new RefinedAbstractionA(implementorA);
    45. Abstraction abstractionA2 = new RefinedAbstractionA(implementorB);
    46. Abstraction abstractionB1 = new RefinedAbstractionB(implementorA);
    47. Abstraction abstractionB2 = new RefinedAbstractionB(implementorB);
    48. // 使用不同的组合调用operation
    49. abstractionA1.operation();
    50. abstractionA2.operation();
    51. abstractionB1.operation();
    52. abstractionB2.operation();
    53. }
    54. }

  • 相关阅读:
    java-net-php-python-java图书借阅管理系统设计演示视频计算机毕业设计程序
    SpringCloud-1.服务注册与发现(Eureka/Zookeeper/Consul)
    公众号查题:一步一步搭建属于自己的查题
    JS库-jQuery入门到掌握
    PCL 刚性物体的位姿估计 PFH、FPFH、VFH、PPF
    CloudCompare&PCL ICP配准(点到面)
    C++常见设计模式
    element-ui动态设置tabel时,表格错乱,表头闪烁的坑
    电子学:第012课——实验 13:烧烤 LED
    C嘎嘎 - 函数与指针
  • 原文地址:https://blog.csdn.net/qq_34690079/article/details/136288661