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