Files
java-design-patterns/rule-engine/etc/rule-engine.urm.puml
T
BAGHDAD MohamedandGitHub 5d6ff2f0c4 feat: add rule engine design pattern (#3548)
Add an educational rule-engine module demonstrating the Rule Engine
pattern. Each business rule is an independent object exposing evaluate
(decision) and execute (action); a RuleEngine evaluates a collection of
rules against an immutable loan-application context in insertion order,
runs the passing rules, and reports every passed and failed rule via an
immutable RuleEngineResult. Includes three concrete rules, an App demo,
unit tests, README, and class diagram.
2026-08-16 21:47:18 +03:00

62 lines
1.8 KiB
Plaintext

@startuml
package com.iluwatar.ruleengine {
interface Rule<T> {
+ name() : String {abstract}
+ evaluate(context : T) : boolean {abstract}
+ execute(context : T) : void {abstract}
}
class RuleEngine<T> {
- rules : List<Rule<T>>
+ RuleEngine(rules : List<Rule<T>>)
+ run(context : T) : RuleEngineResult
+ rules() : List<Rule<T>>
}
class RuleEngineResult {
+ RuleEngineResult(approved : boolean, passedRules : List<String>, failedRules : List<String>)
+ approved() : boolean
+ passedRules() : List<String>
+ failedRules() : List<String>
}
class LoanApplication {
+ LoanApplication(age : int, monthlyIncome : double, loanAmount : double, creditScore : int)
+ age() : int
+ monthlyIncome() : double
+ loanAmount() : double
+ creditScore() : int
}
class MinimumAgeRule {
- minimumAge : int
+ MinimumAgeRule(minimumAge : int)
+ name() : String
+ evaluate(context : LoanApplication) : boolean
+ execute(context : LoanApplication) : void
}
class MinimumIncomeRule {
- minimumIncome : double
+ MinimumIncomeRule(minimumIncome : double)
+ name() : String
+ evaluate(context : LoanApplication) : boolean
+ execute(context : LoanApplication) : void
}
class CreditScoreRule {
- minimumScore : int
+ CreditScoreRule(minimumScore : int)
+ name() : String
+ evaluate(context : LoanApplication) : boolean
+ execute(context : LoanApplication) : void
}
class App {
+ App()
+ main(args : String[]) : void
}
}
RuleEngine --> "*" Rule
RuleEngine ..> RuleEngineResult
MinimumAgeRule ..|> Rule
MinimumIncomeRule ..|> Rule
CreditScoreRule ..|> Rule
MinimumAgeRule ..> LoanApplication
MinimumIncomeRule ..> LoanApplication
CreditScoreRule ..> LoanApplication
@enduml