设计模式(7)——Bridge模式(桥接)

来源:互联网 发布:知楚王琦 编辑:程序博客网 时间:2024/06/05 14:53

Bridge模式的作用

Bridge模式就是把抽象部分与其实现部分分离,使它们都可以独立地变化。


Bridge UML class diagram.svg

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
原创粉丝点击