package com.yanyu.Bridge;
//avi文件
public class AVIFile implements VideoFile {
public void decode(String fileName) {
System.out.println("avi视频文件:"+ fileName);
}
}
java复制代码
package com.yanyu.Bridge;
//rmvb文件
public class REVBBFile implements VideoFile {
public void decode(String fileName) {
System.out.println("rmvb文件:" + fileName);
}
}
抽象化(Abstraction)角色
java复制代码
package com.yanyu.Bridge;
//操作系统版本
public abstract class OperatingSystemVersion {
protected VideoFile videoFile;
public OperatingSystemVersion(VideoFile videoFile) {
this.videoFile = videoFile;
}
public abstract void play(String fileName);
}
扩展抽象化(Refined Abstraction)角色
java复制代码
package com.yanyu.Bridge;
//Windows版本
public class Windows extends OperatingSystemVersion {
public Windows(VideoFile videoFile) {
super(videoFile);
}
public void play(String fileName) {
videoFile.decode(fileName);
}
}
java复制代码
package com.yanyu.Bridge;
//mac版本
public class Mac extends OperatingSystemVersion {
public Mac(VideoFile videoFile) {
super(videoFile);
}
public void play(String fileName) {
videoFile.decode(fileName);
}
}
客户端类
java复制代码
package com.yanyu.Bridge;
//测试类
public class Client {
public static void main(String[] args) {
OperatingSystemVersion os = new Windows(new AVIFile());
os.play("战狼3");
}
}
在 JDBC 中,数据访问 API 和数据库驱动实现是分离的。数据访问 API 是一组接口和类,定义了数据库操作的抽象方法和常量。而具体的数据库驱动实现则是一组不同的 jar 包,每个包对应一种数据库的不同驱动实现。这样设计的好处是可以实现代码的复用,将代码的改动范围限定在实现层次结构中,不影响客户端的使用。
package com.yanyu.Facade;
//灯类
public class Light {
public void on() {
System.out.println("打开了灯....");
}
public void off() {
System.out.println("关闭了灯....");
}
}
java复制代码
package com.yanyu.Facade;
//电视类
public class TV {
public void on() {
System.out.println("打开了电视....");
}
public void off() {
System.out.println("关闭了电视....");
}
}
java复制代码
package com.yanyu.Facade;
//空调类
public class AirCondition {
public void on() {
System.out.println("打开了空调....");
}
public void off() {
System.out.println("关闭了空调....");
}
}
客户端类
java复制代码
package com.yanyu.Facade;
//测试类
public class Client {
public static void main(String[] args) {
//创建外观对象
SmartAppliancesFacade facade = new SmartAppliancesFacade();
//客户端直接与外观对象进行交互
facade.say("打开家电");
facade.say("关闭家电");
}
}
package step1;
public class Client {
public static void main(String[] args) {
//创建一个抽象化角色的对象,通过XML配置文件获取其具体实现类的名称
FileConvertor fileConvertor = (FileConvertor) XMLUtils.getBean("className1");
//将一个实现化角色的对象注入到抽象化角色中,通过XML配置文件获取其具体实现类的名称
fileConvertor.setDataHandler((DataHandler) XMLUtils.getBean("className2"));
//调用抽象化角色的方法,实现对文件的转换
fileConvertor.translate();
}
}
实现化角色
java复制代码
package step1;
/********** Begin *********/
//定义一个抽象的数据处理类,作为实现化角色
public abstract class DataHandler{
//定义一个抽象的数据读取方法,由子类实现
public abstract void readData();
}
/********** End *********/
具体实现化角色
java复制代码
package step1;
//定义一个从Oracle数据库中读取数据的类,继承自DataHandler类,作为具体实现化角色
public class OracleHandler extends DataHandler{
//重写父类的抽象方法,实现具体的数据读取操作
@Override
public void readData() {
System.out.println("从Oracle数据库中读取数据");
}
}
java复制代码
package step1;
public class SQLServerHandle extends DataHandler{
@Override
public void readData() {
System.out.println("从SQLServer数据库中读取数据");
}
}
抽象化角色
java复制代码
package step1;
/********** Begin *********/
//定义一个抽象的文件转换类,作为抽象化角色
public abstract class FileConvertor{
//定义一个受保护的数据处理类的引用,作为实现化角色的接口
protected DataHandler handler;
//定义一个公共的方法,用于设置数据处理类的对象,实现桥接的过程
public void setDataHandler(DataHandler handler) {
this.handler = handler;
}
//定义一个抽象的方法,用于转换文件,由子类实现,调用数据处理类的方法
public abstract void translate();
}
/********** End *********/
扩展抽象类
java复制代码
package step1;
//定义一个PDF文件转换类,继承自FileConvertor类,作为扩展抽象化角色
public class PDFConvertor extends FileConvertor{
//重写父类的抽象方法,实现具体的文件转换操作
@Override
public void translate() {
/********** Begin *********/
//调用实现化角色的方法,读取数据
handler.readData();
/********** End *********/
//打印提示信息,表示转换成PDF格式的数据
System.out.println("转换成PDF格式的数据");
}
}
java复制代码
package step1;
public class TXTConvertor extends FileConvertor{
@Override
public void translate() {
/********** Begin *********/
handler.readData();
/********** End *********/
System.out.println("转换成TXT格式的数据");
}
}
java复制代码
package step1;
public class XMLConvertor extends FileConvertor{
@Override
public void translate() {
/********** Begin *********/
handler.readData();
/********** End *********/
System.out.println("转换成XML格式的数据");
}
}