java桥接模式
5.空客(Airbus)、波音(Boeing)和麦道(McDonnell-Douglas)都是飞机制造商,它们都生产载客飞机(Passenger Plane)和载货飞机(Cargo Plane)。现在需要设计一个系统,描述这些飞机制造商以及它们所制造的飞机种类。6.某软件公司要开发一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如TXT、XMLPDF等格式,同时该工具需要支持多种不同的
·
一、实验目的:
1. 掌握软件设计模式中的桥接模式的特点;
2. 能够用桥接模式编写程序,解决实际问题。
二、实验内容和要求:
按照书本例题完成P146的第5、6题。
5.空客(Airbus)、波音(Boeing)和麦道(McDonnell-Douglas)都是飞机制造商,它们都生产载客飞机(Passenger Plane)和载货飞机(Cargo Plane)。现在需要设计一个系统,描述这些飞机制造商以及它们所制造的飞机种类。
6.某软件公司要开发一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如TXT、XMLPDF等格式,同时该工具需要支持多种不同的数据库。试使用桥接模式对其进行设计并使用Java代码编程模拟实现。
// 空客制造商类
public class Airbus extends AircraftManufacturer {
public Airbus() {
super("Airbus");
}
@Override
public Plane createPassengerPlane() {
return new PassengerPlane();
}
@Override
public Plane createCargoPlane() {
return new CargoPlane();
}
}
public abstract class AircraftManufacturer {
private String name;
public AircraftManufacturer(String name) {
this.name = name;
}
public String getName() {
return name;
}
public abstract Plane createPassengerPlane();
public abstract Plane createCargoPlane();
}
// 波音制造商类
public class Boeing extends AircraftManufacturer {
public Boeing() {
super("Boeing");
}
@Override
public Plane createPassengerPlane() {
return new PassengerPlane();
}
@Override
public Plane createCargoPlane() {
return new CargoPlane();
}
}
// 载货飞机类
public class CargoPlane implements Plane {
@Override
public void fly() {
System.out.println("货机正在天空中飞行.");
}
}
// 麦道制造商类
public class McDonnellDouglas extends AircraftManufacturer {
public McDonnellDouglas() {
super("McDonnell-Douglas");
}
@Override
public Plane createPassengerPlane() {
return new PassengerPlane();
}
@Override
public Plane createCargoPlane() {
return new CargoPlane();
}
}
// 载客飞机类
public class PassengerPlane implements Plane {
@Override
public void fly() {
System.out.println("客机正在天空中飞行.");
}
}
// 飞机接口
public interface Plane {
void fly();
}
public class Client {
public static void main(String[] args) {
AircraftManufacturer airbus = new Airbus();
AircraftManufacturer boeing = new Boeing();
AircraftManufacturer mcdonnellDouglas = new McDonnellDouglas();
Plane airbusPassengerPlane = airbus.createPassengerPlane();
Plane boeingPassengerPlane = boeing.createPassengerPlane();
Plane mcdonnellDouglasPassengerPlane = mcdonnellDouglas.createPassengerPlane();
Plane airbusCargoPlane = airbus.createCargoPlane();
Plane boeingCargoPlane = boeing.createCargoPlane();
Plane mcdonnellDouglasCargoPlane = mcdonnellDouglas.createCargoPlane();
airbusPassengerPlane.fly();
boeingPassengerPlane.fly();
mcdonnellDouglasPassengerPlane.fly();
airbusCargoPlane.fly();
boeingCargoPlane.fly();
mcdonnellDouglasCargoPlane.fly();
}
}
6.
// 数据库接口
interface Database {
void connect();
void executeQuery();
void disconnect();
}
// 具体数据库实现
class MySQLDatabase implements Database {
@Override
public void connect() {
System.out.println("连接到MySQL数据库");
}
@Override
public void executeQuery() {
System.out.println("执行MySQL数据库查询");
}
@Override
public void disconnect() {
System.out.println("从MySQL数据库断开连接");
}
}
class OracleDatabase implements Database {
@Override
public void connect() {
System.out.println("连接到Oracle数据库");
}
@Override
public void executeQuery() {
System.out.println("执行Oracle数据库查询");
}
@Override
public void disconnect() {
System.out.println("从Oracle数据库断开连接");
}
}
// 数据转换接口
interface DataConverter {
void convertData();
}
// 具体数据转换实现
class TXTXMLDataConverter implements DataConverter {
@Override
public void convertData() {
System.out.println("将数据转换为TXTXML格式");
}
}
class PDFDataConverter implements DataConverter {
@Override
public void convertData() {
System.out.println("将数据转换为PDF格式");
}
}
// 数据转换工具
class DataConversionTool {
private Database database;
private DataConverter dataConverter;
public DataConversionTool(Database database, DataConverter dataConverter) {
this.database = database;
this.dataConverter = dataConverter;
}
public void setDataConverter(DataConverter dataConverter) {
this.dataConverter = dataConverter;
}
public void setDatabase(Database database) {
this.database = database;
}
public void convertData() {
database.connect();
database.executeQuery();
dataConverter.convertData();
database.disconnect();
}
}
// 示例使用
public class Main {
public static void main(String[] args) {
// 创建具体的数据库和数据转换对象
Database mysqlDatabase = new MySQLDatabase();
Database oracleDatabase = new OracleDatabase();
DataConverter txtXmlDataConverter = new TXTXMLDataConverter();
DataConverter pdfDataConverter = new PDFDataConverter();
// 创建数据转换工具实例
DataConversionTool tool = new DataConversionTool(mysqlDatabase, txtXmlDataConverter);
// 使用MySQL数据库和TXTXML数据转换
tool.convertData();
// 切换为Oracle数据库和PDF数据转换
tool.setDatabase(oracleDatabase);
tool.setDataConverter(pdfDataConverter);
tool.convertData();
}
}
第五题:
第六题:
更多推荐
已为社区贡献2条内容
所有评论(0)