滨州福康环保科技有限公司

家居设计|智圆设计|简谱设计|校徽设计

解锁条件匹配设计模式:从简单工厂到责任链的全面解析与实战案例

条件匹配设计模式一种软件开发常用设计模式,它通过定义系列条件和相应的处理逻辑,来实现根据不同条件执行不同操作的目的。这种模式的核心思想是将条件判断与具体操作分离,使得代码更加清晰、可维护和可扩展。条件匹配设计模式通常包括以下几种常见的实现方式

1. 简单工厂模式(Simple Factory Pattern)

简单工厂模式是一种创建型设计模式,它通过一个工厂类来根据不同的条件创建不同的对象实例。工厂类通常包含一个静态方法,该方法根据传入的参数决定返回哪个具体的产品对象。

解锁条件匹配设计模式:从简单工厂到责任链的全面解析与实战案例

案例 假设我们有一个图形绘制系统,需要根据用户选择的图形类型绘制不同的图形(如圆形、矩形、三角形)。我们可以使用简单工厂模式来实现:

interface Shape {
    void draw();
}

class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制圆形");
    }
}

class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制矩形");
    }
}

class Triangle implements Shape {
    @Override
    public void draw() {
        System.out.println("绘制三角形");
    }
}

class ShapeFactory {
    public static Shape getShape(String shapeType) {
        if (shapeType == null) {
            return null;
        }
        if (shapeType.equalsIgnoreCase("CIRCLE")) {
            return new Circle();
        } else if (shapeType.equalsIgnoreCase("RECTANGLE")) {
            return new Rectangle();
        } else if (shapeType.equalsIgnoreCase("TRIANGLE")) {
            return new Triangle();
        }
        return null;
    }
}

public class Main {
    public static void main(String[] args) {
        Shape circle = ShapeFactory.getShape("CIRCLE");
        circle.draw();

        Shape rectangle = ShapeFactory.getShape("RECTANGLE");
        rectangle.draw();

        Shape triangle = ShapeFactory.getShape("TRIANGLE");
        triangle.draw();
    }
}

2. 策略模式(Strategy Pattern)

策略模式是一种行为型设计模式,它允许在运行时选择算法或策略。策略模式将不同的算法封装独立的策略类中,使得它们可以互换使用。通过这种方式,策略模式可以避免大量的条件判断语句

案例: 假设我们有一个支付系统,支持多种支付方式(如信用卡支付、支付宝支付、微信支付)。我们可以使用策略模式来实现:

interface PaymentStrategy {
    void pay(int amount);
}

class CreditCardStrategy implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("使用信用卡支付" + amount + "元");
    }
}

class AlipayStrategy implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("使用支付宝支付" + amount + "元");
    }
}

class WeChatPayStrategy implements PaymentStrategy {
    @Override
    public void pay(int amount) {
        System.out.println("使用微信支付" + amount + "元");
    }
}

class ShoppingCart {
    private PaymentStrategy paymentStrategy;

    public void setPaymentStrategy(PaymentStrategy paymentStrategy) {
        this.paymentStrategy = paymentStrategy;
    }

    public void checkout(int amount) {
        paymentStrategy.pay(amount);
    }
}

public class Main {
    public static void main(String[] args) {
        ShoppingCart cart = new ShoppingCart();

        cart.setPaymentStrategy(new CreditCardStrategy());
        cart.checkout(100);

        cart.setPaymentStrategy(new AlipayStrategy());
        cart.checkout(200);

        cart.setPaymentStrategy(new WeChatPayStrategy());
        cart.checkout(300);
    }
}

3. 状态模式(State Pattern)

状态模式是一种行为型设计模式,它允许对象在内部状态改变时改变它的行为。状态模式将不同状态下的行为封装在独立的状态类中,使得状态转换和行为处理更加清晰。

案例: 假设我们有一个电梯控制系统,电梯有多种状态(如开门状态、关门状态、运行状态)。我们可以使用状态模式来实现:

interface ElevatorState {
    void openDoor();
    void closeDoor();
    void move();
}

class OpenState implements ElevatorState {
    @Override
    public void openDoor() {
        System.out.println("门已经打开");
    }

    @Override
    public void closeDoor() {
        System.out.println("关闭门");
    }

    @Override
    public void move() {
        System.out.println("门未关闭,无法移动");
    }
}

class CloseState implements ElevatorState {
    @Override
    public void openDoor() {
        System.out.println("打开门");
    }

    @Override
    public void closeDoor() {
        System.out.println("门已经关闭");
    }

    @Override
    public void move() {
        System.out.println("电梯开始移动");
    }
}

class Elevator {
    private ElevatorState state;

    public void setState(ElevatorState state) {
        this.state = state;
    }

    public void openDoor() {
        state.openDoor();
    }

    public void closeDoor() {
        state.closeDoor();
    }

    public void move() {
        state.move();
    }
}

public class Main {
    public static void main(String[] args) {
        Elevator elevator = new Elevator();

        elevator.setState(new OpenState());
        elevator.openDoor();
        elevator.move();

        elevator.setState(new CloseState());
        elevator.closeDoor();
        elevator.move();
    }
}

4. 责任链模式(Chain of Responsibility Pattern)

责任链模式是一种行为型设计模式,它允许多个对象有机会处理请求,从而避免请求的发送者和接收者之间耦合。责任链模式将处理请求的对象链接成一条链,请求沿着这条链传递,直到有一个对象处理它为止。

案例: 假设我们有一个请假审批系统,不同级别的领导可以审批不同天数的请假申请。我们可以使用责任链模式来实现:

abstract class Approver {
    protected Approver nextApprover;

    public void setNextApprover(Approver nextApprover) {
        this.nextApprover = nextApprover;
    }

    public abstract void processRequest(LeaveRequest request);
}

class Manager extends Approver {
    @Override
    public void processRequest(LeaveRequest request) {
        if (request.getDays() <= 3) {
            System.out.println("经理审批通过请假申请");
        } else if (nextApprover != null) {
            nextApprover.processRequest(request);
        }
    }
}

class Director extends Approver {
    @Override
    public void processRequest(LeaveRequest request) {
        if (request.getDays() <= 7) {
            System.out.println("总监审批通过请假申请");
        } else if (nextApprover != null) {
            nextApprover.processRequest(request);
        }
    }
}

class CEO extends Approver {
    @Override
    public void processRequest(LeaveRequest request) {
        if (request.getDays() > 7) {
            System.out.println("CEO审批通过请假申请");
        }
    }
}

class LeaveRequest {
    private int days;

    public LeaveRequest(int days) {
        this.days = days;
    }

    public int getDays() {
        return days;
    }
}

public class Main {
    public static void main(String[] args) {
        Approver manager = new Manager();
        Approver director = new Director();
        Approver ceo = new CEO();

        manager.setNextApprover(director);
        director.setNextApprover(ceo);

        LeaveRequest request1 = new LeaveRequest(2);
        manager.processRequest(request1);

        LeaveRequest request2 = new LeaveRequest(5);
        manager.processRequest(request2);

        LeaveRequest request3 = new LeaveRequest(10);
        manager.processRequest(request3);
    }
}

总结

条件匹配设计模式通过将条件判断与具体操作分离,使得代码更加清晰、可维护和可扩展。常见的实现方式包括简单工厂模式、策略模式、状态模式和责任链模式。每种模式都有其适用的场景优势开发者可以根据具体需求选择合适的模式来解决问题

Powered By 滨州福康环保科技有限公司

Copyright Your WebSite.Some Rights Reserved.鲁ICP备2023007641号-23