返回

设计模式在项目中的应用

后端

策略模式

策略模式是一种对象行为型设计模式,它允许您在运行时选择不同的算法或策略来处理特定任务。策略模式的优点在于它可以提高代码的可重用性、可维护性和可扩展性。

业务场景:

在发布一个通知的时候,需要选择接收该通知的用户对象,可以按照【部门】,【考点】,【学校】三种选择,此时多数小伙伴的实现方式是这样的

public class Notice {

    private String type;

    public Notice(String type) {
        this.type = type;
    }

    public void send() {
        if ("部门".equals(type)) {
            // 发送给部门
        } else if ("考点".equals(type)) {
            // 发送给考点
        } else if ("学校".equals(type)) {
            // 发送给学校
        }
    }
}

这种实现方式的弊端很明显:

1:如果现在新增加一个【年级】的通知对象,那么我们就需要修改Notice类的send()方法,这会违反开闭原则。

2:如果我们需要根据不同的条件发送通知,比如根据用户角色、用户权限等,那么我们就需要在Notice类中增加大量的if-else判断语句,这会使代码变得难以维护。

解决方案:

使用策略模式重构代码,将不同的通知发送策略封装到不同的类中,然后在Notice类中根据不同的条件选择不同的策略来发送通知。

public class Notice {

    private NoticeStrategy strategy;

    public Notice(NoticeStrategy strategy) {
        this.strategy = strategy;
    }

    public void send() {
        strategy.send();
    }
}

public interface NoticeStrategy {

    void send();
}

public class DepartmentNoticeStrategy implements NoticeStrategy {

    @Override
    public void send() {
        // 发送给部门
    }
}

public class ExamNoticeStrategy implements NoticeStrategy {

    @Override
    public void send() {
        // 发送给考点
    }
}

public class SchoolNoticeStrategy implements NoticeStrategy {

    @Override
    public void send() {
        // 发送给学校
    }
}

public class GradeNoticeStrategy implements NoticeStrategy {

    @Override
    public void send() {
        // 发送给年级
    }
}

使用策略模式后,代码的可重用性、可维护性和可扩展性都得到了提高。如果现在需要增加一个新的通知对象,只需要创建一个新的策略类即可,而不需要修改Notice类。如果我们需要根据不同的条件发送通知,只需要在Notice类中选择不同的策略即可,而不需要修改策略类。

工厂模式

工厂模式是一种创建型设计模式,它允许您在不指定具体类的情况下创建对象。工厂模式的优点在于它可以提高代码的可重用性、可维护性和可扩展性。

业务场景:

在一个项目中,我们需要创建不同的产品,比如手机、电脑、电视等。如果我们使用传统的方式来创建这些产品,那么我们需要为每种产品创建一个单独的类,这会使代码变得难以维护。

解决方案:

使用工厂模式重构代码,将不同产品的创建过程封装到工厂类中,然后在需要创建产品的时候,通过工厂类来创建。

public class ProductFactory {

    public static Product createProduct(String type) {
        if ("手机".equals(type)) {
            return new Phone();
        } else if ("电脑".equals(type)) {
            return new Computer();
        } else if ("电视".equals(type)) {
            return new TV();
        } else {
            throw new IllegalArgumentException("不支持的产品类型:" + type);
        }
    }
}

public abstract class Product {

    public abstract void use();
}

public class Phone extends Product {

    @Override
    public void use() {
        System.out.println("使用手机");
    }
}

public class Computer extends Product {

    @Override
    public void use() {
        System.out.println("使用电脑");
    }
}

public class TV extends Product {

    @Override
    public void use() {
        System.out.println("使用电视");
    }
}

使用工厂模式后,代码的可重用性、可维护性和可扩展性都得到了提高。如果现在需要增加一种新的产品,只需要在ProductFactory类中添加一个新的创建方法即可,而不需要修改其他类。

单例模式

单例模式是一种创建型设计模式,它确保一个类只有一个实例,并且提供一个全局访问点。单例模式的优点在于它可以提高代码的性能、可重用性和可维护性。

业务场景:

在一个项目中,我们需要创建一个全局的配置类,该类只能被实例化一次。如果我们使用传统的方式来创建这个类,那么我们可能