zoukankan      html  css  js  c++  java
  • 类模式用Bridge模式重写了Libvirt框架

    这几周一直在研究类模式之类的问题,上午正好有机会和大家讨论一下.

        前一个项目我们引用了开源软件Libvirt,Libvirt的实现非常不错,可以支撑很多的Hypervisor。这两天再把设计模式翻出来看看,发明本来Libvirt是使用了Bridge设计模式,和Service Provider模式还有一定的区别,特用Java提供了框架如下:

        

        Connect.java:这个类在Bridge模式中没有对应观点

    package com.cisco.gendwang;
    
    public class Connect 
    {
    }

        

        Driver.java:这个类在Bridge模式中相当于Implementator

        

    package com.cisco.gendwang;
    
    public interface Driver 
    {
    	Connect open(String url);
    	String getHostName(Connect conn);
    	void close(Connect conn);
    }

        

        EsxiDriver.java:这个类在Bridge模式中相当于ConcreteImplementator1

        

    package com.cisco.gendwang;
    
    public class EsxiDriver implements Driver 
    {
    	public EsxiDriver()
    	{
    		System.out.println("ESXi driver is loaded");
    	}
    	
    	public Connect open(String url)
    	{
    		System.out.println("Get an ESXi connection");
    		return new Connect();
    	}
    	
    	public String getHostName(Connect conn)
    	{
    		System.out.println("Host Name: CRDC-21");
    		return "CRDC-21";
    	}
    	
    	public void close(Connect conn)
    	{
    		System.out.println("Close an ESXi connection");
    	}
    }

        

        

        XenDriver.java:这个类在Bridge模式中相当于ConcreteImplementator2

        

    package com.cisco.gendwang;
    
    public class XenDriver implements Driver 
    {
    	public XenDriver()
    	{
    		System.out.println("XEN driver is loaded");
    	}
    	
    	public Connect open(String url)
    	{
    		System.out.println("Get an XEN connection");
    		return new Connect();
    	}
    	
    	public String getHostName(Connect conn)
    	{
    		System.out.println("Host Name: CRDC-90");
    		return "CRDC-90";
    	}
    	
    	public void close(Connect conn)
    	{
    		System.out.println("Close an XEN connection");
    	}
    }
        每日一道理
    如果说友谊是一颗常青树,那么,浇灌它的必定是出自心田的清泉;如果说友谊是一朵开不败的鲜花,那么,照耀它的必定是从心中升起的太阳。 多少笑声都是友谊唤起的,多少眼泪都是友谊揩干的。友谊的港湾温情脉脉,友谊的清风灌满征帆。友谊不是感情的投资,它不需要股息和分红。(友谊可以换其他词语)

        

        

        

        Libvirt.java:这个类在Bridge中相当于Abstraction

        

    package com.cisco.gendwang;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class Libvirt 
    {
    	private Driver driver;
    	private static final Map<String, Driver> drivers = new HashMap<String, Driver>();
    	
    	public static void registerDriver(String driverName, Driver driver)
    	{
    		drivers.put(driverName.toLowerCase(), driver);
    	}
    	
    	public Connect virConnectOpen(String url)
    	{
    		int colonIndex = url.indexOf(":");
    		if(colonIndex == -1)
    		{
    			return null;
    		}
    		
    		String prefix = url.substring(0, colonIndex);
    		
    		driver = drivers.get(prefix.toLowerCase());
    		
    		return driver.open(url);
    	}
    	
    	public String virGetHostName(Connect conn)
    	{
    		return driver.getHostName(conn);
    	}
    	
    	public void virConnectClose(Connect conn)
    	{
    		driver.close(conn);
    	}
    }

        Application.java: 这个类在Bridge中是Client

    package com.cisco.gendwang;
    
    public class Application 
    {
    	public static void main(String[] args)
    	{
    		Libvirt.registerDriver("ESXi", new EsxiDriver());
    		Libvirt.registerDriver("XEN", new XenDriver());
    		
    		Libvirt libvirt1 = new Libvirt();
    		Connect conn1 = libvirt1.virConnectOpen("xen://10.74.125.90");
    		libvirt1.virGetHostName(conn1);
    		libvirt1.virConnectClose(conn1);
    		
    		Libvirt libvirt2 = new Libvirt();
    		Connect conn2 = libvirt2.virConnectOpen("esxi://10.74.125.21");
    		libvirt2.virGetHostName(conn2);
    		libvirt2.virConnectClose(conn2);
    	}
    }

    文章结束给大家分享下程序员的一些笑话语录: 警告
    有一个小伙子在一个办公大楼的门口抽着烟,一个妇女路过他身边,并对他 说, “你知道不知道这个东西会危害你的健康?我是说, 你有没有注意到香烟 盒上的那个警告(Warning)?”
    小伙子说,“没事儿,我是一个程序员”。
    那妇女说,“这又怎样?”
    程序员说,“我们从来不关心 Warning,只关心 Error”

  • 相关阅读:
    零散的小知识0
    windows 安装touch指令
    sba
    jQuery中mouseenter vs mouseover 以及 mouseleave vs mouseout
    SSAS: Pareto Analysis
    SSAS: Display measures in Rows
    SSAS: Using DMV Queries to get Cube Metadata
    Do not execute sub-report when it's hidden in SSRS
    Read data from Excel XML file
    Concatenating Row Values in Transact-SQL
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3093595.html
Copyright © 2011-2022 走看看