设计模式学习笔记---桥接模式bridge(Java版)

一、场景

商场系统中常见的商品分类,例如电脑。

二、实质

处理多重继承结构,处理多维度变化的场景,将各个维度设计成独立的继承结构,使各个维度可以独立的扩展在抽象层建立关联。

三、示例


1、没有使用桥接方式


package com.lgd.nobridge;

public interface ComputerNoBridge {
	void sale();
}

class Desktop implements ComputerNoBridge{

	@Override
	public void sale() {
		System.out.println("销售台式机");
	}
	
}

class Laptop implements ComputerNoBridge{

	@Override
	public void sale() {
		System.out.println("销售笔记本");
	}
	
}

class Pad implements ComputerNoBridge{

	@Override
	public void sale() {
		System.out.println("销售平板");		
	}
	
}

class LenovoDesktop extends Desktop{
	@Override
	public void sale() {
		System.out.println("销售联想台式机");		
	}
}

class LenovoLaptop extends Laptop{
	@Override
	public void sale() {
		System.out.println("销售联想笔记本");		
	}
}
class LenovoPad extends Pad{
	@Override
	public void sale() {
		System.out.println("销售联想平板");		
	}
}


class ShenzhouDesktop extends Desktop{
	@Override
	public void sale() {
		System.out.println("销售神舟台式机");		
	}
}

class ShenzhouLaptop extends Laptop{
	@Override
	public void sale() {
		System.out.println("销售神舟笔记本");		
	}
}
class ShenzhouPad extends Pad{
	@Override
	public void sale() {
		System.out.println("销售神舟平板");		
	}
}

class DellDesktop extends Desktop{
	@Override
	public void sale() {
		System.out.println("销售戴尔台式机");		
	}
}

class DellLaptop extends Laptop{
	@Override
	public void sale() {
		System.out.println("销售戴尔笔记本");		
	}
}
class DellPad extends Pad{
	@Override
	public void sale() {
		System.out.println("销售戴尔平板");		
	}
}


2、桥接方式



package com.lgd.bridge;

/**
 * 品牌维度
 * @author liguodong
 *
 */
public interface Brand {
	void sale();
}

class Lenovo implements Brand
{

	@Override
	public void sale() {
		System.out.print("销售联想");
	}
	
}

class Dell implements Brand{

	@Override
	public void sale() {
		System.out.print("销售戴尔");
		
	}
	
}

class Shenzhou implements Brand{

	@Override
	public void sale() {
		System.out.print("销售神舟");
		
	}
	
}



package com.lgd.bridge;

/**
 * 电脑类型维度
 * @author liguodong
 *
 */
public class Computer {
	protected Brand brand;
	public Computer(Brand b)
	{
		this.brand = b;
	}
	public void sale(){
		brand.sale();
	}
}

class Desktop extends Computer{

	public Desktop(Brand b) {
		super(b);		
	}

	@Override
	public void sale() {
		// TODO Auto-generated method stub
		super.sale();
		System.out.println("--台式机");
	}	
}

class Laptop extends Computer{

	public Laptop(Brand b) {
		super(b);
		
	}

	@Override
	public void sale() {
		// TODO Auto-generated method stub
		super.sale();
		System.out.println("--笔记本");
	}	
}



package com.lgd.bridge;

public class Client {
	public static void main(String[] args) {
		//销售联想的笔记本
		Computer computer = new Laptop(new Lenovo());
		computer.sale();
		
		//销售神舟的台式机
		Computer computer2 = new Desktop(new Shenzhou());
		computer2.sale();
	}
}


运行结果:

销售联想--笔记本
销售神舟--台式机


四、总结

桥接模式可以取代多层继承(不是多重继承)的方案。多层继承违背了单一职责原则(一个类应该只有一个发生变化的原因),复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。

桥接模式极大地提高了系统的可扩展性,在两个变化维度中任意扩展一个维度都不需要修改原有的系统,符合开闭原则(对于模块扩展是开放的,对于原有代码的修改是关闭的)。



五、应用场景

JDBC驱动程序

银行日志管理

格式分类:操作日志,交易日志,异常日志

距离分离:本地记录日志,异地记录日志

人力资源系统中的奖金计算模块

奖金分类:个人奖金,团队奖金,激励奖金

部门分类:人事部,销售部,研发部

OA系统中的消息处理

业务类型:普通消息,加急消息,特急消息

发送消息方式:系统内消息,手机短信,邮件











  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吃果冻不吐果冻皮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值