龙空技术网

Java设计模式学习总结:桥接模式

数字化与智能化 956

前言:

如今各位老铁们对“java桥接模式和组合模式”可能比较关怀,兄弟们都需要了解一些“java桥接模式和组合模式”的相关文章。那么小编在网上网罗了一些关于“java桥接模式和组合模式””的相关内容,希望同学们能喜欢,朋友们快快来了解一下吧!

《大数据和人工智能交流》头条号向广大初学者新增C 、Java 、Python 、Scala、javascript 等目前流行的计算机、大数据编程语言,希望大家以后关注本头条号更多的内容。

相关链接

1、Java设计模式:建造者模式学习总结

2、Java设计模式:适配器模式学习总结

3、Java设计模式:原型模式(深克隆和浅克隆)学习总结

4、Java工厂设计模式学习笔记(详细总结)

5、面向对象设计原则总结(软件设计师必看)

桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

如果系统中某个类存在两个独立变化的维度,通过该模式可以将这两个维度分离出来,使两者可以独立扩展。如大型电子商城记录的用户行为日志,它既可以支持多种格式的输出(控制台、文本格式、XML格式等),也可以支持多种操作系统。对于这种多维度变化的系统,桥接模式降低系统的复杂性。

一、桥接模式应用场景举例

假设想绘制矩形、圆形、椭圆形、正方形,我们至少需要4个形状,但是如果绘制的图形有不同的颜色,如红、绿、蓝等此时绘制的方案如下:

第一种方案:

为每个形状都提供一套各种颜色的版本,如下图4个形状3种颜色,则需要12个类:

如果4种形状12种颜色则需要48个类,类的数量急剧增加。

第二种方案:

提供4个形状类,提供3种颜色类,根据实际的需要对形状和颜色进行组合,则类的个数为7个

显然第二种方案适合两种变化的维度,扩展性强。

桥接模式的结构:

Abstraction:抽象类

RefinedAbstraction:扩充抽象类

Implementor:实现类接口

ConcreteImplementor:具体实现类类

二、桥接模式的案例

现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。本实例使用桥接模式来模拟毛笔的使用过程。

package com.test;

public class Test {

public static void main(String[] args) {

Color color= new Blue();

Pen pen= new SmallPen();

pen.setColor(color);

pen.draw("鲜花");

}

}

interface Color

{

void bepaint(String penType,String name);

}

abstract class Pen

{

protected Color color;

public void setColor(Color color)

{

this.color=color;

}

public abstract void draw(String name);

}

//各种笔的实现类

class SmallPen extends Pen

{

public void draw(String name)

{

String penType="小号毛笔绘制";

this.color.bepaint(penType,name);

}

}

class MiddlePen extends Pen

{

public void draw(String name)

{

String penType="中号毛笔绘制";

this.color.bepaint(penType,name);

}

}

class BigPen extends Pen

{

public void draw(String name)

{

String penType="大号毛笔绘制";

this.color.bepaint(penType,name);

}

}

//各种颜色的实现类

class Red implements Color

{

public void bepaint(String penType,String name)

{

System.out.println(penType + "红色的"+ name + ".");

}

}

class Green implements Color

{

public void bepaint(String penType,String name)

{

System.out.println(penType + "绿色的"+ name + ".");

}

}

class Blue implements Color

{

public void bepaint(String penType,String name)

{

System.out.println(penType + "蓝色的"+ name + ".");

}

}

class White implements Color

{

public void bepaint(String penType,String name)

{

System.out.println(penType + "白色的"+ name + ".");

}

}

class Black implements Color

{

public void bepaint(String penType,String name)

{

System.out.println(penType + "黑色的"+ name + ".");

}

}

运行结果:小号毛笔绘制蓝色的鲜花

桥接模式优点:

1、分离抽象接口及其实现部分

2、可以取代多层继承方案,极大地减少了子类的个数

3、提高了系统的可扩展性,在两个变化维度中任意扩展一个维度,不需要修改原有系统,符合开闭原则

桥接模式缺点:

1、会增加系统的理解与设计难度,由于关联关系建立在抽象层,要求开发者一开始就要针对抽象层进行设计与编程

2、正确识别出系统中两个独立变化的维度并不是一件容易的事情

尊敬的读者:如果您感觉好麻烦关注、收藏、点赞,谢谢!

《大数据和人工智能交流》的宗旨

1、将大数据和人工智能的专业数学:概率数理统计、线性代数、决策论、优化论、博弈论等数学模型变得通俗易懂。

2、将大数据和人工智能的专业涉及到的数据结构和算法:分类、聚类 、回归算法、概率等算法变得通俗易懂。

3、最新的高科技动态:数据采集方面的智能传感器技术;医疗大数据智能决策分析;物联网智慧城市等等。

根据初学者需要会有C语言、Java语言、Python语言、Scala函数式等目前主流计算机语言。

根据读者的需要有和人工智能相关的计算机科学与技术、电子技术、芯片技术等基础学科通俗易懂的文章。

标签: #java桥接模式和组合模式