dimanche 6 décembre 2015

How Can I improve my Vehical Factory Design using AbstractFactory Pattern?

I am practicing design patterns. Right now I am learning Abstract Factory Pattern.

Please follow the code.

Vehical.java

package com.abstractfactory.two;

public interface Vehical {
   void engineType();
   void perpose();
}

HeavyVehical.java,

package com.abstractfactory.two;

public abstract class HeavyVehical implements Vehical{

}

LightVehical.java,

package com.abstractfactory.two;

public abstract class LightVehical implements Vehical{

}

FamilyCar.java,

package com.abstractfactory.two;

public class FamilyCar extends LightVehical{

@Override
public void engineType() {
    // TODO Auto-generated method stub
    StringBuffer strb = new StringBuffer();
    strb.append(" Engine Horse Power : 37 bhp")
        .append("\n Torque : 59 Nm")
        .append("\n Model Name : Maruti 800");

    System.out.println(strb.toString());
}

@Override
public void perpose() {
    // TODO Auto-generated method stub
    System.out.println("A complete family car for driving in City roads.");
}
}

SportsCar.java,

package com.abstractfactory.two;

public class SportsCar extends LightVehical{

@Override
public void engineType() {
    // TODO Auto-generated method stub
    StringBuffer strb = new StringBuffer();
    strb.append(" Engine Horse Power : 200 bhp")
        .append("\n Torque : 260 Nm")
        .append("\n Model Name : McLaren P1");

    System.out.println(strb.toString());
}

@Override
public void perpose() {
    // TODO Auto-generated method stub
    System.out.println("A superb car to speed on races.");
}

}

Truck.java,

package com.abstractfactory.two;

public class Truck extends HeavyVehical{

@Override
public void engineType() {
    // TODO Auto-generated method stub
    StringBuffer strb = new StringBuffer();
    strb.append(" HorsePower : 550 bhp ")
        .append("\n Torque : 1850 Nm").append("\n Model Name : CAT 22 Truck");
    System.out.println(strb.toString());
}

@Override
public void perpose() {
    // TODO Auto-generated method stub
    System.out.println(" Used for transport of goods and machinery");
}

}

Bus.java,

package com.abstractfactory.two;

public class Bus extends HeavyVehical{

@Override
public void engineType() {
    // TODO Auto-generated method stub
    StringBuffer strb = new StringBuffer();
    strb.append(" HorsePower : 350 bhp ")
        .append("\n Torque : 1000 Nm").append("\n Model Name : Volvo 9400 Intercity.");
    System.out.println(strb.toString());
}

@Override
public void perpose() {
    // TODO Auto-generated method stub
    System.out.println("For public transport within the city");
}

}

VehicalFactory.java,

package com.abstractfactory.two;

public interface VehicalFactory {

}

HeavyVehicalFactory.java,

package com.abstractfactory.two;

public class HeavyVehicalFactory implements VehicalFactory{


public Vehical createTruck() {
    // TODO Auto-generated method stub
    return new Truck();
}

public Vehical createBus() {
    // TODO Auto-generated method stub
    return new Bus();
}
}

LightVehicalFactory.java,

package com.abstractfactory.two;

public class LightVehicalFactory implements VehicalFactory{
Vehical createFamilyCar(){
    return new FamilyCar();
}

Vehical createSportsCar(){
    return new SportsCar();
}
}

ApplicationFactory.java,

package com.abstractfactory.two;

public final class ApplicationFactory {
public final static VehicalFactory getVehicalFactory(String whichFactory){
    return "light".equalsIgnoreCase(whichFactory) ? new LightVehicalFactory() : new HeavyVehicalFactory();
}
}

Main.java,

package com.abstractfactory.two;

public class Main {

public static void main(String[] args) {
    // TODO Auto-generated method stub
    VehicalFactory factory = ApplicationFactory.getVehicalFactory("light");
    LightVehicalFactory lightFactory = (LightVehicalFactory) factory;
    FamilyCar car = (FamilyCar) lightFactory.createFamilyCar();
    car.engineType();
    car.perpose();
}

}

My Question is, Is my design for Vehical factory which creates vehicle's depending on categories is really feasible.

Is my Abstract Factory on different Vehicle factory is really going to scale.

Can my Abstract Factory be improved using Generics ?

Please suggest me.

Aucun commentaire:

Enregistrer un commentaire