软件设计桥接模式

两个维度的桥接模式
用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。

类图

java

package rjsj.no9;

public class Car implements Vehicle{
    @Override
    public void drive() {
        System.out.println("小轿车行驶在");
    }
}
package rjsj.no9;

public class CementRoad extends Road{

    public CementRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {
        super.vehicle.drive();
        System.out.println("水泥路");
    }
}
package rjsj.no9;

public class Client {
    public static void main(String[] args) {
        Road road = new AsphaltRoad(new Car());
        road.driveOnRoad();
        System.out.println("**************************************************");
        Road road1 = new CementRoad(new Bus());
        road1.driveOnRoad();
    }
}
package rjsj.no9;

public abstract class Road {
    protected Vehicle vehicle;
    public Road(Vehicle vehicle){
        this.vehicle = vehicle;
    }
    public abstract void driveOnRoad();
}
package rjsj.no9;

public interface Vehicle {
    public void drive();
}
package rjsj.no9;

public class AsphaltRoad extends Road{
    public AsphaltRoad(Vehicle vehicle) {
        super(vehicle);
    }

    @Override
    public void driveOnRoad() {
        super.vehicle.drive();
        System.out.println("沥青路");
    }
}
package rjsj.no9;

public class Bus implements Vehicle{

    @Override
    public void drive() {
        System.out.println("公交车行驶在");
    }
}

C++

#include <iostream>

using namespace std;

class Vehicle{
public:
    virtual void drive(){}
};

class Car:public Vehicle{
public:
    void drive(){
        cout<<"汽车行驶"<<endl;
    }
};

class Bus:public Vehicle{
public:
    void drive(){
        cout<<"公交车行驶"<<endl;
    }
};

class Road{
public:
    Vehicle* vehicle;

    Road(Vehicle* vehicle){
        this->vehicle=vehicle;
    }
    virtual void driveOnRoad(){}
};

class CementRoad:public Road{
public:
    CementRoad(Vehicle* vehicle):Road(vehicle){}

    void driveOnRoad(){
        cout<<"水泥路";
        vehicle->drive();
    }
};

class BituminousRoad:public Road{
    public:
    BituminousRoad(Vehicle* vehicle):Road(vehicle){}
    void driveOnRoad(){
        cout<<"沥青路";
        vehicle->drive();
    }
};


int main(){
    Vehicle* vehicle;
    Car car=Car();
    vehicle=&car;
    CementRoad(vehicle).driveOnRoad();

    Bus bus=Bus();
    vehicle=&bus;
    BituminousRoad(vehicle).driveOnRoad();
}

运行截图

原文地址:https://www.cnblogs.com/Arisf/p/15685606.html