博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
类模式用Bridge模式重写了Libvirt框架
阅读量:6702 次
发布时间:2019-06-25

本文共 3085 字,大约阅读时间需要 10 分钟。

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

    前一个项目我们引用了开源软件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
drivers = new HashMap
(); 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”

转载地址:http://bdgoo.baihongyu.com/

你可能感兴趣的文章
(Protype Pattern)原型模式
查看>>
[Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.3.1
查看>>
android stuio eclipse映射下的快捷键
查看>>
Insert Interval
查看>>
浅谈P2P终结者原理及其突破
查看>>
串口WIF简单I调试
查看>>
把《c++ primer》读薄(3-3 标准库bitset类型)
查看>>
MDI多文档窗体续
查看>>
img图片自适应宽和高[转]
查看>>
Android Studio体验(一)--Window版本安装
查看>>
ubuntu install express
查看>>
js中substr与substring的差别
查看>>
微软职位内部推荐-Senior Software Engineer
查看>>
FusionCharts简单教程(一)---建立第一个FusionCharts图形
查看>>
sql中实现split()功能
查看>>
ZOJ 2562 More Divisors(高合成数)
查看>>
[原]Android打包之跨平台打包
查看>>
C++的try_catch异常
查看>>
(转)思考:矩阵及变换,以及矩阵在DirectX和OpenGL中的运用问题:左乘/右乘,行优先/列优先,......
查看>>
HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。...
查看>>