返回

结构型设计模式:代理、桥接、装饰者和适配器

Android

引言

设计模式是软件开发中经过验证的解决方案,可以帮助我们解决常见的软件设计问题。结构型设计模式关注于类的关系和对象的组织方式,它们可以提高代码的可扩展性、可维护性和灵活性。

本文将详细介绍四种重要的结构型设计模式:代理模式、桥接模式、装饰者模式和适配器模式。这些模式在软件设计中有着广泛的应用,可以帮助我们解决各种问题,例如对象访问控制、解耦、扩展和兼容性。

代理模式

代理模式提供了一个代理类,该代理类控制对真实对象的访问。代理可以执行各种操作,例如:

  • 保护真实对象: 代理可以保护真实对象不被直接访问,从而提高安全性和封装性。
  • 控制对对象的访问: 代理可以控制对真实对象的访问权限,只允许授权客户端访问。
  • 缓存对象: 代理可以缓存真实对象,以提高性能和减少对真实对象的访问。

示例:

interface ISubject {
    void doSomething();
}

class RealSubject implements ISubject {
    @Override
    public void doSomething() {
        // 实际业务逻辑
    }
}

class ProxySubject implements ISubject {
    private RealSubject realSubject;

    @Override
    public void doSomething() {
        // 代理逻辑(例如权限控制、缓存)
        if (realSubject == null) {
            realSubject = new RealSubject();
        }
        realSubject.doSomething();
    }
}

桥接模式

桥接模式将抽象部分与实现部分分离,使它们可以独立变化。这可以提高代码的灵活性,允许我们在不修改抽象部分的情况下修改实现部分。

示例:

// 抽象部分
interface IDrawing {
    void draw();
}

// 实现部分
class Circle implements IDrawing {
    @Override
    public void draw() {
        // 画圆形
    }
}

class Square implements IDrawing {
    @Override
    public void draw() {
        // 画方形
    }
}

// 桥接类
class DrawingTool {
    private IDrawing drawing;

    public DrawingTool(IDrawing drawing) {
        this.drawing = drawing;
    }

    public void draw() {
        drawing.draw();
    }
}

装饰者模式

装饰者模式允许我们向对象动态添加额外的功能,而不改变其核心功能。这可以提高代码的可扩展性和灵活性,允许我们在不修改现有对象的情况下扩展其功能。

示例:

interface Shape {
    void draw();
}

class Rectangle implements Shape {
    @Override
    public void draw() {
        // 画矩形
    }
}

class Circle implements Shape {
    @Override
    public void draw() {
        // 画圆形
    }
}

class Decorator implements Shape {
    private Shape shape;

    public Decorator(Shape shape) {
        this.shape = shape;
    }

    @Override
    public void draw() {
        shape.draw();
        // 添加额外的功能(例如描边、阴影)
    }
}

适配器模式

适配器模式允许两个不兼容的接口或类协同工作。这可以提高代码的兼容性和可重用性,允许我们使用本来不兼容的类或对象。

示例:

// 旧系统接口
interface OldInterface {
    void doSomethingOld();
}

// 新系统接口
interface NewInterface {
    void doSomethingNew();
}

// 适配器类
class Adapter implements NewInterface {
    private OldInterface oldInterface;

    public Adapter(OldInterface oldInterface) {
        this.oldInterface = oldInterface;
    }

    @Override
    public void doSomethingNew() {
        oldInterface.doSomethingOld();
        // 适配新系统接口
    }
}

总结

结构型设计模式是软件设计中必不可少的工具,它们可以帮助我们提高代码的可扩展性、可维护性和灵活性。代理模式、桥接模式、装饰者模式和适配器模式是四种重要的结构型设计模式,它们在各种软件开发场景中都有着广泛的应用。

通过理解和掌握这些设计模式,我们可以设计出更加灵活、可重用和可维护的软件系统。