这几周一直在研究类模式之类的问题,上午正好有机会和大家讨论一下.
前一个项目我们引用了开源软件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 Mapdrivers = 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”