- Spring 5 Design Patterns
- Dinesh Rajput
- 401字
- 2021-07-08 09:59:39
Implementing the Decorator pattern
Let's look at the following code to demonstrate the Decorator design pattern.
Create a component class:
Following is the Account.java file:
package com.packt.patterninspring.chapter3.decorator.pattern; public interface Account { String getTotalBenefits(); }
Create concrete components classes:
Following is the SavingAccount.java file:
package com.packt.patterninspring.chapter3.decorator.pattern; public class SavingAccount implements Account { @Override public String getTotalBenefits() { return "This account has 4% interest rate with per day
$5000 withdrawal limit"; } }
Let's create another concrete class for Account component:
Following is the CurrentAccount.java file:
package com.packt.patterninspring.chapter3.decorator.pattern; public class CurrentAccount implements Account { @Override public String getTotalBenefits() { return "There is no withdrawal limit for current account"; } }
Let's create a Decorator class for Account component. This decorator class apply other run time behavior to the Account component classes.
Following is the AccountDecorator.java file:
package com.packt.patterninspring.chapter3.decorator.pattern; public abstract class AccountDecorator implements Account { abstract String applyOtherBenefits(); }
Let's create a ConcreteDecorator class to implement the AccountDecorator class. Following class SeniorCitizen is extended AccountDecorator class to access other run time behavior such as applyOtherBenefits().
Following is the SeniorCitizen.java file:
package com.packt.patterninspring.chapter3.decorator.pattern; public class SeniorCitizen extends AccountDecorator { Account account; public SeniorCitizen(Account account) { super(); this.account = account; } public String getTotalBenefits() { return account.getTotalBenefits() + " other benefits are
"+applyOtherBenefits(); } String applyOtherBenefits() { return " an medical insurance of up to $1,000 for Senior
Citizen"; } }
Let's create another ConcreteDecorator class to implement the AccountDecorator class. Following class Privilege is extended AccountDecorator class to access other run time behavior such as applyOtherBenefits().
Following is the Privilege.java file:
package com.packt.patterninspring.chapter3.decorator.pattern; public class Privilege extends AccountDecorator { Account account; public Privilege(Account account) { this.account = account; } public String getTotalBenefits() { return account.getTotalBenefits() + " other benefits are
"+applyOtherBenefits(); } String applyOtherBenefits() { return " an accident insurance of up to $1,600 and
an overdraft facility of $84"; } }
Let's now write some test code to see how the Decorator pattern works at runtime:
Following is the DecoratorPatternMain.java file:
package com.packt.patterninspring.chapter3.decorator.pattern; public class DecoratorPatternMain { public static void main(String[] args) { /*Saving account with no decoration*/ Account basicSavingAccount = new SavingAccount(); System.out.println(basicSavingAccount.getTotalBenefits()); /*Saving account with senior citizen benefits decoration*/ Account seniorCitizenSavingAccount = new SavingAccount(); seniorCitizenSavingAccount = new
SeniorCitizen(seniorCitizenSavingAccount); System.out.println
(seniorCitizenSavingAccount.getTotalBenefits()); /*Saving account with privilege decoration*/ Account privilegeCitizenSavingAccount = new SavingAccount(); privilegeCitizenSavingAccount = new
Privilege(privilegeCitizenSavingAccount); System.out.println
(privilegeCitizenSavingAccount.getTotalBenefits()); } }
Let's run this demo class and see the following output at the console:

- TypeScript入門(mén)與實(shí)戰(zhàn)
- INSTANT FreeMarker Starter
- Practical Data Science Cookbook(Second Edition)
- Learning ASP.NET Core 2.0
- OpenCV 3和Qt5計(jì)算機(jī)視覺(jué)應(yīng)用開(kāi)發(fā)
- 64位匯編語(yǔ)言的編程藝術(shù)
- 運(yùn)用后端技術(shù)處理業(yè)務(wù)邏輯(藍(lán)橋杯軟件大賽培訓(xùn)教材-Java方向)
- 創(chuàng)意UI:Photoshop玩轉(zhuǎn)APP設(shè)計(jì)
- Python 3 Object:oriented Programming(Second Edition)
- UX Design for Mobile
- Python第三方庫(kù)開(kāi)發(fā)應(yīng)用實(shí)戰(zhàn)
- Learning Alfresco Web Scripts
- Enterprise Application Architecture with .NET Core
- Learning Java Lambdas
- 精通Rust(第2版)