桥接模式的三维度实例

桥接模式三维度实例

题目:如果系统中某对象有三个维度,如某日志记录器既可以支持不同的操作系统,还可以支持多种编程语言,并且可以使用不同的输出方式。请使用桥接模式设计该系统。

采用xml文件处理数据方式,以下为代码


import java.io.File;
import javax.xml.parsers.*;
import org.w3c.dom.*;

public class XmlUtil {
    //配置文件读取处理类
    public static Object getBean(String args)
    {
        try{
        //创建一个文档对象
            DocumentBuilderFactory  dFactory=DocumentBuilderFactory.newInstance();
            DocumentBuilder builder=dFactory.newDocumentBuilder();
            Document doc=builder.parse(new File("E:/workplace/Design moddle/Qiaojie.xml"));
            //获取包含类名的文本节点
            NodeList n1=doc.getElementsByTagName("classname");
            Node classnode = null;
            String className=null;
            if(args.equals("OutPut"))
            {
                classnode=n1.item(0).getFirstChild();
            }else if(args.equals("OperatingSystem"))
            {
                classnode=n1.item(1).getFirstChild();
            }else if(args.equals("EncodingLanguage"))
            {
                classnode=n1.item(2).getFirstChild();
            }
            className=classnode.getNodeValue();
            //通过类名生成实例对象并将其返回
            Class c=Class.forName("test82."+className);
            Object obj=c.newInstance();
            return obj;
        }catch(Exception e)
        {
            e.getStackTrace();
            return null;
        }

    }
}

接下来xml文件


<config>
<classname>FileOutclassname>
<classname>Linuxclassname>
<classname>C_yuyanclassname>
config>

编程语言抽象类EncodingLanguage及它的两个子类

//定义抽象编程语言类
public abstract class EncodingLanguage {
    OutPut output;
    public void setOuPut(OutPut out)
    {
        this.output=out;
    }
    public abstract void language(String system);
}


//定义java语言类
public class Java extends EncodingLanguage{

    public void language(String system) {
        // TODO Auto-generated method stub
        String language="Java语言\n";
        this.output.output(system,language);
        //System.out.println("java编程!\n");
    }

}

//定义c语言类
public class C_yuyan extends EncodingLanguage {

    public void language(String system) {
        // TODO Auto-generated method stub
        String language="c语言";
        this.output.output(system, language);
        //System.out.println("C语言编程!\n");
    }
}

输出抽象类以及它的子类

//定义输出抽象类
public abstract class OutPut {

    public abstract void output(String system,String language);
}
//文件输出方式类
public class FileOut extends OutPut{

    public void output(String system, String language) {
        // TODO Auto-generated method stub
        String means="File方式输出";
        System.out.println("在"+system+"用"+language+"以"+means);
    }


}
//控制台输出类
public class ContrleOut extends OutPut{

    public void output(String system, String language) {
        // TODO Auto-generated method stub
        String means="控制台方式";
        System.out.println("在"+system+"用"+language+"以"+means);
    }

}

操作系统抽象类和它的子类

//定义抽象操作系统类
public abstract class OperatingSystem {
    EncodingLanguage encodinglanguage;
    public void setlanguage(EncodingLanguage lang)
    {
        this.encodinglanguage=lang;
    }
public abstract void type();
}
//Windows系统类
public class Windows extends OperatingSystem{

    public void type() {
        // TODO Auto-generated method stub
        String system="windows系统";
        this.encodinglanguage.language(system);
        //System.out.println("正在使用Windows系统!");
    }

}
//Linux操作系统类
public class Linux extends OperatingSystem{

    public void type() {
        // TODO Auto-generated method stub
        String system="Linux系统";
        this.encodinglanguage.language(system);
        //System.out.println("正在是用Linux系统!");
    }

}

客户端测试类

//客户端测试类
public class Client {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        OutPut output=null;
        EncodingLanguage language=null;
        //System.out.println(language);
        OperatingSystem system=null;
        if(output==null && language==null && system==null)
        {
        output=(OutPut)XmlUtil.getBean("OutPut");
        language=(EncodingLanguage)XmlUtil.getBean("EncodingLanguage");
        //System.out.println(language);
        system=(OperatingSystem)XmlUtil.getBean("OperatingSystem");

        //System.out.println(output);
        //System.out.println(language);
        //System.out.println(system);
        }
        system.setlanguage(language);
        //System.out.println(language);
        language.setOuPut(output);
        system.type();
    }

}

最后运行结果

桥接模式的三维度实例_第1张图片

你可能感兴趣的:(设计模式)