軟體設計-橋接模式
阿新 • • 發佈:2021-12-13
兩個維度的橋接模式
用橋接模式實現在路上開車這個問題,其中,車可以是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; } publicabstract 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(); }
執行截圖