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

    应用场景:抽象部分与实现部分分离,使它们都可以独立的变化。

    创建一个抽象类:

    package bridge;
    
    public  abstract class Abstraction {
    	protected Interfacor interfacor;
    	public Abstraction(Interfacor interfacor){
    		this.interfacor=interfacor;
    	}
    	public void opration(){
    		interfacor.opration();
    	}
    
    }
    

     创建一个接口:

    package bridge;
    
    public interface Interfacor {
    	public void opration();
    }
    

    创建两个接口实现:

    package bridge;
    
    public class InterfacorImpl1 implements Interfacor{
    
    	@Override
    	public void opration() {
    		System.out.println("实现A功能");
    	}
    
    }
    
    package bridge;
    
    public class InterfacorImpl2 implements Interfacor{
    
    	@Override
    	public void opration() {
    		System.out.println("实现功能B");
    	}
    
    }
    

     创建子类实现抽象类:

    package bridge;
    
    public class RefineAbstraction extends Abstraction{
    
    	public RefineAbstraction(Interfacor interfacor) {
    		super(interfacor);
    	}
    	public void RefineOperation(){
    		System.out.println("子类重新定义");
    	}
    
    }
    

    测试:

    package bridge;
    
    public class Test {
    	public static void main(String[] args) {
    		Interfacor interfacor=new InterfacorImpl1();
    		RefineAbstraction abstraction=new RefineAbstraction(interfacor);
    		abstraction.opration();
    		abstraction.RefineOperation();
    	}
    }
    

    结果:

    实现A功能
    子类重新定义
    

     这样把抽象和实现分离,需要哪个实现就调哪个实现。

    再来个应用场景:

     

    这上边有两个维度,一个是抽象的消息(普通消息,加急消息,特级消息),另一个维度是具体的实现(email,手机短消息,站内短消息)

    这两个维度有九种不同的可能性。现在出现问题的根本原因,就在于消息的抽象和实现是混杂在一起的,这就导致了,一个纬度的变化,会引起另一个纬度进行相应的变化,从而使得程序扩展起来非常困难。要想解决这个问题,就必须把这两个纬度分开,也就是将抽象部分和实现部分分开,让它们相互独立,这样就可以实现独立的变化,使扩展变得简单。

    那么如何实现呢?

    根据上面的方法。

    首先也是定义抽象接口。

    再定义抽象类

    再实现抽象接口

    再继承抽象类

  • 相关阅读:
    解决.net中access数据库连接相对路径问题
    .NET网站实例之文件上传与管理
    .NET网站实例之用户登录实例
    解决DataList控件无缝滚动图片
    【转帖】随机彩色验证码,点击刷新效果
    .NET实例之购物车系统
    .NET网站实例之投票系统
    网络模拟与抓包
    iOS开发中的SQLite知识总结
    关于ARC的一些说法
  • 原文地址:https://www.cnblogs.com/JAYIT/p/5007804.html
Copyright © 2011-2022 走看看