& Quot; Simple Factory & quot; vs & quot; Factory Method & quot; vs & quot; Abstract Factory & quot; vs & quot; Reflect & quot;, abstractreflect

Source: Internet
Author: User

"Simple Factory" vs "Factory Method" vs "Abstract Factory" vs "Reflect", abstractreflect

Ref: http://www.cnblogs.com/zhangchenliang/p/3700820.html

1. "Simple Factory"



package torv.abc;public class HelloMain {    public static void main(String[] args) {        Driver.createCar("audi").drive();    }}//====================================================== product carabstract class Car {    private String brand;    public abstract void drive();    public String getBrand() {        return brand;    }    public void setBrand(String brandName) {        brand = brandName;    }}//------------------------------------------------benzclass BenzCar extends Car {    public BenzCar() {        setBrand("Benz");    }    @Override    public void drive() {        System.out.println(getBrand() + "--go-----");    }}//------------------------------------------------bmwclass BmwCar extends Car {    public BmwCar() {        setBrand("Bmw");    }    @Override    public void drive() {        System.out.println(getBrand() + "--go-----");    }}//------------------------------------------------audiclass AudiCar extends Car {    public AudiCar() {        setBrand("Audi");    }    @Override    public void drive() {        System.out.println(getBrand() + "--go-----");    }}//====================================================== factoryclass Driver {    public static Car createCar(String carName) {        Car car = null;        if (carName.equalsIgnoreCase("benz")) {            car = new BenzCar();        } else if (carName.equalsIgnoreCase("bmw")) {            car = new BmwCar();        } else if (carName.equalsIgnoreCase("audi")) {            car = new AudiCar();        }        return car;    }}


2. "Factory Method"



package torv.abc;public class HelloMain {    public static void main(String[] args) {        Driver driver = new BmwDriver();        driver.createCar().drive();    }}//====================================================== product carabstract class Car {    private String brand;    public abstract void drive();    public String getBrand() {        return brand;    }    public void setBrand(String brandName) {        brand = brandName;    }}//------------------------------------------------benzclass BenzCar extends Car {    public BenzCar() {        setBrand("Benz");    }    @Override    public void drive() {        System.out.println(getBrand()+"--go-----");    }}//------------------------------------------------bmwclass BmwCar extends Car {    public BmwCar() {        setBrand("Bmw");    }    @Override    public void drive() {        System.out.println(getBrand()+"--go-----");    }}//------------------------------------------------audiclass AudiCar extends Car {    public AudiCar() {        setBrand("Audi");    }    @Override    public void drive() {        System.out.println(getBrand()+"--go-----");    }}//====================================================== factoryabstract class Driver {    public abstract Car createCar();}class BenzDriver extends Driver{    @Override    public Car createCar() {        return new BenzCar();    }    }class BmwDriver extends Driver{    @Override    public Car createCar() {        return new BmwCar();    }    }class AudiDriver extends Driver{    @Override    public Car createCar() {        return new AudiCar();    }    }


3. "Abstract Factory"



package torv.abc;public class HelloMain {    public static void main(String[] args) {        Driver driver = new SportDriver();        driver.createAudiCar().drive();    }}//====================================================== product carabstract class Car {    private String brand;    private String kind;    public abstract void drive();    public String getBrand() {        return brand;    }    public void setBrand(String brandName) {        brand = brandName;    }    public String getKind() {        return kind;    }    public void setKind(String kindName) {        kind = kindName;    }}//------------------------------------------------benzabstract class BenzCar extends Car {    public BenzCar() {        setBrand("Benz");    }}class BenzSportCar extends BenzCar {    public BenzSportCar() {        setKind("Sport");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}class BenzBizCar extends BenzCar {    public BenzBizCar() {        setKind("Biz");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}//------------------------------------------------bmwabstract class BmwCar extends Car {    public BmwCar() {        setBrand("Bmw");    }}class BmwSportCar extends BmwCar {    public BmwSportCar() {        setKind("Sport");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}class BmwBizCar extends BmwCar {    public BmwBizCar() {        setKind("Biz");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}//------------------------------------------------audiabstract class AudiCar extends Car {    public AudiCar() {        setBrand("Audi");    }}class AudiSportCar extends AudiCar {    public AudiSportCar() {        setKind("Sport");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}class AudiBizCar extends AudiCar {    public AudiBizCar() {        setKind("Biz");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}//====================================================== factoryabstract class Driver {    public abstract Car createBenzCar();    public abstract Car createBmwCar();    public abstract Car createAudiCar();}class SportDriver extends Driver {    @Override    public Car createBenzCar() {        return new BenzSportCar();    }    @Override    public Car createBmwCar() {        return new BmwSportCar();    }    @Override    public Car createAudiCar() {        return new AudiSportCar();    }}class BizDriver extends Driver {    @Override    public Car createBenzCar() {        return new BenzBizCar();    }    @Override    public Car createBmwCar() {        return new BmwBizCar();    }    @Override    public Car createAudiCar() {        return new AudiBizCar();    }}



3. "Simple Factory" + Reflect

package torv.abc;public class HelloMain {    public static void main(String[] args) {        try {            Driver.createCar("torv.abc.BenzSportCar").drive();        } catch (Exception e) {            e.printStackTrace();        }    }}//====================================================== product carabstract class Car {    private String brand;    private String kind;    public abstract void drive();    public String getBrand() {        return brand;    }    public void setBrand(String brandName) {        brand = brandName;    }    public String getKind() {        return kind;    }    public void setKind(String kindName) {        kind = kindName;    }}//------------------------------------------------benzabstract class BenzCar extends Car {    public BenzCar() {        setBrand("Benz");    }}class BenzSportCar extends BenzCar {    public BenzSportCar() {        setKind("Sport");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}class BenzBizCar extends BenzCar {    public BenzBizCar() {        setKind("Biz");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}//------------------------------------------------bmwabstract class BmwCar extends Car {    public BmwCar() {        setBrand("Bmw");    }}class BmwSportCar extends BmwCar {    public BmwSportCar() {        setKind("Sport");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}class BmwBizCar extends BmwCar {    public BmwBizCar() {        setKind("Biz");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}//------------------------------------------------audiabstract class AudiCar extends Car {    public AudiCar() {        setBrand("Audi");    }}class AudiSportCar extends AudiCar {    public AudiSportCar() {        setKind("Sport");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}class AudiBizCar extends AudiCar {    public AudiBizCar() {        setKind("Biz");    }    @Override    public void drive() {        System.out.println(getBrand() + "--" + getKind() + "--go-------");    }}//====================================================== factoryabstract class Driver {    public static Car createCar(String name) throws Exception{        return (Car) Class.forName(name).newInstance();    }}



Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.