Click here to watch in Youtube : https://www.youtube.com/watch?v=bmVLHsH2QoQ
Click the below Image to Enlarge
Decorator Design pattern - Implementation [Car] |
Car.java
public interface Car
{
public Car manufactureCar();
}
BMWCar.java
public class BMWCar implements Car
{
private final String CARNAME = "BMW";
private String carBody;
private String carDoor;
private String carWheels;
private String carGlass;
private String engine;
public String getCarBody()
{
return carBody;
}
public void setCarBody( String carBody )
{
this.carBody = carBody;
}
public String getCarDoor()
{
return carDoor;
}
public void setCarDoor( String carDoor )
{
this.carDoor = carDoor;
}
public String getCarWheels()
{
return carWheels;
}
public void setCarWheels( String carWheels )
{
this.carWheels = carWheels;
}
public String getCarGlass()
{
return carGlass;
}
public void setCarGlass( String carGlass )
{
this.carGlass = carGlass;
}
public String getCARNAME()
{
return CARNAME;
}
public String getEngine()
{
return engine;
}
public void setEngine( String engine )
{
this.engine = engine;
}
@Override
public String toString()
{
return "BMWCar [CARNAME=" + CARNAME + ", carBody=" + carBody + ", carDoor=" + carDoor + ", carWheels="
+ carWheels + ", carGlass=" + carGlass + ", engine=" + engine + "]";
}
@Override
public Car manufactureCar()
{
this.carBody = "carbon fiber material";
this.carDoor = "4 car doors";
this.carGlass = "6 car glasses";
this.carWheels = "4 MRF wheels";
return this;
}
}
CarDecorator.java
public abstract class CarDecorator implements Car
{
Car car;
public CarDecorator( Car car )
{
super();
this.car = car;
}
public Car manufactureCar()
{
return car.manufactureCar();
}
}
DieselCarDecorator.java
public class DieselCarDecorator extends CarDecorator
{
public DieselCarDecorator( Car car )
{
super(car);
}
public Car manufactureCar()
{
car.manufactureCar();
addEngine(car);
return car;
}
public void addEngine( Car car )
{
if( car instanceof BMWCar )
{
BMWCar BMWCar = (BMWCar) car;
BMWCar.setEngine("Diesel Engine");
System.out.println("DieselCarDecorator added Diesel Engine to the Car : " + car);
}
}
}
PetrolCarDecorator.java
public class PetrolCarDecorator extends CarDecorator
{
public PetrolCarDecorator( Car car )
{
super(car);
}
public Car manufactureCar()
{
car.manufactureCar();
addEngine(car);
return car;
}
public void addEngine( Car car )
{
if( car instanceof BMWCar )
{
BMWCar BMWCar = (BMWCar) car;
BMWCar.setEngine("Petrol Engine");
System.out.println("PetrolEngineDecorator added Petrol Engine to the Car : " + car);
}
}
}
DecoratorClient.java
public class DecoratorClient
{
public static void main( String[] args )
{
Car bmwCar1 = new BMWCar();
System.out.println(bmwCar1+"\n");
DieselCarDecorator carWithDieselEngine = new DieselCarDecorator(bmwCar1);
carWithDieselEngine.manufactureCar();
System.out.println("\n*******************************************************");
Car bmwCar2 = new BMWCar();
PetrolCarDecorator carWithPetrolEngine = new PetrolCarDecorator(bmwCar2);
carWithPetrolEngine.manufactureCar();
}
}
Output
BMWCar [CARNAME=BMW, carBody=null, carDoor=null, carWheels=null, carGlass=null, engine=null]
DieselCarDecorator added Diesel Engine to the Car : BMWCar [CARNAME=BMW, carBody=carbon fiber material, carDoor=4 car doors, carWheels=4 MRF wheels, carGlass=6 car glasses, engine=Diesel Engine]
*******************************************************
PetrolEngineDecorator added Petrol Engine to the Car : BMWCar [CARNAME=BMW, carBody=carbon fiber material, carDoor=4 car doors, carWheels=4 MRF wheels, carGlass=6 car glasses, engine=Petrol Engine]
No comments:
Post a Comment