diff --git a/System Development/PatternAdapter/.classpath b/System Development/PatternAdapter/.classpath
new file mode 100644
index 0000000..d54800d
--- /dev/null
+++ b/System Development/PatternAdapter/.classpath
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/System Development/PatternAdapter/.project b/System Development/PatternAdapter/.project
new file mode 100644
index 0000000..fb44681
--- /dev/null
+++ b/System Development/PatternAdapter/.project
@@ -0,0 +1,17 @@
+
+
+ PatternAdapter
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+
+ org.eclipse.jdt.core.javanature
+
+
diff --git a/System Development/PatternAdapter/.settings/org.eclipse.jdt.core.prefs b/System Development/PatternAdapter/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..f2525a8
--- /dev/null
+++ b/System Development/PatternAdapter/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,14 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.debug.lineNumber=generate
+org.eclipse.jdt.core.compiler.debug.localVariable=generate
+org.eclipse.jdt.core.compiler.debug.sourceFile=generate
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/System Development/PatternAdapter/src/Adapter.java b/System Development/PatternAdapter/src/Adapter.java
new file mode 100644
index 0000000..9e1f6bc
--- /dev/null
+++ b/System Development/PatternAdapter/src/Adapter.java
@@ -0,0 +1,94 @@
+interface ILightningPhone {
+ void recharge();
+ void useLightning();
+}
+
+interface IMicroUsbPhone {
+ void recharge();
+ void useMicroUsb();
+}
+
+class Iphone implements ILightningPhone {
+ private boolean connector;
+
+ @Override
+ public void useLightning() {
+ connector = true;
+ System.out.println("Lightning connected");
+ }
+
+ @Override
+ public void recharge() {
+ if (connector) {
+ System.out.println("Recharge started");
+ System.out.println("Recharge finished");
+ } else {
+ System.out.println("Connect Lightning first");
+ }
+ }
+}
+
+class Android implements IMicroUsbPhone {
+ private boolean connector;
+
+ @Override
+ public void useMicroUsb() {
+ connector = true;
+ System.out.println("MicroUsb connected");
+ }
+
+ @Override
+ public void recharge() {
+ if (connector) {
+ System.out.println("Recharge started");
+ System.out.println("Recharge finished");
+ } else {
+ System.out.println("Connect MicroUsb first");
+ }
+ }
+}
+/* exposing the target interface while wrapping source object */
+class LightningToMicroUsbAdapter implements IMicroUsbPhone {
+ private final ILightningPhone lightningPhone;
+
+ public LightningToMicroUsbAdapter(ILightningPhone lightningPhone) {
+ this.lightningPhone = lightningPhone;
+ }
+
+ @Override
+ public void useMicroUsb() {
+ System.out.println("MicroUsb connected");
+ lightningPhone.useLightning();
+ }
+
+ @Override
+ public void recharge() {
+ lightningPhone.recharge();
+ }
+}
+
+public class Adapter {
+ static void rechargeMicroUsbPhone(IMicroUsbPhone phone) {
+ phone.useMicroUsb();
+ phone.recharge();
+ }
+
+ static void rechargeLightningPhone(ILightningPhone phone) {
+ phone.useLightning();
+ phone.recharge();
+ }
+
+ public static void main(String[] args) {
+ Android android = new Android();
+ Iphone iPhone = new Iphone();
+
+ System.out.println("Recharging android with MicroUsb");
+ rechargeMicroUsbPhone(android);
+
+ System.out.println("Recharging iPhone with Lightning");
+ rechargeLightningPhone(iPhone);
+
+ System.out.println("Recharging iPhone with MicroUsb");
+ rechargeMicroUsbPhone(new LightningToMicroUsbAdapter (iPhone));
+ }
+}
\ No newline at end of file