结构型模式的目的是通过组合类或对象产生更大结构,以适应更高层次的逻辑需求;
结构型模式共有7种:
■ 代理模式
■ 装饰模式
■ 适配器模式
■ 组合模式
■ 桥梁模式
■ 外观模式
■ 享元模式
一、桥梁模式的简介
桥梁模式(Bridge Pattern)也称桥接模式,是一种简单的、不常使用的设计模式;
将抽象和实现解耦,使得两者可以独立地变化;
image.png
桥梁模式4个角色:
■ 抽象化(Abstraction)角色:该角色抽象化的给出定义,并保存一个对实现化对象的引用;
■ 实现化(Implementor)角色:该角色给出实现化角色的接口,但不给出具体的实现;
■ 修正抽象化(RefinedAbstraction)角色:该角色扩展抽象化角色,它引用实现化角色并对抽象化角色进行修正;
■ 具体实现化(ConcreteImplementor)角色:该角色对实现化角色接口中的方法进行具体实现;
/**
* 实现化角色
*/
public interface Implementor {
// 方法的实现化声明
void operationImp();
}
/**
* 具体实现化角色
*/
public class ConcreteImplementor implements Implementor{
// 方法的实现化实现
@Override
public void operationImp() {
// 业务处理代码
System.out.println("业务处理代码");
}
}
/**
* 抽象化角色
*/
public abstract class Abstraction {
private Implementor imp;
public Abstraction(Implementor imp){
this.imp = imp;
}
public void operation(){
this.imp.operationImp();
}
}
/**
* 修正抽象化
*/
public class RefinedAbstraction extends Abstraction{
public RefinedAbstraction(Implementor imp){
super(imp);
}
// 修正父类的方法
@Override
public void operation(){
System.out.println("修正父类的方法-->业务代码");
}
}
/**
* 应用代码
*/
public class Client {
public static void main(String[] args){
// 定义一个实现化角色
Implementor imp = new ConcreteImplementor();
// 定义一个抽象化角色
Abstraction ab = new RefinedAbstraction(imp);
// 执行
ab.operation();
}
}
# 控制台输出:
修正父类的方法-->业务代码
二、桥梁模式的应用
桥梁模式的优点:
■ 抽象和实现分离是桥梁模式的主要特点;
■ 实现对客户透明,客户端不用关心细节的实现;
■ 提高灵活性和扩展性;
三、桥梁模式的实例
# 桥梁模式实现使用多种颜色画多种图形;
image.png
/**
* 颜色接口
*/
public interface Color {
String getColor();
}
/**
* 图形抽象类
*/
public abstract class AbstractShape {
Color color;
public AbstractShape(Color color){
this.color = color;
}
public abstract void draw();
}
/**
* 圆形
*/
public class Circle extends AbstractShape{
public Circle(Color color){
super(color);
}
@Override
public void draw() {
System.out.println("使用" + color.getColor() + "画圆形");
}
}
/**
* 正方形
*/
public class Square extends AbstractShape{
public Square(Color color){
super(color);
}
@Override
public void draw() {
System.out.println("使用" + color.getColor() + "画正方形");
}
}
/**
* 红色
*/
public class Red implements Color{
@Override
public String getColor() {
return "红色";
}
}
/**
* 绿色
*/
public class Green implements Color{
@Override
public String getColor() {
return "绿色";
}
}
/**
* 应用代码
*/
public class ClientDemo {
public static void main(String[] args){
Color green = new Green();
AbstractShape circle = new Circle(green);
circle.draw();
Color red = new Red();
AbstractShape square = new Square(red);
square.draw();
}
}
# 控制台输出:
使用绿色画圆形
使用红色画正方形
参考:
摘录 《设计模式(Java版)》韩敬海主编;(微信读书APP中有资源,可以直接阅读)
网友评论