GOF之桥接模式
来源:互联网 发布:黑马程序员学费多少 编辑:程序博客网 时间:2024/06/03 18:30
GOF之桥接模式
桥接模式的使用
桥接模式适合于java中的多重继承关系的处理。一般来说,如果出现二维以上的维度的变化的时候,那么就可以利用桥接模式来进行处理。
那我们什么时候使用桥接模式呢?比如我举一个例子。比如说,一个销售电脑的。销售台式机,笔记本电脑,pad电脑。
而品牌又有lenovo,shenzhou,和Dell等。那么这就涉及到了一系列的继承关系了。如果我们使用继承的关系将这些类写出来的话,未免又太麻烦了。这会显得非常的累赘。那么这时候就需要使用到桥接的模式了。其实,如果使用继承
话,为什么会使类之间的继承关系显得很复杂呢?其实原因也是很简单的。因为一个类涉及到了俩方面的内容。比如
联想笔记本电脑。一方面的内容是品牌lenovo,一方面的内容是LanTop笔记本电脑,这就涉及到了二维的内容。用这样
的继承关系来进行处理的话,肯定会变得很复杂的。这是要注意的。
但是如果我们使用了桥接的模式,也就是横轴方向的内容是品牌,比如lenovo,Dell等。纵轴的内容是电脑的类型,比如说是台式电脑,笔记本电脑,和Pad电脑。这样来进行处理的话,那么就明显方便很多了。一个是横轴的内容,而另外一个是纵轴方向的内容。俩方面的内容有交叉的话,那么肯定就可以出来结果了。比如说是lenovo和台式电脑交叉的话,那么就是lenovo台式电脑。
如果我们使用继承的关系来处理这些类的关系的话,那么明显就会显得很累赘了。
package com.bjsxt.bridge;
public interface Computer {
void sale();
}
class Desktop implements Computer {
@Override
public void sale() {
System.out.println("销售台式机!");
}
}
class Laptop implements Computer {
@Override
public void sale() {
System.out.println("销售笔记本!");
}
}
class Pad implements Computer {
@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("销售戴尔平板电脑");
}
}
但是如果我们是使用了桥接模式的话,那么明显就显得不一样了。
package com.bjsxt.bridge;
/**
* 品牌。这是其中的一个维度。
* 如果我们想要增加品牌的话,那么
* 我们直接在这个类中增加就可以了。
* 和另外一个维度,也就是电脑的类型
* 是无关的。这就大大降低了类的复杂关系。
* @author Administrator
*
*/
public interface Brand {
void sale();
}
class Lenovo implements Brand {
@Override
public void sale() {
System.out.println("销售联想电脑");
}
}
class Dell implements Brand {
@Override
public void sale() {
System.out.println("销售Dell电脑");
}
}
class Shenzhou implements Brand {
@Override
public void sale() {
System.out.println("销售神舟电脑");
}
}
package com.bjsxt.bridge;
/**
* 电脑类型的维度。这也是一个独立的维度
* 如果我们需要增加电脑的类型的话,那么
* 我们直接在这个类中进行增加就可以了。
* 和另外一个维度的内容是无关的。
* @author Administrator
*
*/
public class Computer2 {
/*这里通过组合的方式,来得到
电脑品牌的引用*/
protected Brand brand;
public Computer2(Brand b) {
this.brand = b;
}
public void sale(){
brand.sale();
}
}
class Desktop2 extends Computer2 {
public Desktop2(Brand b) {
super(b);
}
@Override
public void sale() {
super.sale();
System.out.println("销售台式机");
}
}
class Laptop2 extends Computer2 {
public Laptop2(Brand b) {
super(b);
}
@Override
public void sale() {
super.sale();
System.out.println("销售笔记本");
}
}
package com.bjsxt.bridge;
public class Client {
public static void main(String[] args) {
//销售联想的笔记本电脑
Computer2 c = new Laptop2(new Lenovo());
c.sale();
//销售神舟的台式机
Computer2 c2 = new Desktop2(new Shenzhou());
c2.sale();
}
}
- GOF之桥接模式
- GOF 23设计模式之 桥接模式
- Gof之状态模式
- GOF之状态模式
- GOF之迭代器模式
- GOF之策略模式
- GOF之组合模式
- GOF之装饰模式
- GOF之外观模式
- GOF之适配器模式
- GOF设计模式-桥接模式
- GOF 设计模式之 Command
- GOF之中介者模式
- GOF之责任链模式
- GOF之模板方法模式
- GOF之解释器模式
- GOF之享元模式
- GOF之静态代理模式
- 牛客网 8-11 网络基础 操作系统 编译与体系结构 30题知识点总结
- JAVA学习代码——知识点
- 透明化activity实例
- 牛客网 8-12 网络基础 操作系统 编译与体系结构 30题知识点总结
- Java定时框架Quartz实例详解与定时任务的Mongodb、Mysql持久化实现(三)Quartz持久化
- GOF之桥接模式
- 模板(下)
- android网络切换问题
- 对“回调函数”的理解
- JAVA学习代码——质数判断
- android上如何添加系统服务
- JAVA学习代码——栈
- **php搭配环境,mysql报错:1045**
- 结构体中嵌套结构体