前言:
如今各位老铁们对“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桥接模式和组合模式