设计模式(7)——Bridge模式(桥接)
来源:互联网 发布:知楚王琦 编辑:程序博客网 时间:2024/06/05 14:53
Bridge模式的作用
Bridge模式就是把抽象部分与其实现部分分离,使它们都可以独立地变化。
Bridge模式的适用性
1. 不希望在抽象和它的实现部分之间有一个固定的绑定关系。
2. 类的抽象以及它的实现都应该可以通过生成子类的方法加以扩充。
3. 对一个抽象的实现部分的修改应对客户不产生影响,即客户的代码不必重新编译
4. 想在多个对象间共享实现,但同时要求客户并不知道这一点。
Bridge模式的示例
从文件或数据库中读取数据
public interface Persistence {/** * @param object * @return returns objectID */public String persist(Object object);/** * * @param objectId * @return persisted Object */public Object findById(String objectId);/** * * @param id */public void deleteById(String id);}
public class PersistenceImp implements Persistence {private PersistenceImplementor implementor = null;public PersistenceImp(PersistenceImplementor imp) {this.implementor = imp;}@Overridepublic void deleteById(String id) {implementor.deleteObject(Long.parseLong(id));}@Overridepublic Object findById(String objectId) {return implementor.getObject(Long.parseLong(objectId));}@Overridepublic String persist(Object object) {return Long.toString(implementor.saveObject(object));}}
/** * Implementor Interface */public interface PersistenceImplementor {public long saveObject(Object object);public void deleteObject(long objectId);public Object getObject(long objectId);}
import java.io.File;/** * Concrete Implementor * */public class FileSystemPersistenceImplementor implements PersistenceImplementor{@Overridepublic void deleteObject(long objectId) {File f = new File("/persistence/"+Long.toString(objectId));f.delete();return;}@Overridepublic Object getObject(long objectId) {File f = new File("/persistence/"+Long.toString(objectId));return readObjectFromFile(f);}private Object readObjectFromFile(File f) {// open file // and load object //return the objectreturn null;}@Overridepublic long saveObject(Object object) {long fileId = System.currentTimeMillis();// open file File f = new File("/persistence/"+Long.toString(fileId));// write file to Streanm writeObjectToFile(f,object);return fileId;}private void writeObjectToFile(File f, Object object) {// serialize object and write it to file}}
从数据库读写数据:
public class DabatasePersistenceImplementor implements PersistenceImplementor{public DabatasePersistenceImplementor() {// load database driver}@Overridepublic void deleteObject(long objectId) {// open database connection// remove record}@Overridepublic Object getObject(long objectId) {// open database connection // read records// create object from record return null;}@Overridepublic long saveObject(Object object) {// open database connection // create records for fields inside the objectreturn 0;}}
Persistence API driver。注意,实际的实现并不影响客户端代码。
public class PersistenceFrameworkDriver {public static void main(String[] args) {// this program needs a persistence framework// at runtime an implementor is chosen between file system implementation and//database implememtor , depending on existence of databse drivers 在运行时,在数据库或文件实现类之间进行选择。PersistenceImplementor implementor = null;if(databaseDriverExists()){implementor = new DabatasePersistenceImplementor();}else{implementor = new FileSystemPersistenceImplementor();}Persistence persistenceAPI = new PersistenceImp(implementor);Object o = persistenceAPI.findById("12343755");// do changes to the object // then persist persistenceAPI.persist(o);// can also change implementorpersistenceAPI = new PersistenceImp(new DabatasePersistenceImplementor()); persistenceAPI.deleteById("2323");}private static boolean databaseDriverExists() {return false;}}
链接:http://www.oodesign.com/bridge-pattern.html
0 0
- 设计模式(7)——Bridge模式(桥接)
- java设计模式学习—桥接(Bridge)模式
- 设计模式(7)——桥接 Bridge
- (7)设计模式:bridge
- 设计模式--桥接(Bridge)模式
- 设计模式:Bridge(桥接)模式
- Bridge模式详解--设计模式(7)
- 设计模式学习笔记(八)——Bridge桥接
- 设计模式——桥梁模式(Bridge)
- Java设计模式——桥接模式(Bridge)
- 设计模式13—Bridge设计模式
- JAVA设计模式:桥接(Bridge)
- 设计模式读书笔记:Bridge(桥接)
- 设计模式(六)bridge
- 设计模式之八:Bridge(桥接)—对象结构型模式
- C++设计模式——Bridge模式
- 学习:java设计模式—Bridge模式
- 设计模式之bridge模式(1)
- JAVA并发API源码解析:锁
- 日期和时间的存储与处理
- 一些简单的shell脚本实例
- miniprofiler-----Stack Overflow团队设计的一款对ASP.NET MVC的性能分析的小程序
- 常用的shell脚本
- 设计模式(7)——Bridge模式(桥接)
- 在ubuntu上搭建samba文件服务器
- php面向对象(OOP)编程完全教程地址
- 高效SQL语句必杀技
- jQuery源码学习(版本1.11)-queue
- js与xml交互理论和示例
- Linux(centOS)手动安装Apache+MySQL+PHP+Memcached+Nginx原创无错版
- /usr/lib64/libssl.so.10: no versioninformation availabl
- Time Date DateTime的继承与派生及运算符重载