ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

12桥接模式

2021-07-03 20:34:59  阅读:223  来源: 互联网

标签:Abstraction IImplementor 桥接 模式 12 抽象 public


一、桥接模式定义

1.桥接模式也称为桥梁模式、接口模式或柄体模式,是将抽象部分与它的具体实现部分分离,使它们都可以独立地变化,属于结构型模式

2.桥接模式主要目的是通过组合的方式建立两个类之间的联系,而不是继承。但又类似于多重继承方案,但是多重继承方案往往违背了类的单一职责原则,其复用性比较差,桥接模式是比多重继承更好的替代方案。桥接模式的核心在于解耦抽象和实现

3.桥接模式的应用场景:

  A.在抽象和具体实现之间需要增加更多的灵活性的场景

  B.一个类存在两个(或多个)独立变化的维度,而这两个(或多个)维度都需要独立进行扩展

  C.不希望使用继承,或因为多层继承导致系统类的个数剧增

二、桥接模式示例

1.桥接模式主要包含四种角色:

  A.抽象(Abstraction):该类持有一个对实现角色的引用,抽象角色中的方法需要实现角色来实现。抽象角色一般为抽象类(构造函数规定子类要传入一个实现对象)

  B.修正抽象(RefinedAbstraction):Abstraction的具体实现,对Abstraction的方法进行完善和扩展

  C.实现(Implementor):确定实现维度的基本操作,提供给Abstraction使用,该类一般为接口或抽象类

  D.具体实现(ConcreteImplementor):Implementor的具体实现

2.桥接模式通用写法

 1 public abstract class Abstraction {
 2     protected IImplementor mImplementor;
 3 
 4     public Abstraction(IImplementor implementor){
 5         this.mImplementor = implementor;
 6     }
 7 
 8     public void operation(){
 9         this.mImplementor.operationImpl();
10     }
11 }
12 
13 public class RefinedAbstraction extends Abstraction {
14 
15     public RefinedAbstraction(IImplementor implementor) {
16         super(implementor);
17     }
18 
19     @Override
20     public void operation() {
21         super.operation();
22         System.out.println("refined operation");
23     }
24 }
25 
26 public interface IImplementor {
27     void operationImpl();
28 }
29 
30 public class ConcreteImplementorA implements IImplementor {
31     @Override
32     public void operationImpl() {
33         System.out.println("I'm ConcreteImplementorA");
34     }
35 }
36 
37 public class GeneralBridgeTest {
38     public static void main(String[] args) {
39         IImplementor imp = new ConcreteImplementorA();
40         Abstraction abs = new RefinedAbstraction(imp);
41         abs.operation();
42     }
43 }

3.桥接模式优缺点

  A.优点

    a.分离抽象部分和具体实现部分

    b.提高了系统的扩展性

    c.符合开闭原则

    d.符合合成复用原则

  B.缺点

    a.增加了系统的理解与设计难度

    b.需要正确的识别系统中两个独立变化的维度

标签:Abstraction,IImplementor,桥接,模式,12,抽象,public
来源: https://www.cnblogs.com/it-szp/p/14967436.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有