1. 程式人生 > >Java設計模式應用——橋接模式

Java設計模式應用——橋接模式

com log reat hdfs service() rri 不同類 適合 reg

性能管理系統中,數據產生後需要經過采集,匯聚,入庫三個流程,用戶才能查詢使用。

采集可以是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設計模式應用——橋接模式