zoukankan      html  css  js  c++  java
  • "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();
        }
    }
    



  • 相关阅读:
    TensorFlow学习笔记1:graph、session和op
    TensorFlow学习笔记2:逻辑回归实现手写字符识别
    Tensorflow学习笔记3:卷积神经网络实现手写字符识别
    Firstpython介绍
    Oracle sql语句学习
    总结__window dns域名解析错误及其解决方法
    Group By 和 Having, Where ,Order by语句的执行顺序
    Oracle 语句分类
    webbrowser自动登录,没有点击事件,不是submit提交按钮的情况下如何模拟点击登录
    webbrowser跨域访问iframe中的元素实现自动登录
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/7147771.html
Copyright © 2011-2022 走看看