zoukankan      html  css  js  c++  java
  • 软件设计桥接模式

    两个维度的桥接模式
    用桥接模式实现在路上开车这个问题,其中,车可以是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();
    }

    运行截图

  • 相关阅读:
    LIN总线学习-总线逻辑
    使用万用表测量CAN总线电压及实际电压与逻辑电瓶关系
    汽车网络和控制单元的安全威胁研究
    [CANopen] SDO的命令字
    新起点,新开始
    Git Commands
    Obsessive String
    The E-pang Palace
    最长递增子序列(LIS)
    Valid Sets
  • 原文地址:https://www.cnblogs.com/Arisf/p/15685606.html
Copyright © 2011-2022 走看看