39 lines
1.5 KiB
Java
39 lines
1.5 KiB
Java
package adapter;
|
|
|
|
/**
|
|
* Adapter Design Pattern — Runnable Demo
|
|
*
|
|
* Demonstrates wrapping an incompatible StripeClient behind
|
|
* the PaymentGateway interface your application expects.
|
|
*
|
|
* Run: javac adapter/*.java && java adapter.Main
|
|
* Article: https://ankurm.com/adapter-design-pattern-java/
|
|
*/
|
|
public class Main {
|
|
|
|
public static void main(String[] args) {
|
|
System.out.println("=== Adapter Design Pattern Demo ===\n");
|
|
|
|
// --- Object Adapter: Stripe ---
|
|
System.out.println("-- Using Stripe via Adapter --");
|
|
StripeClient stripeClient = new StripeClient("sk_test_4eC39HqLyjWDarjtT1zdp7dc");
|
|
PaymentGateway stripeGateway = new StripePaymentAdapter(stripeClient);
|
|
|
|
OrderService orderService = new OrderService(stripeGateway);
|
|
orderService.processOrder("ORD-001", "cus_abc123", 99.99);
|
|
|
|
System.out.println("\n-- Testing refund --");
|
|
boolean refunded = stripeGateway.refund("ch_ORD-001", 99.99);
|
|
System.out.println("Refund issued: " + refunded);
|
|
|
|
// --- JDK Example: InputStreamReader as Adapter ---
|
|
System.out.println("\n-- JDK Adapter: InputStreamReader --");
|
|
// InputStreamReader adapts InputStream (byte-based) to Reader (char-based)
|
|
// The client (BufferedReader) only knows about Reader, not InputStream
|
|
System.out.println("InputStreamReader wraps System.in (InputStream) as a Reader.");
|
|
System.out.println("Your code reads chars; the adapter handles byte-to-char conversion.");
|
|
|
|
System.out.println("\n=== Demo complete ===");
|
|
}
|
|
}
|