1. 程式人生 > 其它 >軟體設計-橋接模式

軟體設計-橋接模式

兩個維度的橋接模式
用橋接模式實現在路上開車這個問題,其中,車可以是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();
}

執行截圖