• "Simple Factory" vs "Factory Method" vs "Abstract Factory" vs "Reflect"


    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 car
    
    abstract class Car {
        private String brand;
    
        public abstract void drive();
    
        public String getBrand() {
            return brand;
        }
    
        public void setBrand(String brandName) {
            brand = brandName;
        }
    }
    
    //------------------------------------------------benz
    class BenzCar extends Car {
        public BenzCar() {
            setBrand("Benz");
        }
    
        @Override
        public void drive() {
            System.out.println(getBrand() + "--go-----");
        }
    }
    
    //------------------------------------------------bmw
    class BmwCar extends Car {
        public BmwCar() {
            setBrand("Bmw");
        }
    
        @Override
        public void drive() {
            System.out.println(getBrand() + "--go-----");
        }
    }
    
    //------------------------------------------------audi
    class AudiCar extends Car {
        public AudiCar() {
            setBrand("Audi");
        }
    
        @Override
        public void drive() {
            System.out.println(getBrand() + "--go-----");
        }
    }
    
    //====================================================== factory
    
    class 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 car
    
    abstract class Car {
        private String brand;
    
        public abstract void drive();
    
        public String getBrand() {
            return brand;
        }
    
        public void setBrand(String brandName) {
            brand = brandName;
        }
    }
    
    //------------------------------------------------benz
    class BenzCar extends Car {
        public BenzCar() {
            setBrand("Benz");
        }
    
        @Override
        public void drive() {
            System.out.println(getBrand()+"--go-----");
        }
    }
    
    
    //------------------------------------------------bmw
    class BmwCar extends Car {
        public BmwCar() {
            setBrand("Bmw");
        }
    
        @Override
        public void drive() {
            System.out.println(getBrand()+"--go-----");
        }
    }
    
    //------------------------------------------------audi
    class AudiCar extends Car {
        public AudiCar() {
            setBrand("Audi");
        }
    
        @Override
        public void drive() {
            System.out.println(getBrand()+"--go-----");
        }
    }
    
    //====================================================== factory
    
    abstract 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 car
    
    abstract 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;
        }
    }
    
    //------------------------------------------------benz
    abstract 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-------");
        }
    
    }
    
    //------------------------------------------------bmw
    abstract 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-------");
        }
    
    }
    
    //------------------------------------------------audi
    abstract 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-------");
        }
    
    }
    
    //====================================================== factory
    
    abstract 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 car
    
    abstract 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;
        }
    }
    
    //------------------------------------------------benz
    abstract 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-------");
        }
    
    }
    
    //------------------------------------------------bmw
    abstract 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-------");
        }
    
    }
    
    //------------------------------------------------audi
    abstract 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-------");
        }
    
    }
    
    //====================================================== factory
    
    abstract class Driver {
        public static Car createCar(String name) throws Exception{
            return (Car) Class.forName(name).newInstance();
        }
    }
    



  • 相关阅读:
    SpringCloud学习笔记(5)——Config
    SpringCloud学习笔记(4)——Zuul
    SpringCloud学习笔记(3)——Hystrix
    SpringCloud学习笔记(2)——Ribbon
    SpringCloud学习笔记(1)——Eureka
    SpringCloud学习笔记——Eureka高可用
    Eureka介绍
    微服务网关 Spring Cloud Gateway
    Spring Boot 参数校验
    Spring Boot Kafka
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7147771.html
Copyright © 2020-2023  润新知