diff --git a/README.md b/README.md new file mode 100644 index 0000000..bc192a3 --- /dev/null +++ b/README.md @@ -0,0 +1,6 @@ +# Design Pattern +This repo's code is written by following the Design Pattern youtube video tutorials which are created by Sir Derek banas (Youtube Channel:Derek Banas). +
You can found those video tutorials at : https://www.youtube.com/user/derekbanas (Don't forget to like or dislike, if you like please subscribe). +
You can also follow him on Facebook: https://web.facebook.com/dbanas2 + +N.B: Code content for each video tutorial for this series has been placed at branch having the name of the video tutorial diff --git a/src/org/java/derekBanas/adapterDP/Adapter_DP_1.jpg b/src/org/java/derekBanas/adapterDP/Adapter_DP_1.jpg new file mode 100644 index 0000000..22f8eae Binary files /dev/null and b/src/org/java/derekBanas/adapterDP/Adapter_DP_1.jpg differ diff --git a/src/org/java/derekBanas/adapterDP/Adapter_DP_UML.jpg b/src/org/java/derekBanas/adapterDP/Adapter_DP_UML.jpg new file mode 100644 index 0000000..5fd14f8 Binary files /dev/null and b/src/org/java/derekBanas/adapterDP/Adapter_DP_UML.jpg differ diff --git a/src/org/java/derekBanas/adapterDP/EnemyAttacker.java b/src/org/java/derekBanas/adapterDP/EnemyAttacker.java new file mode 100644 index 0000000..3029d78 --- /dev/null +++ b/src/org/java/derekBanas/adapterDP/EnemyAttacker.java @@ -0,0 +1,9 @@ +package org.java.derekBanas.adapterDP; + +public interface EnemyAttacker { + + public void fireWeapon(); + public void driveForward(); + public void assignDriver(String driver); + +} diff --git a/src/org/java/derekBanas/adapterDP/EnemyRobot.java b/src/org/java/derekBanas/adapterDP/EnemyRobot.java new file mode 100644 index 0000000..c232533 --- /dev/null +++ b/src/org/java/derekBanas/adapterDP/EnemyRobot.java @@ -0,0 +1,31 @@ +package org.java.derekBanas.adapterDP; + +import java.util.Random; + +public class EnemyRobot { + +Random generator = new Random(); + + + public void smashWithHand() { + int attackDamage = generator.nextInt(7)+1; + System.out.println("Enemy Robot Does :"+ attackDamage+" Damage by smashing with hands"); + + } + + + public void walkForward() { + int movement = generator.nextInt(5)+1; + System.out.println("Enemy Robot Walk Forward :"+ movement+" Spaces"); + + + } + + + public void reactToHuman(String human) { + + System.out.println(" Enemy Robot tramps on :"+ human); + } + + +} diff --git a/src/org/java/derekBanas/adapterDP/EnemyRobotAdapter.java b/src/org/java/derekBanas/adapterDP/EnemyRobotAdapter.java new file mode 100644 index 0000000..7084155 --- /dev/null +++ b/src/org/java/derekBanas/adapterDP/EnemyRobotAdapter.java @@ -0,0 +1,28 @@ +package org.java.derekBanas.adapterDP; + +public class EnemyRobotAdapter implements EnemyAttacker { + + EnemyRobot theRobot; + + public EnemyRobotAdapter(EnemyRobot newRobot) { + theRobot = newRobot; + } + @Override + public void fireWeapon() { + theRobot.smashWithHand(); + + } + + @Override + public void driveForward() { + theRobot.walkForward(); + + } + + @Override + public void assignDriver(String driver) { + theRobot.reactToHuman(driver); + + } + +} diff --git a/src/org/java/derekBanas/adapterDP/EnemyTank.java b/src/org/java/derekBanas/adapterDP/EnemyTank.java new file mode 100644 index 0000000..1ec9b02 --- /dev/null +++ b/src/org/java/derekBanas/adapterDP/EnemyTank.java @@ -0,0 +1,30 @@ +package org.java.derekBanas.adapterDP; + +import java.util.Random; + +public class EnemyTank implements EnemyAttacker { + + Random generator = new Random(); + + @Override + public void fireWeapon() { + int attackDamage = generator.nextInt(10)+1; + System.out.println("Enemy Tank Does :"+ attackDamage+" Damage"); + + } + + @Override + public void driveForward() { + int movement = generator.nextInt(5)+1; + System.out.println("Enemy Tank Moves :"+ movement+" Spaces"); + + + } + + @Override + public void assignDriver(String driverName) { + + System.out.println(driverName + " is driving the tank"); + } + +} diff --git a/src/org/java/derekBanas/adapterDP/TestEnemyAttacker.java b/src/org/java/derekBanas/adapterDP/TestEnemyAttacker.java new file mode 100644 index 0000000..f58eaa8 --- /dev/null +++ b/src/org/java/derekBanas/adapterDP/TestEnemyAttacker.java @@ -0,0 +1,30 @@ +package org.java.derekBanas.adapterDP; + +public class TestEnemyAttacker { + + public static void main(String[] args){ + + EnemyTank rx7Tank = new EnemyTank(); + + EnemyRobot fredTheRobot = new EnemyRobot(); + + EnemyAttacker robotAdapter = new EnemyRobotAdapter(fredTheRobot); + + System.out.println("The Robot"); + fredTheRobot.reactToHuman("Paul"); + fredTheRobot.walkForward(); + fredTheRobot.smashWithHand(); + + System.out.println("The Enemy tank"); + rx7Tank.assignDriver("Frank"); + rx7Tank.driveForward(); + rx7Tank.fireWeapon(); + + + System.out.println("The Robot Adapter"); + robotAdapter.assignDriver("Mark"); + robotAdapter.driveForward(); + robotAdapter.fireWeapon(); + } + +} diff --git a/src/org/java/derekBanas/commandDP/Command.java b/src/org/java/derekBanas/commandDP/Command.java new file mode 100644 index 0000000..563788a --- /dev/null +++ b/src/org/java/derekBanas/commandDP/Command.java @@ -0,0 +1,9 @@ +package org.java.derekBanas.commandDP; + +public interface Command { + + public void execute(); + + public void undo(); + +} diff --git a/src/org/java/derekBanas/commandDP/Command_DP_1.jpg b/src/org/java/derekBanas/commandDP/Command_DP_1.jpg new file mode 100644 index 0000000..5646e99 Binary files /dev/null and b/src/org/java/derekBanas/commandDP/Command_DP_1.jpg differ diff --git a/src/org/java/derekBanas/commandDP/Command_DP_2.jpg b/src/org/java/derekBanas/commandDP/Command_DP_2.jpg new file mode 100644 index 0000000..4b52247 Binary files /dev/null and b/src/org/java/derekBanas/commandDP/Command_DP_2.jpg differ diff --git a/src/org/java/derekBanas/commandDP/Command_DP_3.jpg b/src/org/java/derekBanas/commandDP/Command_DP_3.jpg new file mode 100644 index 0000000..9f3e01c Binary files /dev/null and b/src/org/java/derekBanas/commandDP/Command_DP_3.jpg differ diff --git a/src/org/java/derekBanas/commandDP/Command_DP_UML.jpg b/src/org/java/derekBanas/commandDP/Command_DP_UML.jpg new file mode 100644 index 0000000..315a9ab Binary files /dev/null and b/src/org/java/derekBanas/commandDP/Command_DP_UML.jpg differ diff --git a/src/org/java/derekBanas/commandDP/DeviceButton.java b/src/org/java/derekBanas/commandDP/DeviceButton.java new file mode 100644 index 0000000..e8d0ad9 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/DeviceButton.java @@ -0,0 +1,19 @@ +package org.java.derekBanas.commandDP; + +public class DeviceButton { + + Command theCommand; + + public DeviceButton(Command newCommand) { + theCommand = newCommand; + } + + public void press(){ + theCommand.execute(); + } + + public void pressUndo(){ + theCommand.undo(); + } + +} diff --git a/src/org/java/derekBanas/commandDP/ElectronicDevice.java b/src/org/java/derekBanas/commandDP/ElectronicDevice.java new file mode 100644 index 0000000..3d775c1 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/ElectronicDevice.java @@ -0,0 +1,10 @@ +package org.java.derekBanas.commandDP; + +public interface ElectronicDevice { + + public void on(); + public void off(); + public void volumeUp(); + public void volumeDown(); + +} diff --git a/src/org/java/derekBanas/commandDP/PlayWithRemote.java b/src/org/java/derekBanas/commandDP/PlayWithRemote.java new file mode 100644 index 0000000..755e954 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/PlayWithRemote.java @@ -0,0 +1,76 @@ +package org.java.derekBanas.commandDP; + +import java.util.ArrayList; +import java.util.List; + +public class PlayWithRemote { + + public static void main(String[] args) { + + ElectronicDevice newDevice = TvRemote.getDevice(); + + TurnTvOn onCommand = new TurnTvOn(newDevice); + + DeviceButton onPressed = new DeviceButton(onCommand); + + onPressed.press(); + + // ----------------- + + TurnTvOff offCommand = new TurnTvOff(newDevice); + + onPressed = new DeviceButton(offCommand); + + onPressed.press(); + + // ----------------- + + TurnVolumeUp volumeUpCommand = new TurnVolumeUp(newDevice); + + onPressed = new DeviceButton(volumeUpCommand); + + onPressed.press(); + onPressed.press(); + onPressed.press(); + + // ----------------- + + TurnVolumeDown volumeDownCommand = new TurnVolumeDown(newDevice); + + onPressed = new DeviceButton(volumeDownCommand); + + onPressed.press(); + onPressed.press(); + onPressed.press(); + onPressed.press(); + onPressed.press(); + onPressed.press(); + onPressed.press(); + + // ----------------- + + Televission theTv = new Televission(); + Radio theRadio = new Radio(); + + List allDevices = new ArrayList(); + allDevices.add(theRadio); + allDevices.add(theTv); + + TurnItAllOff allOff = new TurnItAllOff(allDevices); + + onPressed = new DeviceButton(allOff); + + onPressed.press(); + + // ----------------- + + + TurnItAllOff allUndo = new TurnItAllOff(allDevices); + + onPressed = new DeviceButton(allUndo); + + onPressed.pressUndo(); + + } + +} diff --git a/src/org/java/derekBanas/commandDP/Radio.java b/src/org/java/derekBanas/commandDP/Radio.java new file mode 100644 index 0000000..4d04db1 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/Radio.java @@ -0,0 +1,41 @@ +package org.java.derekBanas.commandDP; + +public class Radio implements ElectronicDevice { + +private int volume = 0; + + + @Override + public void on() { + System.out.println("Radio is On"); + + } + + @Override + public void off() { + System.out.println("Radio is Off"); + + } + + @Override + public void volumeUp() { + volume++; + System.out.println("Radio volume is at: " + volume); + + } + + @Override + public void volumeDown() { + if(volume>0){ + volume--; + System.out.println("Radio volume is at: " + volume); + } + else if(volume==0){ + System.out.println("Radio volume is on Mute : " + volume); + } + + + } + + +} diff --git a/src/org/java/derekBanas/commandDP/Televission.java b/src/org/java/derekBanas/commandDP/Televission.java new file mode 100644 index 0000000..9bc7d70 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/Televission.java @@ -0,0 +1,40 @@ +package org.java.derekBanas.commandDP; + +public class Televission implements ElectronicDevice { + + private int volume = 0; + + + @Override + public void on() { + System.out.println("TV is On"); + + } + + @Override + public void off() { + System.out.println("TV is Off"); + + } + + @Override + public void volumeUp() { + volume++; + System.out.println("TV volume is at: " + volume); + + } + + @Override + public void volumeDown() { + if(volume>0){ + volume--; + System.out.println("TV volume is at: " + volume); + } + else if(volume==0){ + System.out.println("TV volume is on Mute : " + volume); + } + + + } + +} diff --git a/src/org/java/derekBanas/commandDP/TurnItAllOff.java b/src/org/java/derekBanas/commandDP/TurnItAllOff.java new file mode 100644 index 0000000..5a12e1f --- /dev/null +++ b/src/org/java/derekBanas/commandDP/TurnItAllOff.java @@ -0,0 +1,31 @@ +package org.java.derekBanas.commandDP; + +import java.util.List; + +public class TurnItAllOff implements Command { + + List thedevices; + + public TurnItAllOff(List newDevices) { + thedevices = newDevices; + } + + @Override + public void execute() { + for(ElectronicDevice electronicDevice: thedevices){ + electronicDevice.off(); + } + + } + + @Override + public void undo() { + + for(ElectronicDevice electronicDevice: thedevices){ + electronicDevice.on(); + } + + + } + +} diff --git a/src/org/java/derekBanas/commandDP/TurnTvOff.java b/src/org/java/derekBanas/commandDP/TurnTvOff.java new file mode 100644 index 0000000..e4a5fa7 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/TurnTvOff.java @@ -0,0 +1,22 @@ +package org.java.derekBanas.commandDP; + +public class TurnTvOff implements Command { + + private ElectronicDevice theDevice; + + public TurnTvOff(ElectronicDevice newDevice) { + theDevice = newDevice; + + } + @Override + public void execute() { + theDevice.off(); + + } + @Override + public void undo() { + theDevice.on(); + + } + +} diff --git a/src/org/java/derekBanas/commandDP/TurnTvOn.java b/src/org/java/derekBanas/commandDP/TurnTvOn.java new file mode 100644 index 0000000..41fc7b8 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/TurnTvOn.java @@ -0,0 +1,23 @@ +package org.java.derekBanas.commandDP; + +public class TurnTvOn implements Command { + + + ElectronicDevice theDevice; + + public TurnTvOn(ElectronicDevice newDevice) { + theDevice = newDevice; + } + + @Override + public void execute() { + theDevice.on(); + } + + @Override + public void undo() { + theDevice.off(); + + } + +} diff --git a/src/org/java/derekBanas/commandDP/TurnVolumeDown.java b/src/org/java/derekBanas/commandDP/TurnVolumeDown.java new file mode 100644 index 0000000..8c8cf09 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/TurnVolumeDown.java @@ -0,0 +1,23 @@ +package org.java.derekBanas.commandDP; + +public class TurnVolumeDown implements Command { + + ElectronicDevice theDevice; + + public TurnVolumeDown(ElectronicDevice newDevice) { + theDevice = newDevice; + } + + @Override + public void execute() { + theDevice.volumeDown(); + + } + + @Override + public void undo() { + theDevice.volumeUp(); + + } + +} diff --git a/src/org/java/derekBanas/commandDP/TurnVolumeUp.java b/src/org/java/derekBanas/commandDP/TurnVolumeUp.java new file mode 100644 index 0000000..c55a469 --- /dev/null +++ b/src/org/java/derekBanas/commandDP/TurnVolumeUp.java @@ -0,0 +1,21 @@ +package org.java.derekBanas.commandDP; + +public class TurnVolumeUp implements Command { + + ElectronicDevice theDevice; + + public TurnVolumeUp(ElectronicDevice newDevice) { + theDevice = newDevice; + } + @Override + public void execute() { + theDevice.volumeUp(); + + } + @Override + public void undo() { + theDevice.volumeDown(); + + } + +} diff --git a/src/org/java/derekBanas/commandDP/TvRemote.java b/src/org/java/derekBanas/commandDP/TvRemote.java new file mode 100644 index 0000000..8f4a5ca --- /dev/null +++ b/src/org/java/derekBanas/commandDP/TvRemote.java @@ -0,0 +1,8 @@ +package org.java.derekBanas.commandDP; + +public class TvRemote { + + public static ElectronicDevice getDevice(){ + return new Televission(); + } +} diff --git a/src/org/java/derekBanas/facadeDP/AccountNumberCheck.java b/src/org/java/derekBanas/facadeDP/AccountNumberCheck.java new file mode 100644 index 0000000..101c14e --- /dev/null +++ b/src/org/java/derekBanas/facadeDP/AccountNumberCheck.java @@ -0,0 +1,19 @@ +package org.java.derekBanas.facadeDP; + +public class AccountNumberCheck { + + private int accountNumber = 12345678; + + public int getAccountNumber(){ + return accountNumber; + } + + public boolean accountActive(int acctNumToCheck){ + if(acctNumToCheck == getAccountNumber()){ + return true; + }else{ + return false; + } + } + +} diff --git a/src/org/java/derekBanas/facadeDP/BankAccountFacade.java b/src/org/java/derekBanas/facadeDP/BankAccountFacade.java new file mode 100644 index 0000000..3a7f329 --- /dev/null +++ b/src/org/java/derekBanas/facadeDP/BankAccountFacade.java @@ -0,0 +1,55 @@ +package org.java.derekBanas.facadeDP; + +public class BankAccountFacade { + + private int accountNumber; + private int securityCode; + + AccountNumberCheck accountNumberChecker; + SecurityCodeCheck securityCodeChecker; + FundCheck fundChecker; + + WelcomeToBank welcomeToBank; + + public BankAccountFacade(int newAcctNum, int newSecCode){ + + accountNumber = newAcctNum; + securityCode = newSecCode; + + welcomeToBank = new WelcomeToBank(); + accountNumberChecker = new AccountNumberCheck(); + securityCodeChecker = new SecurityCodeCheck(); + fundChecker = new FundCheck(); + } + + public int getAccountNumber(){ + return accountNumber; + } + + public int getSecurityCode(){ + return securityCode; + } + + public void withdrawCash(double cashToGet){ + if(accountNumberChecker.accountActive(getAccountNumber())&& + securityCodeChecker.isCodeCorrect(getSecurityCode())&& + fundChecker.haveEnoughMoney(cashToGet)){ + + System.out.println("Transaction Cmplete \n"); + }else{ + System.out.println("Transaction Failed \n"); + } + } + + public void depositCash(double cashToDeposite){ + if(accountNumberChecker.accountActive(getAccountNumber())&& + securityCodeChecker.isCodeCorrect(getSecurityCode())){ + fundChecker.makeDeposite(cashToDeposite); + System.out.println("Transaction Cmplete \n"); + + }else{ + System.out.println("Transaction Failed \n"); + } + } + +} diff --git a/src/org/java/derekBanas/facadeDP/Facade_DP_1.jpg b/src/org/java/derekBanas/facadeDP/Facade_DP_1.jpg new file mode 100644 index 0000000..d311a80 Binary files /dev/null and b/src/org/java/derekBanas/facadeDP/Facade_DP_1.jpg differ diff --git a/src/org/java/derekBanas/facadeDP/FundCheck.java b/src/org/java/derekBanas/facadeDP/FundCheck.java new file mode 100644 index 0000000..0a0ea0b --- /dev/null +++ b/src/org/java/derekBanas/facadeDP/FundCheck.java @@ -0,0 +1,36 @@ +package org.java.derekBanas.facadeDP; + +public class FundCheck { + private double cashInAccount = 1000.00; + + public double getCashInAccount(){ + return cashInAccount; + } + + public void decreaseCashInAccount(double cashWithdrawn){ + cashInAccount -= cashWithdrawn; + } + + public void increaseCashInAccount(double cashDeposite){ + cashInAccount += cashDeposite; + } + + public boolean haveEnoughMoney(double cashToWithdrawal){ + if(cashToWithdrawal > getCashInAccount()){ + System.out.println("Error: You don't have enough money"); + System.out.println("Current Balance: " + getCashInAccount()); + + return false; + }else{ + decreaseCashInAccount(cashToWithdrawal); + System.out.println("Withdrawal Complete: Current balance is "+ getCashInAccount()); + + return true; + } + } + + public void makeDeposite(double cashTodeposite){ + increaseCashInAccount(cashTodeposite); + System.out.println("Deposite Complete: Current Balance is "+ getCashInAccount()); + } +} diff --git a/src/org/java/derekBanas/facadeDP/SecurityCodeCheck.java b/src/org/java/derekBanas/facadeDP/SecurityCodeCheck.java new file mode 100644 index 0000000..b334cf1 --- /dev/null +++ b/src/org/java/derekBanas/facadeDP/SecurityCodeCheck.java @@ -0,0 +1,19 @@ + package org.java.derekBanas.facadeDP; + +public class SecurityCodeCheck { + + private int securityCode = 1234; + + public int getSecurityCode(){ + return securityCode; + } + + public boolean isCodeCorrect(int secCodeToCheck){ + if(secCodeToCheck == getSecurityCode()){ + return true; + }else{ + return false; + } + } + +} diff --git a/src/org/java/derekBanas/facadeDP/TestBankAccount.java b/src/org/java/derekBanas/facadeDP/TestBankAccount.java new file mode 100644 index 0000000..171963b --- /dev/null +++ b/src/org/java/derekBanas/facadeDP/TestBankAccount.java @@ -0,0 +1,16 @@ +package org.java.derekBanas.facadeDP; + +public class TestBankAccount { + + public static void main(String[] args) { + BankAccountFacade accessingBank = new BankAccountFacade(12345678, 1234); + + accessingBank.withdrawCash(50.00); + + accessingBank.withdrawCash(900.00); + + accessingBank.depositCash(200.00); + + } + +} diff --git a/src/org/java/derekBanas/facadeDP/WelcomeToBank.java b/src/org/java/derekBanas/facadeDP/WelcomeToBank.java new file mode 100644 index 0000000..53d3544 --- /dev/null +++ b/src/org/java/derekBanas/facadeDP/WelcomeToBank.java @@ -0,0 +1,10 @@ +package org.java.derekBanas.facadeDP; + +public class WelcomeToBank { + + public WelcomeToBank() { + System.out.println("Welcome to ABC Bank"); + System.out.println("We are happy to give you your money if we can find it"); + } + +}