设计模式在项目中的应用
2023-11-25 20:06:54
策略模式
策略模式是一种对象行为型设计模式,它允许您在运行时选择不同的算法或策略来处理特定任务。策略模式的优点在于它可以提高代码的可重用性、可维护性和可扩展性。
业务场景:
在发布一个通知的时候,需要选择接收该通知的用户对象,可以按照【部门】,【考点】,【学校】三种选择,此时多数小伙伴的实现方式是这样的
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类中添加一个新的创建方法即可,而不需要修改其他类。
单例模式
单例模式是一种创建型设计模式,它确保一个类只有一个实例,并且提供一个全局访问点。单例模式的优点在于它可以提高代码的性能、可重用性和可维护性。
业务场景:
在一个项目中,我们需要创建一个全局的配置类,该类只能被实例化一次。如果我们使用传统的方式来创建这个类,那么我们可能