Decorator Pattern: attach additional responsibilities to an object dynamically. Decorators provide flexible alternative to sub classing for extending functionality.
Example
Account.java
package com.decoratorpattern.example;
public abstract class Account {
String description;
public String getDescription() {
return description;
}
public void deposit() {
System.out.format("Amount was deposited into %s Successfully \n",getDescription());
}
public void withdraw() {
System.out.format("Amount withdrawn from %s Successfully \n",getDescription());
}
}
NoFrillsAccount.java
package com.decoratorpattern.example;
public class NoFrillsAccount extends Account{
public NoFrillsAccount(){
description = "NoFrills Account";
}
}
AccountDecorator.java
package com.decoratorpattern.example;
public abstract class AccountDecorator extends Account {
public abstract void enableFeature();
}
InternetBanking.java
package com.decoratorpattern.example;
public class InternetBanking extends AccountDecorator{
Account account;
public InternetBanking(Account account) {
this.account = account;
}
public String getDescription() {
enableFeature();
return account.getDescription() + " with Internet Banking" ;
}
@Override
public void enableFeature() {
System.out.format("Internet Banking Enabled for %s \n",account.getDescription());
}
}
MobileBanking.java
package com.decoratorpattern.example;
public class MobileBanking extends AccountDecorator{
Account account;
public MobileBanking(Account account) {
this.account = account;
}
public String getDescription() {
return account.getDescription() + " with Mobile Banking" ;
}
@Override
public void enableFeature() {
System.out.format("Mobile Banking Enabled for %s \n",account.getDescription());
}
}
AccountTestDrive.java
package com.decoratorpattern.example;
public class AccountTestDrive {
public static void main(String[] args) {
Account noFrillsAccount = new NoFrillsAccount();
// NoFrills Account having basic features like deposit and withdraw
System.out.println(noFrillsAccount.getDescription());
// Now with the help of AccountDecorator, we have enabled Internet banking for the NoFrills Account
noFrillsAccount = new InternetBanking(noFrillsAccount);
System.out.println(noFrillsAccount.getDescription());
}
}
Home
No comments:
Post a Comment