设计模式之第11章-桥接模式(Java实现)
发布时间: 更新时间: 总字数:1431
阅读时间:3m
作者: 谢先斌
分享
复制网址
专栏文章
- 设计模式之第1章-单例模式(Java实现)
- 设计模式之第2章-工厂方法模式(Java实现)
- 设计模式之第3章-抽象工厂模式(Java实现)
- 设计模式之第4章-模板方法模式(Java实现)
- 设计模式之第5章-装饰模式(Java实现)
- 设计模式之第6章-解释器模式(Java实现)
- 设计模式之第7章-迭代器模式(Java实现)
- 设计模式之第8章-外观模式(Java实现)
- 设计模式之第9章-策略模式(Java实现)
- 设计模式之第10章-原型模式(Java实现)
- 设计模式之第11章-桥接模式(Java实现)(当前)
- 设计模式之第12章-建造者模式(Java实现)
- 设计模式之第13章-享元模式(Java实现)
- 设计模式之第14章-职责链模式(Java实现)
- 设计模式之第15章-命令模式(Java实现)
- 设计模式之第16章-适配器模式(Java实现)
- 设计模式之第17章-代理模式(Java实现)
- 设计模式之第18章-备忘录模式(Java实现)
- 设计模式之第19章-观察者模式(Java实现)
- 设计模式之第20章-中介者模式(Java实现)
- 设计模式之第21章-访问者模式(Java实现)
- 设计模式之第22章-状态模式(Java实现)
- 设计模式之第23章-组合模式(Java实现)
Decouple an abstraction from its implementation so that two can vary independently。(将抽象和实现解耦,使得两者可以独立地变化。我的重点就是“解耦”,如何让抽象和实现解耦就是需要了解的重点。)
引子
“一入软件深似海,从此早睡是路人。黑夜给了我黑色的眼睛,我却用他去寻找八阿哥。”“怎么了,又来那么多的感慨啊。”“还能有什么啊,老板是说让换个APP做,这个APP现在不行了,这都是这三个月来第4个APP了、、、”“这个啊,那不是简单的很么?”“简单,别闹了,你以为APP是大白菜啊,说有就有啊。”“这个时候就是我桥接模式出场的时候了~”
桥接模式介绍
桥接模式Bridge Pattern”,定义如下:Decouple an abstraction from its implementation so that two can vary independently。翻译过来是将抽象和实现解耦,使得两者可以独立地变化。我的重点就是“解耦”,如何让抽象和实现解耦就是需要了解的重点。下面先来看看桥接模式的类图:
现在来详细介绍下各个角色:
- Abstract:抽象化角色。主要职责是定义出该角色的行为,同时保存一个对实现化角色的引用,该角色一般是抽象类。
- Implementor:实现化角色。是接口或者抽象类,定义角色必需的行为和属性。
- RefinedAbstract:修正抽象化角色。实现接口或抽象类定义的方法和属性。
- ConcreteImplementor*:具体实现方法类。
桥接模式分析
优点:
- 分离接口及其实现部分。这也是我的主要特点,毕竟也是为了解决继承的缺点而提出的设计模式嘛。
- 优秀的扩充能力。
- 实现细节对客户的透明。因此你们完全不用关心细节的实现,它已经由抽象层通过聚合关系完成了封装。
桥接模式之实现
既然你们不信,看来今天不露两手是镇不住你们了,好了,看我的大招,既然说到了APP,那我们就来谈谈APP,首先是抽象APP类:
public abstract class App{
//首先要设计,什么数据库设计、框架选取、概要设计、详细设计等等
public abstract void beDesigned();
//然后是编码实现
public abstract void beCoded();
//最后是测试
public abstract void beTest();
}
假设是社交类APP:
public class ChatApp extends App{
//首先要设计,什么数据库设计、框架选取、概要设计、详细设计等等
public abstract void beDesigned(){
System.out.println("调研,写文档、写文档、、、");
}
//然后是编码实现
public abstract void beCoded(){
System.out.println("我是一个程序员,加班Coding中");
}
//最后是测试
public abstract void beTest(){
System.out.println("test、test、test、、、");
}
}
然后APP产品自然是由互联网公司生产的了,下面是抽象的公司类:
public abstract class Corp{
//定义一个抽象APP对象,但是不知道具体是什么
private App app;
//构造函数,由子类定义传递具体产品
public Corp(App app){
this.app = app;
}
//制作APP
public void developApp(){
this.app.beDesigned();
this.app.beCoded();
this.app.beTest();
}
}
这里是有参构造,因为继承的子类需要重写自己的有参构造函数,把APP的类传进来,首先看一下APP公司的实现:
public class AppCorp extends Corp{
//生产的App 待定,据需求而定
public AppCorp(App app){
super(app);
}
//生产App
public void developApp(){
super.developApp();
System.out.println("要什么制作什么APP");
}
}
具体使用看如下的场景类:
public class Client{
public static void main(String[] args) {
AppCorp appCorp = new AppCorp(new ChatApp());
appCorp.developApp();
}
}
桥接模式之应用场景
应用场景:
- 当你不希望抽象和实现之间有一个固定的绑定关系的时候。
- 类的抽象和它的实现都应该可以通过生成子类的方法加以扩充。
- 对一个抽象的实现部分的修改应对客户不产生影响。
- 你想对客户完全隐藏抽象的实现部分。
- 有许多的类要生成。
- 你想对多个对象间共享实现,但同时要求客户并不知道这一点。
专栏文章
- 设计模式之第1章-单例模式(Java实现)
- 设计模式之第2章-工厂方法模式(Java实现)
- 设计模式之第3章-抽象工厂模式(Java实现)
- 设计模式之第4章-模板方法模式(Java实现)
- 设计模式之第5章-装饰模式(Java实现)
- 设计模式之第6章-解释器模式(Java实现)
- 设计模式之第7章-迭代器模式(Java实现)
- 设计模式之第8章-外观模式(Java实现)
- 设计模式之第9章-策略模式(Java实现)
- 设计模式之第10章-原型模式(Java实现)
- 设计模式之第11章-桥接模式(Java实现)(当前)
- 设计模式之第12章-建造者模式(Java实现)
- 设计模式之第13章-享元模式(Java实现)
- 设计模式之第14章-职责链模式(Java实现)
- 设计模式之第15章-命令模式(Java实现)
- 设计模式之第16章-适配器模式(Java实现)
- 设计模式之第17章-代理模式(Java实现)
- 设计模式之第18章-备忘录模式(Java实现)
- 设计模式之第19章-观察者模式(Java实现)
- 设计模式之第20章-中介者模式(Java实现)
- 设计模式之第21章-访问者模式(Java实现)
- 设计模式之第22章-状态模式(Java实现)
- 设计模式之第23章-组合模式(Java实现)
最近更新
最新评论