java桥接模式

一、实验目的:

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();
    }
}

第五题:

第六题:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值