北京建设网官网证书西安seo外包平台
引言:
规约模式是软件开发中的重要设计原则,它们提供了一种优雅的、灵活的方式来构建高质量的系统。本文将通过实例演示规约模式的具体应用,带你了解这些原则的实战价值。
一、开放封闭原则
// 图形接口
public interface Shape {void draw();
}// 圆形类
public class Circle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a circle.");}
}// 矩形类
public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("Drawing a rectangle.");}
}// 绘图应用类
public class DrawingApp {public void drawShape(Shape shape) {shape.draw();}
}
在上述代码中,我们定义了一个图形接口 Shape
,并为每种图形类型创建了实现类 Circle
和 Rectangle
。在绘图应用类 DrawingApp
中,我们可以调用 drawShape
方法来绘制不同类型的图形,而无需修改已有代码。
二、单一职责原则
// 文件上传类
public class FileUploader {public void uploadFile(File file) {// 实现文件上传逻辑}
}// 文件保存类
public class FileSaver {public void saveFile(File file) {// 实现文件保存逻辑}
}
在上述代码中,我们将文件上传和文件保存两个功能分别封装在了不同的类中,每个类只负责单一职责。这样做有助于代码的复用和维护,使系统更加健壮和灵活。
三、依赖倒置原则
// 通知接口
public interface Notification {void sendNotification(String message);
}// 邮件通知类
public class EmailNotification implements Notification {@Overridepublic void sendNotification(String message) {// 实现发送邮件通知的逻辑}
}// 短信通知类
public class SMSNotification implements Notification {@Overridepublic void sendNotification(String message) {// 实现发送短信通知的逻辑}
}// 订单处理类
public class OrderProcessor {private final Notification notification;public OrderProcessor(Notification notification) {this.notification = notification;}public void processOrder(Order order) {// 处理订单逻辑notification.sendNotification("Your order has been processed.");}
}
在上述代码中,我们使用依赖倒置原则来实现订单处理系统的通知功能。订单处理类 OrderProcessor
依赖于通知接口 Notification
而不是具体的实现类,这样可以轻松切换不同的通知方式,而不影响订单处理逻辑。
四、迪米特法则
考虑一个图书馆管理系统,图书馆管理员需要查看读者的借阅信息。根据迪米特法则,我们应该尽量减少图书馆管理员和读者之间的直接交互。
public class Reader {private String name;private List<Book> borrowedBooks;// getter and setter methods
}public class Library {private List<Reader> readers;public List<Book> getBorrowedBooks(Reader reader) {return reader.getBorrowedBooks();}
}
五、接口隔离原则
假设我们有一个权限管理系统,其中包含管理员、普通用户和游客三种角色。为了遵循接口隔离原则,我们应该为每种角色创建独立的接口,只包含其所需的方法。
public interface Admin {void manageUsers();
}public interface User {void viewProfile();
}public interface Guest {void viewHomePage();
}public class AdminUser implements Admin, User {// 实现管理员和用户的接口方法
}public class RegularUser implements User {// 实现普通用户的接口方法
}public class GuestUser implements Guest {// 实现游客的接口方法
}
这样做有助于避免不必要的接口依赖,提高系统的灵活性和可扩展性。