DesignPattern_Java:Bridge Pattern
2015-09-01 19:59
597 查看
桥梁模式 Bridge Pattern 桥接模式
Decouple an abstraction from its implementation so that the two can vary independently.
将抽象和实现解耦,使得两者可以独立地变化。
抽象化角色(Abstraction):该角色抽象化的给出定义,并保存一个对实现化对象的引用。
package com.DesignPattern.Structural.Bridge; //抽象化角色 public abstract class Abstraction { // 定义对实现化角色的引用 private Implementor imp; public Abstraction(Implementor imp) { this.imp = imp; } // 业务方法 public void operation() { this.imp.operationImp(); } }
实现化角色(Implementor):该角色给出实现化角色的接口,但不给出具体的实现。
package com.DesignPattern.Structural.Bridge; //实现化角色 public interface Implementor { // 方法的实现化声明 public void operationImp(); }
修正抽象化角色(RefinedAbstraction):该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正。
package com.DesignPattern.Structural.Bridge; //修正抽象化角色 public class RefinedAbstraction extends Abstraction { public RefinedAbstraction(Implementor imp) { super(imp); } // 修正父类的方法 public void operation() { // 业务代码 super.operation(); System.out.println("RefinedAbstraction.operation()"); } }
具体实现化角色(ConcreteImplementor):该角色对实现化角色接口中的方法进行具体实现。
package com.DesignPattern.Structural.Bridge; //具体实现化角色 public class ConcreteImplementor implements Implementor { // 方法的实现化实现 @Override public void operationImp() { // 业务处理逻辑代码 System.out.println("ConcreteImplementor.operationImp()"); } }
Client.java
package com.DesignPattern.Structural.Bridge; public class Client { public static void main(String[] args) { // 定义一个实现化角色 Implementor imp = new ConcreteImplementor(); // 定义一个抽象化角色 Abstraction abs = new RefinedAbstraction(imp); // 执行 abs.operation(); } }
桥梁模式的实例
AbstractShape.java
package com.DesignPattern.Structural.Bridge; //图形 public abstract class AbstractShape { Color color; public AbstractShape(Color color) { this.color = color; } public abstract void draw(); }
Color.java
package com.DesignPattern.Structural.Bridge; //颜色 public interface Color { String getColor(); }
Cirle.java
package com.DesignPattern.Structural.Bridge; //圆形 public class Circle extends AbstractShape { public Circle(Color color) { super(color); } @Override public void draw() { System.out.println("use "+color.getColor()+" draw Circle..."); } }
Square.java
package com.DesignPattern.Structural.Bridge; //正方形 public class Square extends AbstractShape{ public Square(Color color) { super(color); } @Override public void draw() { System.out.println("use "+color.getColor()+ " draw Square"); } }
Red.java
package com.DesignPattern.Structural.Bridge; public class Red implements Color { @Override public String getColor() { return "Red Color"; } }
Green.java
package com.DesignPattern.Structural.Bridge; public class Green implements Color { @Override public String getColor() { return "Green Color"; } }
Test.java
package com.DesignPattern.Structural.Bridge; public class Test { public static void main(String[] args){ Color color=new Green(); AbstractShape shape=new Square(color); shape.draw(); } }
相关文章推荐
- 深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
- MyBatis——Java API
- Java中super.getClass方法调用
- Java并发编程:线程池的使用
- java文件io过滤器
- myeclipse 10安装svn插件
- Java带包编译运行
- 编译java程序时的一个问题
- Java核心API -- 14(Socket)
- java 第七天 排序
- Java中的native关键字浅析(Java Native Interface)
- Eclipse中如何将Java项目转换为WEB项目
- (图文)在MyEclipse(2015)中上传项目到github的步骤(很详细)
- java学习笔记之——多线程(三)
- Java判断字符串中是否包含中文
- Eclipse for J2EE服务器端口8080占用问题
- eclipse上安装sonarqube插件
- 【springmvc+mybatis项目实战】杰信商贸-3.需求分析与数据库建模
- java 通过User-Agent来判断是否是移动浏览器
- Java MVC设计模式与封装完整示例与介绍 订票系统