• 设计模式—桥接模式


    桥接模式具有依赖关系的对象可以灵活的进行随意组合。

    实例说明:人开车在路上跑。

        能够自由组合人、车和路来实现各种情景

    就像不知道1+1为什么等于2 一样,我也不知道为什么要使用桥接模式。可以解耦吧?不需要在person中new Car不需要在Car中new Road.

    只需要在调用处注入三个对象便可实现随意组合。

     定义抽象类:Road 

    package com.zpj.designMode.bridgePattern;
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:43:56
     * @version :1.1
     * 
     */
    public abstract class Road {
        protected String name;
    
        
        public Road(String name) {
            super();
            this.name = name;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
        
    }

    两个子类:

    package com.zpj.designMode.bridgePattern;
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:45:18
     * @version :1.1
     * 
     */
    public class Expressway extends Road{
    
        public Expressway(String name) {
            super(name);
        }
    
    }
    
    
    package com.zpj.designMode.bridgePattern;
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:45:18
     * @version :1.1
     * 
     */
    public class Track extends Road{
    
        public Track(String name) {
            super(name);
        }
    
    }

    定义人抽象类:Person 

    package com.zpj.designMode.bridgePattern;
    
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:22:53
     * @version :1.1
     * 
     */
    public abstract class Person {
        protected Car car;
    
        public Person(Car car) {
            super();
            this.car = car;
        }
    
        public abstract void drive();
    
        public Car getCar() {
            return car;
        }
    
        public void setCar(Car car) {
            this.car = car;
        }
    
    }

     实现两个子类:

    package com.zpj.designMode.bridgePattern;
    
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:27:54
     * @version :1.1
     * 
     */
    public class MrLi extends Person {
    
        public MrLi(Car car) {
            super(car);
        }
    
        @Override
        public void drive() {
            car.run();
        }
    
    }
    
    
    package com.zpj.designMode.bridgePattern;
    
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:27:54
     * @version :1.1
     * 
     */
    public class MrssHong extends Person {
    
        public MrssHong(Car car) {
            super(car);
        }
    
        @Override
        public void drive() {
            car.run();
        }
    
    }

    定义车抽象类:Car

    package com.zpj.designMode.bridgePattern;
    
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:23:30
     * @version :1.1
     * 
     */
    public abstract class Car {
        protected Road road;
    
        public Car(Road road) {
            super();
            this.road = road;
        }
    
        public abstract void run();
    }

    实现两个抽象类:

    package com.zpj.designMode.bridgePattern;
    
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:25:10
     * @version :1.1
     * 
     */
    public class BMWCar extends Car {
    
        public BMWCar(Road road) {
            super(road);
        }
    
        @Override
        public void run() {
            System.out.println("----我是BMW-----跑在" + road.getName());
        }
    
    }
    
    
    package com.zpj.designMode.bridgePattern;
    
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:25:10
     * @version :1.1
     * 
     */
    public class FourOCar extends Car {
    
        public FourOCar(Road road) {
            super(road);
            // TODO Auto-generated constructor stub
        }
    
        @Override
        public void run() {
            System.out.println("----我是OOOO-----跑在" + road.getName());
        }
    
    }

     测试类:

    package com.zpj.designMode.bridgePattern;
    
    import org.junit.Test;
    
    /**
     * @author PerKins Zhu
     * @date:2016年9月1日 下午8:29:40
     * @version :1.1
     * 
     */
    public class TestUtil {
    
        @Test
        public void test01() {
            // 小李子开着BMW在小路跑
            Road track = new Track("乡间小路");
            Car bcar = new BMWCar(track);
            Person li = new MrLi(bcar);
            li.drive();
            // 小红开着oooo在高速公路跑
            Road expressWay = new Expressway("高速公路");
            Car ocar = new FourOCar(expressWay);
            Person hong = new MrssHong(ocar);
            hong.drive();
            // 忽然想换着开
            li.setCar(ocar);
            hong.setCar(bcar);
    
            li.drive();
            hong.drive();
            // 可以很灵活的换来换去
    
        }
    }

    -----------------------------

  • 相关阅读:
    HttpClient发送get,post接口请求
    java对象,引用的区别
    java基础知识面试题(41-95)
    java基础知识面试题(1-40)
    mysql增删改查sql语句
    java static成员变量方法和非static成员变量方法的区别
    zip和tgz以及exe的区别
    Java模拟网站登录02【转载】
    Java模拟登录系统抓取内容【转载】
    Java模拟登陆02【转载】
  • 原文地址:https://www.cnblogs.com/PerkinsZhu/p/5831422.html
Copyright © 2020-2023  润新知