Project implementasi 5 Design Patterns dalam Java dengan perbandingan performa antara kode tanpa pattern dan dengan pattern.
Project ini mendemonstrasikan perbedaan antara kode procedural biasa dengan kode yang menggunakan design pattern. Setiap pattern memiliki 2 versi:
- Before: Implementasi tanpa menggunakan design pattern
- After: Implementasi dengan design pattern yang sesuai
Tujuan utama adalah menunjukkan bagaimana design pattern dapat meningkatkan struktur kode dan performa aplikasi.
Memastikan hanya ada satu instance dari cache manager yang digunakan di seluruh aplikasi.
Before: Setiap request membuat instance CacheManager baru dengan inisialisasi lengkap After: Menggunakan satu instance yang sama untuk semua request
- Hemat memory (tidak ada duplikasi instance)
- Hemat waktu inisialisasi
- Data cache konsisten di seluruh aplikasi
Memisahkan logika pembuatan object dari logika bisnis.
Before: Menggunakan if-else bertingkat untuk instantiasi object berdasarkan tipe After: Factory class yang mengelola pembuatan object HTTP Request
- Kode lebih clean dan mudah dibaca
- Mudah menambah tipe request baru
- Centralized object creation
- Menggunakan caching untuk reusable objects
Membuat keluarga object yang saling berhubungan tanpa perlu specify class konkret.
Before: Manual instantiation untuk Dialog, Menu, dan Toolbar setiap platform After: Factory yang memproduksi komponen GUI yang konsisten per platform (Windows/Mac)
- Konsistensi antar komponen dalam satu platform
- Mudah menambah platform baru (Linux, dll)
- Loose coupling antara client code dan concrete classes
- Code reusability tinggi
Membangun object kompleks step-by-step dengan interface yang fluent.
Before: Setter method beruntun yang panjang dan rentan error After: Fluent builder interface dengan method chaining
- Kode lebih readable dan ekspresif
- Immutable object (thread-safe)
- Flexible construction (optional parameters)
- Prevent inconsistent object state
Membuat object baru dengan cloning object yang sudah ada.
Before: Membuat instance baru dengan constructor dan inisialisasi penuh setiap kali After: Clone template object yang sudah ada (deep copy)
- Lebih cepat daripada instantiation baru
- Hemat resource untuk object kompleks
- Mudah membuat variasi dari template yang sama
- Menghindari expensive initialization berulang
- Java JDK 17 atau lebih tinggi
- PowerShell (untuk Windows)
- Visual Studio Code (optional)
- Buka VSCode
- Buka Terminal (Ctrl + `)
- Pastikan menggunakan PowerShell
- Pastikan berada di root folder project (sejajar dengan folder
src)
Compile dan Run Semua Pattern:
New-Item -ItemType Directory -Force -Path bin | Out-Null
Write-Host "Compiling all files..." -ForegroundColor Yellow
javac -d bin src/singleton/before/*.java
javac -d bin src/singleton/after/*.java
javac -d bin src/factory/before/*.java
javac -d bin src/factory/after/*.java
javac -d bin src/abstractfactory/before/*.java
javac -d bin src/abstractfactory/after/*.java
javac -d bin src/builder/before/*.java
javac -d bin src/builder/after/*.java
javac -d bin src/prototype/before/*.java
javac -d bin src/prototype/after/*.java
Write-Host "`nRunning all tests...`n" -ForegroundColor Green
java -cp bin singleton.before.Main
java -cp bin singleton.after.Main
Write-Host ""
java -cp bin factory.before.Main
java -cp bin factory.after.Main
Write-Host ""
java -cp bin abstractfactory.before.Main
java -cp bin abstractfactory.after.Main
Write-Host ""
java -cp bin builder.before.Main
java -cp bin builder.after.Main
Write-Host ""
java -cp bin prototype.before.Main
java -cp bin prototype.after.Main
Write-Host "`nDone!" -ForegroundColor Green