Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- * FACTORY METHOD 2
- */
- abstract class PrepaymentCreator {
- public abstract prepaymentFactory(): IPrepayment;
- public addToDb(): string {
- const prepayment = this.prepaymentFactory();
- return `ABSTRACT FACTORY: The prepayment for ${prepayment.getDate()} with amount ${prepayment.getAmount()} has been saved to database.`;
- }
- public getDate(): string {
- const prepayment = this.prepaymentFactory();
- const month = prepayment.getDate().split('.')[0];
- const year = prepayment.getDate().split('.')[1];
- return `ABSTACT FACTORY: Month is ${month}, year is ${year}`;
- }
- }
- interface IPrepayment {
- getAmount(): number;
- getDate(): string;
- }
- class ConcretePrepayament extends PrepaymentCreator {
- constructor(
- amount: number,
- date: string
- ) {
- super();
- this.amount = amount;
- this.date = date;
- }
- private amount: number;
- private date: string;
- public prepaymentFactory(): IPrepayment {
- return new Prepayment(this.amount, this.date);
- }
- }
- class Prepayment implements IPrepayment {
- constructor(
- amount: number,
- date: string
- ) {
- this.amount = amount;
- this.date = date;
- }
- private amount: number;
- private date: string;
- public getAmount(): number {
- return this.amount;
- }
- public getDate(): string {
- return this.date;
- }
- }
- /**
- * CLIENT CODE
- */
- const prepayment = new ConcretePrepayament(10000, '04.2019');
- console.log(prepayment.addToDb());
- console.log(prepayment.getDate());
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement