桥接模式实例与解析

  实例一:模拟毛笔

          现需要提供大中小3种型号的画笔,能够绘制5种不同颜色,如果使用蜡笔,我们需要准备3*5=15支蜡笔,也就是说必须准备15个具体的蜡笔类。而如果使用毛笔的话,只需要3种型号的毛笔,外加5个颜料盒,用3+5=8个类就可以实现15支蜡笔的功能。本实例使用桥接模式来模拟毛笔的使用过程。

public class BigPen extends Pen
{public void draw(String name){String penType="大号毛笔绘制";this.color.bepaint(penType,name);         }
}
public class Black implements Color
{public void bepaint(String penType,String name){System.out.println(penType + "黑色的"+ name + ".");}
}
public class Blue implements Color
{public void bepaint(String penType,String name){System.out.println(penType + "蓝色的"+ name + ".");}
}
public class Client
{public static void main(String a[]){Color color;Pen pen;color=(Color)XMLUtilPen.getBean("color");pen=(Pen)XMLUtilPen.getBean("pen");pen.setColor(color);pen.draw("鲜花");}
}
public interface Color
{void bepaint(String penType,String name);
}
public class Green implements Color
{public void bepaint(String penType,String name){System.out.println(penType + "绿色的"+ name + ".");}
}
public class MiddlePen extends Pen
{public void draw(String name){String penType="中号毛笔绘制";this.color.bepaint(penType,name);         }
}
public abstract class Pen
{protected Color color;public void setColor(Color color){this.color=color;}public abstract void draw(String name);
} 
public class Red implements Color
{public void bepaint(String penType,String name){System.out.println(penType + "红色的"+ name + ".");}
}
public class SmallPen extends Pen
{public void draw(String name){String penType="小号毛笔绘制";this.color.bepaint(penType,name);         }
}
public class White implements Color
{public void bepaint(String penType,String name){System.out.println(penType + "白色的"+ name + ".");}
}
import javax.xml.parsers.*;
import org.w3c.dom.*;
import org.xml.sax.SAXException;
import java.io.*;
public class XMLUtilPen
{
//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBean(String args){try{//创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;                            doc = builder.parse(new File("configPen.xml")); NodeList nl=null;Node classNode=null;String cName=null;nl = doc.getElementsByTagName("className");if(args.equals("color")){//获取包含类名的文本节点classNode=nl.item(0).getFirstChild();}else if(args.equals("pen")){//获取包含类名的文本节点classNode=nl.item(1).getFirstChild();}cName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Class c=Class.forName(cName);Object obj=c.newInstance();return obj;      }   catch(Exception e){e.printStackTrace();return null;}}
}
配置文件configPen.xml<?xml version="1.0"?>
<config><className>Blue</className><className>SmallPen</className>
</config>

桥接模式实例与解析 实例一:模拟毛笔相关推荐

  1. 桥接模式源码解析(jdk)

    现在我们来看一下桥接模式在源码中的一些应用,首先我们说一下,我们先看一个接口,首先我们看一下Driver的实现类,我们看到com.mysql.jdbc实现了Driver,添加了ORACLE的驱动,或者 ...

  2. 组合模式实例与解析 实例一:水果盘

    实例一:水果盘 在水果盘(Plate)中有一些水果,如苹果(Apple).香蕉(Banana).梨子(Pear),当然大水果盘中还可以有小水果盘,现需要对盘中的水果进行遍历(吃),当然如果对一个水果盘 ...

  3. 模板方法模式实例与解析--实例一:银行业务办理流程

    在银行办理业务时,一般都包含几个基本步骤,首先需要取号排队,然后办理具体业务,最后需要对银行工作人员进行评分.无论具体业务是取款.存款还是转账,其基本流程都一样.现使用模板方法模式模拟银行业务办理流程 ...

  4. 命令模式实例与解析--实例一:电视机遥控器

    电视机是请求的接收者,遥控器是请求的发送者,遥控器上有一些按钮,不同的按钮对应电视机的不同操作.抽象命令角色由一个命令接口来扮演,有三个具体的命令类实现了抽象命令接口,这三个具体命令类分别代表三种操作 ...

  5. 迭代器模式实例与解析---实例:电视机遥控器

    电视机遥控器就是一个迭代器的实例,通过它可以实现对电视机频道集合的遍历操作,本实例我们将模拟电视机遥控器的实现. public class Client {public static void dis ...

  6. 享元模式实例与解析实例二:共享网络设备(有外部状态)

    实例二:共享网络设备(有外部状态) 虽然网络设备可以共享,但是分配给每一个终端计算机的端口(Port)是不同的,因此多台计算机虽然可以共享同一个网络设备,但必须使用不同的端口.我们可以将端口从网络设备 ...

  7. 装饰模式实例与解析 实例一:变形金刚

    实例一:变形金刚 变形金刚在变形之前是一辆汽车,它可以在陆地上移动.当它变成机器人之后除了能够在陆地上移动之外,还可以说话:如果需要,它还可以变成飞机,除了在陆地上移动还可以在天空中飞翔. publi ...

  8. 结构设计模式之桥接模式

    结构 桥接模式将抽象部分与它的实现部分解耦,使得两者都能够独立变化. 抽象类Abstraction+扩充抽象类RefinedAbstraction+实现类接口Implementor+具体实现类Conc ...

  9. 设计模式与软考试题之桥接模式

    2009年上半年软件设计师考试下午试题最后一题考查桥接模式,原题如下: [全国计算机技术与软件专业技术资格(水平)考试 2009年上半年 软件设计师 下午试卷] 注:当年试题五.试题六和试题七三选一, ...

最新文章

  1. java mvc框架代码_JAVA技术学习笔记:SpringMVC框架(内附入门程序开发代码)
  2. IBM投资4000万美圆,加强对SAP®应用的支持
  3. 【Android 逆向】Android 系统文件分析 ( /proc/pid 进程号对应进程目录 | oom_adj | maps | smaps | mem | task | environ )
  4. Xamarin Android 所见即所得问题
  5. 翻译记忆软件:Trados 7/2006,兼容性和基本用法讨论
  6. [软件更新]迅雷v5.9.8.1084发布
  7. NVIDIA解码器代码官方示例
  8. 天线的主要技术指标及其含义—天线的输入阻抗
  9. 20HZ信号发生器电路图
  10. Java多线程--概述-转自林炳文Evankaka
  11. 计算机网络协议 | 只有程序员才能读懂的西游记 | 让我这样学习简直就是一种享受~
  12. asp空间和php空间_两个最新空间及回顾100Mphp及数个asp免费空间放
  13. 程序员制作epub电子书
  14. Android内存泄漏总结,一线互联网公司面经总结
  15. Oracle中如何记录访问数据库的登录信息?
  16. IIS 服务器启动和关闭
  17. Java利用TCP进行文件的传输
  18. 由“c++链接错误:未定义的引用“引发的思考
  19. wps公式如何加序号_Excel函数公式,批量填充方法大全
  20. Unity3D中C#调用iOS的静态库(*.a)

热门文章

  1. 8.final、权限、内部类、引用类型
  2. AXI4协议之AXI4-Full接口详解及实战
  3. js弹窗的3种方式:alert、confirm、prompt
  4. docker配置java环境(dockerfile方式)
  5. 629连接被计算机终止怎么解决,连接到宽带连接时出错629是怎么回事?怎么解决?...
  6. 在matlab中的循环语句,matlab中循环语句
  7. html九宫图div满屏居中,九宫格+DIV水平居中+div垂直居中+div内部文本居中+div内div居中...
  8. linux tmp 不自动清理,Linux tmp目录自动清理总结
  9. mysql递归死循环查询_MySQL 递归查询实践总结
  10. 漫步者lollipods如何调节音量_漫步者LolliPods真无线蓝牙耳机体验