《大话设计模式》阅读笔记和总结。原书是C#编写的,本人用Java实现了一遍,包括每种设计模式的UML图实现和示例代码实现。
目录:设计模式
Github地址:DesignPattern
说明
定义:桥接模式(Bridge),将抽象部分与它的实现部分分离,使它们都可以独立地变化。
UML图:
代码实现:
Implementor类
abstract class Implementor{
public abstract void Operation();
}
ConcreteImplementorA和ConcreteImplementorB等派生类
class ConcreteImplementorA extends Implementor{
@Override
public void Operation() {
System.out.println("具体实现A的方法执行");
}
}
class ConcreteImplementorB extends Implementor{
@Override
public void Operation() {
System.out.println("具体实现B的方法执行");
}
}
Abstraction类
class Abstraction{
protected Implementor implementor;
public void setImplementor(Implementor implementor) {
this.implementor = implementor;
}
public void Operation(){
implementor.Operation();
}
}
RefinedAbstraction类
class RefinedAbstraction extends Abstraction{
@Override
public void Operation() {
implementor.Operation();
}
}
客户端代码
public class BridgePattern {
public static void main(String[] args){
Abstraction ab = new RefinedAbstraction();
ab.setImplementor(new ConcreteImplementorA());
ab.Operation();
ab.setImplementor(new ConcreteImplementorB());
ab.Operation();
}
}
运行结果
具体实现A的方法执行
具体实现B的方法执行
示例
例子:我们原来用的手机都是分为不同的品牌,每种手机里面都内置了很多小游戏,同时也有很多软件,但是不同手机之间的游戏是不能互相移植的。用程序模拟这个情景。
UML图:
代码实现:
手机品牌类
public abstract class HandsetBrand {
protected HandsetSoft soft;
public void setSoft(HandsetSoft soft) {
this.soft = soft;
}
//运行
public abstract void Run();
}
手机品牌M
public class HandsetBrandM extends HandsetBrand {
@Override
public void Run() {
soft.Run();
}
}
手机品牌N
public class HandsetBrandN extends HandsetBrand {
@Override
public void Run() {
soft.Run();
}
}
手机软件
public abstract class HandsetSoft {
public abstract void Run();
}
游戏、通讯录等具体类
手机游戏
public class HandsetGame extends HandsetSoft {
@Override
public void Run() {
System.out.println("运行手机游戏");
}
}
手机通讯录
public class HandsetAddressList extends HandsetSoft {
@Override
public void Run() {
System.out.println("运行手机通讯录");
}
}
客户端代码
public class Main {
public static void main(String[] args){
HandsetBrand ab;
ab = new HandsetBrandN();
ab.setSoft(new HandsetGame());
ab.Run();
ab.setSoft(new HandsetAddressList());
ab.Run();
ab = new HandsetBrandM();
ab.setSoft(new HandsetGame());
ab.Run();
ab.setSoft(new HandsetAddressList());
ab.Run();
}
}
运行结果
运行手机游戏
运行手机通讯录
运行手机游戏
运行手机通讯录