• 桥接模式


    1、简介

    使抽象和实现进行解耦,使得二者可以独立变化。通过抽象化和实现化之间的桥接结构实现解耦。


    核心代码: 抽象类依赖实现类

    一个简单的例子就是轮渡,轮渡公司可以过江,你也要过江,但你又不会游泳,这时就需要有个具体干事的东西,让轮渡公司去选择,你是要乘快艇、小船、还是游艇过江。

    这里的游艇就相当于一个桥梁,抽象类和实现类都通过游艇进行关联,由游客选择游艇类型、选择游艇级别和价位。然后游艇由父类游艇管理,游客仅供使用[调用].

    2、实现

    /**
     * 轮船公司接口
     * @author Administrator
     */
    public abstract class ShippingCompany {
    	
    	protected Shipping shipping;
    	
    	public ShippingCompany(Shipping shipping) {
    		this.shipping = shipping;
    	}
    	
    	public abstract void travel();
    }
    
    /**
     * 轮船接口
     * @author Administrator
     */
    public interface Shipping {
    
    	public void travelRiver(int level, double money);
    }
    
    /**
     * 邮轮类
     * @author Administrator
     */
    public class Cruise implements Shipping{
    
    	@Override
    	public void travelRiver(int level, double money) {
    		System.out.println();
    		System.out.println(String.format("I'm Cruise level: %d, cost: %f", level, money));
    	}
    }
    
    /**
     * 游艇类
     * @author Administrator
     */
    public class SpeedBoat implements Shipping{
    	
    	@Override
    	public void travelRiver(int level, double money) {
    		System.out.println(String.format("I'm SpeedBoat level: %d, cost: %f", level, money));
    	}
    }
    
    /**
    *游客类
    */
    public class MrLiu extends ShippingCompany{
    	
    	private int level;
    	private double money;
    	
    	public MrLiu(int level, double money, Shipping shipping) {
    		super(shipping);
    		this.level = level;
    		this.money = money;
    	}
    	
    	
    	@Override
    	public void travel() {
    		shipping.travelRiver(level, money);
    	}
    }
    
    // Test
    int level = 3;
    double money = 88888888;
    Shipping cruise = new Cruise();
    MrLiu liu1 = new MrLiu(level, money, cruise);
    Shipping speedBoat = new SpeedBoat();
    MrLiu liu2 = new MrLiu(level, money, speedBoat);
    liu1.travel();
    liu2.travel();
    
  • 相关阅读:
    sinaapp+wordpress
    用JavaScript实现本地缓存
    Javascript的IE和Firefox(火狐)兼容性
    150个javascript特效
    学习Javascript闭包(Closure)
    JS bingo卡片
    Response.Write详细介绍[转]
    JS实现鼠标经过时背景色缓慢改变
    为什么引用不了App_Code里的类
    SQL SERVER 2008 R2配置管理器出现“远程过程调用失败”【0x800706be】的解决办法
  • 原文地址:https://www.cnblogs.com/kungFuPander/p/13474575.html
Copyright © 2020-2023  润新知