| using System;␍␊ |
| using System.Collections.Generic;␍␊ |
| using System.Linq;␍␊ |
| using System.Text;␍␊ |
| ␍␊ |
| namespace decroatorexample␍␊ |
| {␍␊ |
| public interface Vechile␍␊ |
| {␍␊ |
| string Make { get; }␍␊ |
| string Model { get; }␍␊ |
| double Price { get; }␍␊ |
| }␍␊ |
| ␍␊ |
| public class HondaCity : Vechile␍␊ |
| {␍␊ |
| public string Make␍␊ |
| {␍␊ |
| get { return "HondaCity"; }␍␊ |
| }␍␊ |
| ␍␊ |
| public string Model␍␊ |
| {␍␊ |
| get { return "CNG"; }␍␊ |
| }␍␊ |
| ␍␊ |
| public double Price␍␊ |
| {␍␊ |
| get { return 10000; }␍␊ |
| }␍␊ |
| }␍␊ |
| ␍␊ |
| public abstract class VechileDecrorator : Vechile␍␊ |
| {␍␊ |
| private Vechile _vechile;␍␊ |
| ␍␊ |
| public VechileDecrorator(Vechile veh)␍␊ |
| {␍␊ |
| _vechile = veh;␍␊ |
| }␍␊ |
| ␍␊ |
| public string Make␍␊ |
| {␍␊ |
| get { return _vechile.Make; }␍␊ |
| }␍␊ |
| ␍␊ |
| public string Model␍␊ |
| {␍␊ |
| get { return _vechile.Model; }␍␊ |
| }␍␊ |
| ␍␊ |
| public double Price␍␊ |
| {␍␊ |
| get { return _vechile.Price; }␍␊ |
| }␍␊ |
| }␍␊ |
| ␍␊ |
| public class SpecialOffer : VechileDecrorator␍␊ |
| {␍␊ |
| public SpecialOffer(Vechile vechile)␍␊ |
| : base(vechile)␍␊ |
| {␍␊ |
| ␍␊ |
| }␍␊ |
| ␍␊ |
| public int DiscountPercentage { get; set; }␍␊ |
| public string Offer { get; set; }␍␊ |
| ␍␊ |
| public double Price␍␊ |
| {␍␊ |
| get␍␊ |
| {␍␊ |
| double price = base.Price;␍␊ |
| double percentage = DiscountPercentage / (double)100;␍␊ |
| double res = Math.Round((price * percentage), 2);␍␊ |
| return price - res;␍␊ |
| }␍␊ |
| }␍␊ |
| }␍␊ |
| class Program␍␊ |
| {␍␊ |
| static void Main(string[] args)␍␊ |
| {␍␊ |
| HondaCity car = new HondaCity();␍␊ |
| ␍␊ |
| Console.WriteLine("Honday City base price : {0}", car.Price);␍␊ |
| ␍␊ |
| SpecialOffer offer = new SpecialOffer(car);␍␊ |
| offer.DiscountPercentage = 25;␍␊ |
| offer.Offer = "25 % discount";␍␊ |
| ␍␊ |
| Console.WriteLine(" Special offer price {0} ", offer.Price);␍␊ |
| }␍␊ |
| }␍␊ |
| }␍␊ |