diff --git a/python/GildedRose_Design_Document.md b/python/GildedRose_Design_Document.md new file mode 100644 index 00000000..90e42eab --- /dev/null +++ b/python/GildedRose_Design_Document.md @@ -0,0 +1,34 @@ +# Gilded Rose Design + +**Pattern Used:** Strategy Pattern + +--- + +## The Problem + +The original code is a mess of nested if-statements. Hard to read, hard to change. + +## The Solution + +Give each item type its own class to handle updates: + +- **NormalUpdater** - normal items degrade +- **BrieUpdater** - gets better with age +- **BackstageUpdater** - special concert rules +- **SulfurasUpdater** - never changes +- **ConjuredUpdater** - degrades 2x faster + +## Why This Works + +1. **Easy to add new items** - just make a new updater class +2. **Easy to read** - each class does one thing +3. **Easy to test** - test each updater separately + +## Drawbacks + +- More files to manage +- Factory needs updating for new items + +--- + +![UML Diagram](gilded_rose_uml.png) diff --git a/python/gilded_rose_uml.png b/python/gilded_rose_uml.png new file mode 100644 index 00000000..9a0bebf6 Binary files /dev/null and b/python/gilded_rose_uml.png differ