性能管理系统中,数据产生后需要经过采集,汇聚,入库三个流程,用户才能查询使用。

采集可以是snmp采集,也可以是ems采集;汇聚可以使storm汇聚,也可以是spark汇聚;入库可以是hdfs入库,也可以是mppdb入库。

针对不同场景,我们可以灵活选择不同的采集,汇聚,入库方式。这种一个功能需要多种服务支持,每种服务又有不同类型的实现,使用桥接模式再适合不过。

(注:这里仅仅是桥接模式的例子,实际应用中,采集、汇聚、入库时异步执行的,他们之间通过消息通信)

桥接模式,顾名思义,就是把每种服务看做一座桥,我们可以根据实际场景选择不同的桥。

上述例子表示数据产生到可以使用之前需要经过三座桥:采集桥->汇聚桥->入库桥。每座桥可以选择不同的构造。

下面来看具体代码

1、 采集桥

package com.coshaho.learn.bridge.collect;

/**
*
* CollectionService.java Create on 2017年6月1日 下午11:00:10
*
* 类功能说明: 采集服务
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public abstract class CollectionService
{
abstract void execute();
public void run()
{
execute();
}
}

2、 汇聚桥

package com.coshaho.learn.bridge.aggregate;

import com.coshaho.learn.bridge.collect.CollectionService;

/**
*
* AggregationService.java Create on 2017年6月1日 下午11:00:23
*
* 类功能说明: 汇聚服务
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public abstract class AggregationService
{
public void run()
{
if(null != collectionService)
{
collectionService.run();
}
execute();
} abstract void execute();
CollectionService collectionService;
public AggregationService(CollectionService collectionService)
{
this.collectionService = collectionService;
}
}

3、 入库桥

package com.coshaho.learn.bridge.store;

import com.coshaho.learn.bridge.aggregate.AggregationService;

/**
*
* StoreService.java Create on 2017年6月1日 下午11:08:57
*
* 类功能说明: 入库服务
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public abstract class StoreService
{
public void run()
{
if(null != aggregationService)
{
aggregationService.run();
}
execute();
} abstract void execute();
AggregationService aggregationService;
public StoreService(AggregationService aggregationService)
{
this.aggregationService = aggregationService;
}
}

4、 EMS采集桥

package com.coshaho.learn.bridge.collect;

public class EMSCollectionService extends CollectionService
{
@Override
void execute()
{
System.out.println("EMS collection.");
}
}

5、 SNMP采集桥

package com.coshaho.learn.bridge.collect;

public class SNMPCollectionService extends CollectionService
{
@Override
void execute()
{
System.out.println("SNMP collection.");
}
}

6、 Storm汇聚桥

package com.coshaho.learn.bridge.aggregate;

import com.coshaho.learn.bridge.collect.CollectionService;

public class StormAggregationService extends AggregationService
{
public StormAggregationService(CollectionService collectionService)
{
super(collectionService);
} @Override
void execute()
{
System.out.println("Storm aggregation.");
}
}

7、 Spark汇聚桥

package com.coshaho.learn.bridge.aggregate;

import com.coshaho.learn.bridge.collect.CollectionService;

public class SparkAggregationService extends AggregationService
{
public SparkAggregationService(CollectionService collectionService)
{
super(collectionService);
} @Override
void execute()
{
System.out.println("Spark aggregation.");
}
}

8、 MPPDB入库桥

package com.coshaho.learn.bridge.store;

import com.coshaho.learn.bridge.aggregate.AggregationService;

public class MPPDBStoreService extends StoreService
{
public MPPDBStoreService(AggregationService aggregationService)
{
super(aggregationService);
} @Override
void execute()
{
System.out.println("MPPDB store.");
}
}

9、 HDFS入库桥

package com.coshaho.learn.bridge.store;

import com.coshaho.learn.bridge.aggregate.AggregationService;

public class HDFSStoreService extends StoreService
{
public HDFSStoreService(AggregationService aggregationService)
{
super(aggregationService);
} @Override
void execute()
{
System.out.println("HDFS store.");
}
}

10、 测试类

package com.coshaho.learn.bridge;

import com.coshaho.learn.bridge.aggregate.AggregationService;
import com.coshaho.learn.bridge.aggregate.StormAggregationService;
import com.coshaho.learn.bridge.collect.CollectionService;
import com.coshaho.learn.bridge.collect.SNMPCollectionService;
import com.coshaho.learn.bridge.store.HDFSStoreService;
import com.coshaho.learn.bridge.store.StoreService; /**
*
* BridgeTest.java Create on 2017年6月1日 下午10:59:43
*
* 类功能说明: 桥接模式测试
*
* Copyright: Copyright(c) 2013
* Company: COSHAHO
* @Version 1.0
* @Author coshaho
*/
public class BridgeTest
{
public static void main(String[] args)
{
CollectionService snmpService = new SNMPCollectionService();
AggregationService stormService = new StormAggregationService(snmpService);
StoreService hdfsService = new HDFSStoreService(stormService);
hdfsService.run();
}
}

11、 测试结果

SNMP collection.
Storm aggregation.
HDFS store.

Java设计模式应用——桥接模式的更多相关文章

  1. java设计模式7——桥接模式

    java设计模式7--桥接模式 1.桥接模式介绍 桥接模式是将抽象部分与它的实现部分分离,使他们都可以独立的变化.它是一种对象结构型模式,又称为柄体模式或接口模式. 2.解决问题 2.1.将复杂的组合 ...

  2. java设计模式之桥接模式

    桥接模式 桥接(Bridge)是用于把抽象化与实现化解耦,使得二者可以独立变化.这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦.这种模式涉及到一个作为桥接的 ...

  3. Java设计模式:桥接模式

    问题提出 生活中有很多事物集合,设为A1,A2......Am ,而每个事物都有功能F1,F2....Fn. 例如邮局的发送业务.简单模拟有两类事物:信件和包裹,均有平邮和挂号邮寄功能.程序设计中如何 ...

  4. java设计模式之-----桥接模式

    一.概念定义 将抽象部分和实现部分分离,使他们都可以独立的变化.(这句话有点抽象啊..) 在软件系统中,某种类型由于自身逻辑,具有多个维度的变化,如何利用面向对象的技术来使得该类型沿着多方向变化,而又 ...

  5. JAVA设计模式之桥接模式(bridge)

    桥接模式: 分离抽象与具体实现,让他们可以独自发展,防止类爆炸 场景: 过年走亲戚是我们中国人传统的习俗,走亲戚那就少不了要买东西(苹果,牛奶等等),这些具体的东西就是具体的类 蒙牛牛奶,有机苹果,有 ...

  6. 八戒转世投胎竟然是Java设计模式:桥接模式

    目录 示例 代码实例 桥接模式 定义 意图 主要解决问题 何时使用 优缺点 八戒转世投胎的故事 示例 请开发一个画图程序,可以画各种颜色不同形状的图形,请用面向对象的思 想设计图形 分析: 1.比如有 ...

  7. java面试题之----jdbc中使用的设计模式(桥接模式)

    1.JDBC(JavaDatabase Connectivity) JDBC是以统一方式访问数据库的API. 它提供了独立于平台的数据库访问,也就是说,有了JDBC API,我们就不必为访问Oracl ...

  8. Java设计模式——装饰者模式

    JAVA 设计模式 装饰者模式 用途 装饰者模式 (Decorator) 动态地给一个对象添加一些额外的职责.就增加功能来说,Decorator 模式相比生成子类更为灵活. 装饰者模式是一种结构式模式 ...

  9. 浅析JAVA设计模式之工厂模式(一)

    1 工厂模式简单介绍 工厂模式的定义:简单地说,用来实例化对象,取代new操作. 工厂模式专门负责将大量有共同接口的类实例化.工作模式能够动态决定将哪一个类实例化.不用先知道每次要实例化哪一个类. 工 ...

随机推荐

  1. [MySQL]修改root密码的4种方法(以windows为例)

    方法1: 用SET PASSWORD命令 首先登录MySQL. 格式:mysql> set password for 用户名@localhost = password('新密码'); 例子:my ...

  2. /etc/vim/vimrc的一个的配置

    (转)Vim 配置文件===/etc/vimrc "===================================================================== ...

  3. vue报错 Uncaught TypeError: Cannot read property ‘children ’ of null

    Uncaught TypeError: Cannot read property ‘children ’ of null ratings未渲染完毕,就跳走goods了,取消默认跳转,即可

  4. Mongodb之使用rpm包安装配置启动

    下载rpm包 wget https://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/3.2/x86_64/RPMS/mongod ...

  5. ubuntu16.04下安装wps

    首先下载安装 下载 wps for linux 在终端用命令安装 sudo dpkg -i wps-office_10.~a21_amd64.deb 字体缺失问题 下载 wps_symbol_font ...

  6. spark-sklearn(spark扩展scikitlearn)

    (1)官方规定安装条件:此包装具有以下要求: -*最新版本的scikit学习. 版本0.17已经过测试,旧版本也可以使用.- *Spark> = 2.0. Spark可以从对应官网下载[Spar ...

  7. HDU 4848 - Wow! Such Conquering!

    Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Descriptio ...

  8. 完整的Jquery-easyUI显示分页数据例子

    虽然说是入门的例子,但本人尽量做的详细点,以后会继续更新,部分功能 此外,为了后继easyui的学习,做了一个简单的框架:后台采用hibernate2.5+struts2开发:数据库用mysql.红色 ...

  9. android 量产软件改动信息(持续更新)

    http://blog.csdn.net/xubin341719/article/details/8449352 关键词:android 4.0默认语言蓝牙名称 MTP名称默认时区关于平板电脑 内核版 ...

  10. 移动IP 它最初设想每个人都在编写应用层(7)API而不是传输层(4)API 对于QUIC,连接的标识符不是“套接字”(源/目标端口/地址协议组合)的传统概念,而是分配给连接的64位标识符

    小结: 1. 因为您对OSI模型的教育中缺少的一点是,它最初设想每个人都在编写应用层(7)API而不是传输层(4)API.应该有像应用程序服务元素之类的 东西,它们可以以标准方式处理文件传输和消息传递 ...