网站页面统计代码是什么意思,开一家网站建设公司要多少钱,公司品牌flash网站,织梦网站地图模板修改桥接模式定义如下#xff1a;将抽象部分与它的实现部分分离#xff0c;使它们都可以独立地变化。
适合桥接模式的情景如下#xff1a; 不希望抽象和某些重要的实现代码是绑定关系#xff0c;可运行时动态决定抽象和实现者都可以继承的方式独立的扩充#xff0c;程序在运行… 桥接模式定义如下将抽象部分与它的实现部分分离使它们都可以独立地变化。
适合桥接模式的情景如下 不希望抽象和某些重要的实现代码是绑定关系可运行时动态决定抽象和实现者都可以继承的方式独立的扩充程序在运行时可能需要动态地将一个抽象子类的实例与一个实现者的子类实例进行组合希望对实现者层次代码的修改对抽象层不产生影响有一类事物结合设为A1、A2、...、Am每个事物都有功能F1、F2、...、Fn。
如邮局业务
信件事物可以平邮和挂号包裹事物也可以平邮和挂号。
普通思路
class A1 {void F1(){} //平邮void F2(){} //挂号
}class A2 {void F1(){} //平邮void F2(){} //挂号
} 桥接模式
1定义邮寄接口IPost
public interface IPost { //邮局public void post(); //发送功能
}
2两个具体的邮寄类SimplePost、MarkPost
平邮
public class SimplePost implements IPost{Overridepublic void post() {System.out.println(这是一封简单邮件);}
}
挂号
public class MarkPost implements IPost{Overridepublic void post() {System.out.println(这是一封挂号邮件);}
}
3抽象事物类 AbstractThing
public class AbstractThing {private IPost obj;public AbstractThing(IPost obj) {this.obj obj;}public void post() {obj.post();}
}
该类是桥接模式的核心。“信件和包裹共享平邮和挂号的功能”信件、包裹是两个不同的事物它们有共享的功能也一定有不同的功能。共享的功能一定能封装到一个类中又由于该类不能代表一个具体的事物因此把它定义成abstract类是恰当的。
4具体事物类 信件类和包裹类
public class Letter extends AbstractThing{public Letter(IPost obj) {super(obj);}//其他独有变量和方法
}public class Parcel extends AbstractThing{public Parcel(IPost obj) {super(obj);}//其他独有变量和方法
}
5测试类
public class Test {public static void main(String[] args) {IPost p new SimplePost();Letter letter new Letter(p);letter.post(); //这里其实就是调用了 p.post()}
}
总结
该例子通过AbstractThing 类中的成员变量obj它就像桥梁一样使得事物类与功能类巧妙的联系起来。
现在考虑如果新增加了事物只需要从Abstract派生一个类即可其他无需改变。
public class NewThing extends AbstractThing{public NewThing(IPost obj) {super(obj);}//其他独有变量和方法
}
如果新增加了新的邮寄事物比如特快专递只需从IPost接口派生一个类即可其他无需改变。
public class UrgencyPost implements IPost{Overridepublic void post() {System.out.println(这是特快);}
}