├── README.md ├── src └── main │ └── java │ └── com │ └── javatechie │ └── solid │ ├── dip │ ├── BankCard.java │ ├── DebitCard.java │ ├── CreditCard.java │ └── ShoppingMall.java │ ├── isp │ ├── CashBackManager.java │ ├── UPIPayments.java │ ├── Paytm.java │ ├── Phonepe.java │ └── GooglePay.java │ ├── lsp │ ├── solution │ │ ├── PostMediaManager.java │ │ ├── SocialVideoCallManager.java │ │ ├── SocialMedia.java │ │ ├── Instagram.java │ │ └── WhatsApp.java │ ├── Facebook.java │ ├── Whatsapp.java │ ├── Instagram.java │ └── SocialMedia.java │ ├── srp │ ├── PrinterService.java │ ├── NotificationService.java │ ├── BankService.java │ └── LoanService.java │ └── ocp │ ├── Notificationservice.java │ ├── WhatsAppNotificationService.java │ ├── EmailNotificationService.java │ └── MobileNotificationService.java └── pom.xml /README.md: -------------------------------------------------------------------------------- 1 | # solid-principles-example -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/dip/BankCard.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.dip; 2 | 3 | public interface BankCard { 4 | 5 | public void doTransaction(long amount); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/isp/CashBackManager.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.isp; 2 | 3 | public interface CashBackManager { 4 | 5 | public void getCashBackAsCreditBalance(); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/solution/PostMediaManager.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp.solution; 2 | 3 | public interface PostMediaManager { 4 | 5 | public void publishPost(Object post); 6 | } 7 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/solution/SocialVideoCallManager.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp.solution; 2 | 3 | public interface SocialVideoCallManager { 4 | public void groupVideoCall(String... users); 5 | } 6 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/isp/UPIPayments.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.isp; 2 | 3 | public interface UPIPayments { 4 | 5 | public void payMoney(); 6 | 7 | public void getScratchCard(); 8 | 9 | 10 | } 11 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/srp/PrinterService.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.srp; 2 | 3 | public class PrinterService { 4 | 5 | public void printPassbook() { 6 | //update transaction info in passbook 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/solution/SocialMedia.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp.solution; 2 | 3 | public interface SocialMedia { 4 | 5 | public void chatWithFriend(); 6 | 7 | public void sendPhotosAndVideos(); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/dip/DebitCard.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.dip; 2 | 3 | public class DebitCard implements BankCard{ 4 | 5 | public void doTransaction(long amount){ 6 | System.out.println("payment using Debit card"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/dip/CreditCard.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.dip; 2 | 3 | public class CreditCard implements BankCard{ 4 | 5 | public void doTransaction(long amount){ 6 | System.out.println("payment using Credit card"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/ocp/Notificationservice.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.ocp; 2 | 3 | public interface Notificationservice { 4 | 5 | public void sendOTP(String medium); 6 | 7 | public void sendTransactionReport(String medium); 8 | 9 | } 10 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/isp/Paytm.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.isp; 2 | 3 | public class Paytm implements UPIPayments { 4 | 5 | public void payMoney() { 6 | 7 | } 8 | 9 | public void getScratchCard() { 10 | 11 | } 12 | 13 | 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/isp/Phonepe.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.isp; 2 | 3 | public class Phonepe implements UPIPayments { 4 | public void payMoney() { 5 | 6 | } 7 | 8 | public void getScratchCard() { 9 | 10 | } 11 | 12 | 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/solution/Instagram.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp.solution; 2 | 3 | public class Instagram implements SocialMedia,PostMediaManager{ 4 | 5 | public void publishPost(Object post) { 6 | 7 | } 8 | 9 | public void chatWithFriend() { 10 | 11 | } 12 | 13 | public void sendPhotosAndVideos() { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/solution/WhatsApp.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp.solution; 2 | 3 | public class WhatsApp implements SocialMedia,SocialVideoCallManager { 4 | public void chatWithFriend() { 5 | 6 | } 7 | 8 | public void sendPhotosAndVideos() { 9 | 10 | } 11 | 12 | public void groupVideoCall(String... users) { 13 | 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/isp/GooglePay.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.isp; 2 | 3 | public class GooglePay implements UPIPayments,CashBackManager { 4 | 5 | public void payMoney() { 6 | 7 | } 8 | 9 | public void getScratchCard() { 10 | 11 | } 12 | 13 | public void getCashBackAsCreditBalance() { 14 | //this features is there in gpay 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/ocp/WhatsAppNotificationService.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.ocp; 2 | 3 | public class WhatsAppNotificationService implements Notificationservice { 4 | 5 | public void sendOTP(String medium) { 6 | //logic to integrate whatsapp api 7 | } 8 | 9 | public void sendTransactionReport(String medium) { 10 | //logic to integrate whatsapp api 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/Facebook.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp; 2 | 3 | public class Facebook extends SocialMedia { 4 | 5 | public void chatWithFriend() { 6 | 7 | } 8 | 9 | public void publishPost(Object post) { 10 | 11 | } 12 | 13 | public void sendPhotosAndVideos() { 14 | 15 | } 16 | 17 | public void groupVideoCall(String... users) { 18 | 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/Whatsapp.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp; 2 | 3 | public class Whatsapp extends SocialMedia { 4 | public void chatWithFriend() { 5 | 6 | } 7 | 8 | public void publishPost(Object post) { 9 | //Not applicable 10 | } 11 | 12 | public void sendPhotosAndVideos() { 13 | 14 | } 15 | 16 | public void groupVideoCall(String... users) { 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/ocp/EmailNotificationService.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.ocp; 2 | 3 | public class EmailNotificationService implements Notificationservice { 4 | public void sendOTP(String medium) { 5 | //write logic to integrate with email api 6 | 7 | } 8 | 9 | public void sendTransactionReport(String medium) { 10 | //write logic to integrate with email api 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/Instagram.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp; 2 | 3 | public class Instagram extends SocialMedia { 4 | 5 | public void chatWithFriend() { 6 | 7 | } 8 | 9 | public void publishPost(Object post) { 10 | 11 | } 12 | 13 | public void sendPhotosAndVideos() { 14 | 15 | } 16 | 17 | public void groupVideoCall(String... users) { 18 | //not applicable 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/srp/NotificationService.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.srp; 2 | 3 | public class NotificationService { 4 | public void sendOTP(String medium) { 5 | if (medium.equals("email")) { 6 | //write email related logic 7 | //use JavaMailSenderAPI 8 | } 9 | if(medium.equals("mobile")){ 10 | //write logic using twillio API 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/srp/BankService.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.srp; 2 | 3 | import java.util.Random; 4 | 5 | public class BankService { 6 | 7 | public long deposit(long amount, String accountNo) { 8 | //deposit amount 9 | return 0; 10 | } 11 | 12 | public long withDraw(long amount, String accountNo) { 13 | //withdraw amount 14 | return 0; 15 | } 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | } -------------------------------------------------------------------------------- /pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 4.0.0 6 | 7 | com.javatechie 8 | solid-principle-example 9 | 1.0-SNAPSHOT 10 | 11 | 12 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/ocp/MobileNotificationService.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.ocp; 2 | 3 | public class MobileNotificationService implements Notificationservice { 4 | public void sendOTP(String medium) { 5 | //write the logic to send otp to mobile 6 | //twillo api 7 | 8 | } 9 | 10 | public void sendTransactionReport(String medium) { 11 | //write the logic to send otp to mobile 12 | //twillo api 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/srp/LoanService.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.srp; 2 | 3 | public class LoanService { 4 | 5 | public void getLoanInterestInfo(String loanType) { 6 | if (loanType.equals("homeLoan")) { 7 | //do some job 8 | } 9 | if (loanType.equals("personalLoan")) { 10 | //do some job 11 | } 12 | if (loanType.equals("car")) { 13 | //do some job 14 | } 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/lsp/SocialMedia.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.lsp; 2 | 3 | public abstract class SocialMedia { 4 | 5 | //@support WhatsApp,Facebook,Instagram 6 | public abstract void chatWithFriend(); 7 | 8 | //@support Facebook,Instagram 9 | public abstract void publishPost(Object post); 10 | 11 | //@support WhatsApp,Facebook,Instagram 12 | public abstract void sendPhotosAndVideos(); 13 | 14 | //@support WhatsApp,Facebook 15 | public abstract void groupVideoCall(String... users); 16 | } 17 | -------------------------------------------------------------------------------- /src/main/java/com/javatechie/solid/dip/ShoppingMall.java: -------------------------------------------------------------------------------- 1 | package com.javatechie.solid.dip; 2 | 3 | public class ShoppingMall { 4 | 5 | private BankCard bankCard; 6 | 7 | public ShoppingMall(BankCard bankCard) { 8 | this.bankCard = bankCard; 9 | } 10 | 11 | public void doPurchaseSomething(long amount){ 12 | bankCard.doTransaction(amount); 13 | } 14 | 15 | public static void main(String[] args) { 16 | // DebitCard debitCard=new DebitCard(); 17 | // CreditCard creditCard=new CreditCard(); 18 | 19 | BankCard bankCard=new CreditCard(); 20 | ShoppingMall shoppingMall=new ShoppingMall(bankCard); 21 | shoppingMall.doPurchaseSomething(5000); 22 | } 23 | } 24 | --------------------------------------------------------------------------------