肖哥弹架构 跟大家"弹弹" 业务中设计模式的使用,需要代码关注
欢迎 点赞,点赞,点赞。
关注公号Solomon肖哥弹架构获取更多精彩内容
在线教育平台提供了各种类型的课程,包括单个视频课程、文档课程,以及由多个小课程组成的组合课程。这些课程在功能上需要一致性,例如:课程价格,课程展示。
2. 为什么要使用组合设计模式
组合模式允许将对象组合成树状结构,以表示"部分-整体"的层次关系,使得用户可以一致地对待单个对象和组合对象。
3. 标准组合设计模式图
4. 业务组合设计模式图
5. 业务代码参考
Java
import java.util.ArrayList;
import java.util.List;
// 课程项接口,定义了课程项的基本操作
interface CourseItem {
void display(int depth);
double cost();
}
// 叶子节点:视频课程
class VideoCourse implements CourseItem {
private String title;
private double price;
public VideoCourse(String title, double price) {
this.title = title;
this.price = price;
}
@Override
public void display(int depth) {
String indent = " ".repeat(depth);
System.out.println(indent + title + " - ¥" + price);
}
@Override
public double cost() {
return price;
}
}
// 叶子节点:文档课程
class DocumentCourse implements CourseItem {
private String title;
private double price;
public DocumentCourse(String title, double price) {
this.title = title;
this.price = price;
}
@Override
public void display(int depth) {
String indent = " ".repeat(depth);
System.out.println(indent + title + " - ¥" + price);
}
@Override
public double cost() {
return price;
}
}
// 组合节点:课程包
class CourseBundle implements CourseItem {
private List<CourseItem> courses = new ArrayList<>();
public void addCourseItem(CourseItem course) {
courses.add(course);
}
public void removeCourseItem(CourseItem course) {
courses.remove(course);
}
@Override
public void display(int depth) {
String indent = " ".repeat(depth);
System.out.println(indent + "Course Bundle - Contains " + courses.size() + " items");
for (CourseItem course : courses) {
course.display(depth + 1);
}
}
@Override
public double cost() {
double totalCost = 0;
for (CourseItem course : courses) {
totalCost += course.cost();
}
return totalCost;
}
}
// 客户端使用
class OnlineEducationPlatform {
public static void main(String[] args) {
// 创建单个课程
CourseItem javaBasicsVideo = new VideoCourse("Java 课", 199.99);
CourseItem pythonBasicsVideo = new DocumentCourse("Python课 ", 149.99);
// 创建课程包
CourseItem beginnerBundle = new CourseBundle();
beginnerBundle.addCourseItem(javaBasicsVideo);
beginnerBundle.addCourseItem(pythonBasicsVideo);
// 显示课程包内容及价格
beginnerBundle.display(0);
System.out.println("课程包价格: ¥" + beginnerBundle.cost());
}
}
6. 使用组合设计模式的好处
组合模式解决了以下问题:
- 统一接口:使得单个课程和组合课程有统一的接口。
- 灵活性:可以灵活地添加或删除课程。
- 扩展性:易于添加新的课程类型。
7. 其他使用组合设计模式场景参考
组合模式适用于需要表示部分-整体层次结构的场景,例如:
- 组织结构管理:如公司部门和员工的管理。
- 文件系统:如文件和文件夹的管理。
8. 可参考开源框架
- Apache Wicket:在构建Web应用程序时,使用组合模式来创建组件层次结构。
总结
组合模式通过将对象组合成树状结构,提供了一种灵活的方式来管理层次化的数据结构,使得用户可以一致地对待单个对象和组合对象。
历史热点文章
- 外观模式(Facade Pattern):微服务架构中的数据库访问实战案例分析
- 代理模式(Proxy Pattern):权限校验API调用实战案例分析
- 桥接模式(Bridge Pattern):多样式用户界面组件实战案例分析
- 组合模式(Composite Pattern): 在线教育平台课程管理实战案例分析
- 享元模式(Flyweight Pattern):网页游戏中的角色对象管理实战案例分析
- 观察者模式(Observer Pattern):股票交易系统实战案例分析
- 策略模式(Strategy Pattern):电商平台的优惠券系统实战案例分析
- 模板方法模式(Template Method Pattern):视频播放应用实战案例分析
- 命令模式(Command Pattern):网络爬虫任务队列实战案例分析
- 迭代器模式(Iterator Pattern):电商平台商品分类浏览实战案例分析
- 中介者模式(Mediator Pattern):即时通讯软件实战案例分析
- 备忘录模式(Memento Pattern):游戏存档系统实战案例分析
- 状态模式(State Pattern):电商平台订单状态管理实战案例分析
- 责任链模式(Chain of Responsibility Pattern):电商平台的订单审批流程实战案例分析
- 访问者模式(Visitor Pattern):电商平台商品访问统计实战案例分析
- 工厂方法模式(Factory Method Pattern): 电商多种支付实战案例分析
- 抽象工厂模式(Abstract Factory Pattern):多风格桌面应用实战案例分析
- 建造者模式(Builder Pattern): 在线订单系统实战案例分析
- 原型模式(Prototype Pattern): 云服务环境配置实战案例分析
- 适配器模式(Adapter Pattern):第三方支付集成实战案例分析
- 装饰器模式(Decorator Pattern):电商平台商品价格策略实战案例分析
- 单例模式(Singleton Pattern):购物车实战案例分析