java设计模式--结构型模式--桥接模式
桥接模式
概述
将抽象部分与它的实现部分分离,使它们都可以独立地变化。 适用性
1.你不希望在抽象和它的实现部分之间有一个固定的绑定关系。
例如这种情况可能是因为,在程序运行时刻实现部分应可以被选择或者切换。 2.类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
这时Bridge模式使你可以对不同的抽象接口和实现部分进行组合,并分别对它们进行扩充。 3.对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译。 4.正如在意图一节的第一个类图中所示的那样,有许多类要生成。
这样一种类层次结构说明你必须将一个对象分解成两个部分。 5.你想在多个对象间共享实现(可能使用引用计数),但同时要求客户并不知道这一点。 参与者
1.Abstraction
定义抽象类的接口。
维护一个指向Implementor类型对象的指针。 2.RefinedAbstraction
扩充由Abstraction定义的接口。 3.Implementor
定义实现类的接口,该接口不一定要与Abstraction的接口完全一致。
事实上这两个接口可以完全不同。
一般来讲,Implementor接口仅提供基本操作,而Abstraction则定义了基于这些基本操作的较高层次的操作。 4.ConcreteImplementor
实现Implementor接口并定义它的具体实现。
测试类:
public class Test {
public static void main(String[] args) {
Person man = new Man();
Person lady = new Lady();
Clothing jacket = new Jacket();
Clothing trouser = new Trouser();
jacket.personDressCloth(man);
trouser.personDressCloth(man);
jacket.personDressCloth(lady);
trouser.personDressCloth(lady);
}
}
public abstract class Person {
private Clothing clothing;
private String type;
public Clothing getClothing() {
return clothing;
}
public void setClothing() {
this.clothing = ClothingFactory.getClothing();
}
public void setType(String type) {
this.type = type;
}
public String getType() {
return this.type;
}
public abstract void dress();
}
public abstract class Clothing {
public abstract void personDressCloth(Person person);
}
public class Lady extends Person {
public Lady() {
setType("女人");
}
public void dress() {
Clothing clothing = getClothing();
clothing.personDressCloth(this);
}
}
public abstract class Clothing {
public abstract void personDressCloth(Person person);
}
public class Jacket extends Clothing {
public void personDressCloth(Person person) {
System.out.println(person.getType() + "穿马甲");
}
}
@SuppressWarnings("static-access")
public class ClothingFactory {
private static Clothing clothing;
public ClothingFactory(Clothing clothing){
this.clothing = clothing;
}
public static Clothing getClothing() {
return clothing;
}
}
public class Trouser extends Clothing {
public void personDressCloth(Person person) {
System.out.println(person.getType() + "穿裤子");
}
}
java设计模式--结构型模式--桥接模式的更多相关文章
- Java设计模式——结构型模式
Java设计模式中共有7种结构型模式:适配器模式.装饰模式.代理模式.外观模式.桥接模式.组合模式.享元模式.其中对象的适配器模式是各种模式的起源,其关系如下面的图:1.适配器模式 适配器模式将某个类 ...
- java设计模式结构型模式
结构型模式: – 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的类结 构,用来解决更大的问题 分类: • 适配器模式.代理模式.桥接模式. 装饰模式.组合模式.外观模式.享元模式 结构型模式 ...
- 【设计模式】结构型04桥接模式(Bridge Pattern)
学习地址:http://www.runoob.com/design-pattern/bridge-pattern.html 桥接模式(Bridge Pattern) 桥接模式(Bridge patte ...
- Java设计模式之四 ----- 适配器模式和桥接模式
前言 在上一篇中我们学习了创建型模式的建造者模式和原型模式.本篇则来学习下结构型模式的适配器模式和桥接模式. 适配器模式 简介 适配器模式是作为两个不兼容的接口之间的桥梁.这种类型的设计模式属于结构型 ...
- python设计模式---结构型之代理模式
主要想着nginx:) from abc import ABCMeta, abstractmethod # 结构型设计模式---代理模式 class Actor: def __init__(self) ...
- Java设计模式菜鸟系列(十七)桥接模式建模与实现
转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/40008711 桥接模式(Bridge): 把事物和其详细实现分开(抽象化与实现化解耦),使 ...
- java设计模式--结构型模式--享元模式
享元模式 概述 运用共享技术有效地支持大量细粒度的对象. 适用性 当都具备下列情况时,使用Flyweight模式: 1.一个应用程序使用了大量的对象. 2.完全由于使用大量的对象,造成很大的存储开销. ...
- java设计模式--结构型模式--组合模式
什么是组合模式,这个有待研究,个人觉得是各类组合而形成的一种结构吧. 组合模式: 组合模式 概述 将对象组合成树形结构以表示"部分-整体"的层次结构."Composite ...
- java设计模式--结构型模式--外观模式
外观模式 概述 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 适用性 1.当你要为一个复杂子系统提供一个简单接口时.子系统往往因为不 ...
随机推荐
- translate函数说明
TRANSLATE(expr, from_string, to_string) from_string 与 to_string 以字符为单位,对应字符一一替换. SQL> SELECT TRAN ...
- 关于group by
<pre name="code" class="sql">关于group by 排序问题 10g 以前sort group by 需要排序 10g ...
- CH Round #40 - Fimbulvetr::Prologue
题目:http://ch.ezoj.tk/contest/CH%20Round%20%2340%20-%20Fimbulvetr%3A%3APrologue/起源 题意:树上最大流+费用流,源点为树根 ...
- 在OCX初始化时获取其在网页中的DOM对象
OCX初始化的时候会调用SetClientSite,会传入IOleClientSite对象. CComQIPtr<IOleControlSite, &IID_IOleControlSit ...
- linux考试基础知识测验
Linux系统管理基础测试(100分钟) 姓名: 座位号: 一.单项选择题:(每小题0.5分,共计30分) 1. cron 后台常驻程序 (daemon) 用于:D A. 负责文件在网络中的共 ...
- Spring 的优秀工具类盘点第 1 部分
文件资源操作 文件资源的操作是应用程序中常见的功能,如当上传一个文件后将其保存在特定目录下,从指定地址加载一个配置文件等等.我们一般使用 JDK 的 I/O 处理类完成这些操作,但对于一般的应用程序来 ...
- java集合类之------Properties
之前经常看到有人在网上问关于HashMap 和Hashtable 的区别,自己也在看,时间一长发现自己也忘了二者的区别,于是在实际应用中犯错了. 原因是使用了Properties 这个集合类时将nul ...
- 【hoj】1604 cable master
简单,二分法,可是在oj上交的时候会有精度的限制,所以仅仅能把数扩得大一点,并且在扩的时候为防止尾数会自己主动生成一些非零数,所以还是自己吧扩到的位置设置为0,还有输出时由于%.2lf会自己有4设5入 ...
- [Javascript] lodash: memoize() to improve the profermence
Link: https://lodash.com/docs#memoize Example: .service('UserPresenter', function(UserConstants){ va ...
- JS属性读写操作+if判断注意事项
js中不允许出现“ - ” 页面中改变文字大小-案例: <!doctype html> <html lang="en"> <head> < ...