SOLID (2/5) - Open Close Principle
In object-oriented programming, the open–closed principle states "software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification"; that is, such an entity can allow its behaviour to be extended without modifying its source code.
using System;
namespace Invoice
{
public abstract class Invoice
{
public virtual double GetInvoiceDiscount(double amount)
{
return amount - 10;
}
}
public class FinalInvoice : Invoice
{
public override double GetInvoiceDiscount(double amount)
{
return base.GetInvoiceDiscount(amount) - 50;
}
}
public class ProposedInvoice : Invoice
{
public override double GetInvoiceDiscount(double amount)
{
return base.GetInvoiceDiscount(amount) - 40;
}
}
public class RecurringInvoice : Invoice
{
public override double GetInvoiceDiscount(double amount)
{
return base.GetInvoiceDiscount(amount) - 30;
}
}
class Program
{
static void Main(string[] args)
{
Invoice FInvoice = new FinalInvoice();
Invoice PInvoice = new ProposedInvoice();
Invoice RInvoice = new RecurringInvoice();
double FInvoiceAmount = FInvoice.GetInvoiceDiscount(10000);
double PInvoiceAmount = PInvoice.GetInvoiceDiscount(10000);
double RInvoiceAmount = RInvoice.GetInvoiceDiscount(10000);
Console.WriteLine($"FinalInvoice value: {FInvoiceAmount}");
Console.WriteLine($"ProposedInvoice value: {PInvoiceAmount}");
Console.WriteLine($"RecurringInvoice value: {RInvoiceAmount}");
}
}
}
Comments
Post a Comment