工厂模式

来源:互联网 发布:js jsonarray add 编辑:程序博客网 时间:2024/06/04 18:19

工厂模式有三种:

1、简单工厂模式(Simple Factory Pattern)

简单工厂模式又称之为静态工厂方法,属于创建型模式。是通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。eg:

抽象类:

public interface Car {    void drive();}

具体实现:

public class Benz implements Car {    @Override    public void drive() {        System.out.println("Driving Benz ");    }}public class Bmw implements Car {    @Override    public void drive() {        System.out.println("Driving Bmw ");    }}

工厂类:

public class Driver {    public static Car driverCar(String s) {        if (s.equalsIgnoreCase("Benz")) {            return new Benz();        } else if (s.equalsIgnoreCase("Bmw")) {            return new Bmw();        }        return null;    }}

调用:

Car car = Driver.driverCar("Benz");car.drive();

优点:简单工厂模式将对象的创建和对象本身业务处理分离,降低耦合度。

缺点:增加了系统中类的个数,在一定程度上增加了系统的复杂度和理解难度。并且他不符合开闭原则(对扩展开放、对修改关闭),每增加一个类,都要在工厂类中增加相应的判断逻辑。


2、工厂方法模式(Factory Method Pattern)

工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式让实例化推迟到子类。
eg:

抽象类:

public interface Car {    void drive();}

具体实现:

public class Benz implements Car {    @Override    public void drive() {        System.out.println("Driving Benz ");    }}public class Bmw implements Car {    @Override    public void drive() {        System.out.println("Driving Bmw ");    }}

抽象工厂:

public interface Driver {    Car driverCar();}

具体工厂:

public class BenzDriver implements Driver {    @Override    public Car driverCar() {        return new Benz();    }}public class BmwDriver implements Driver {    @Override    public Car driverCar() {        return new Bmw();    }}

调用:

Driver driver = new BenzDriver();Car car = driver.driverCar();car.drive();

优点: 在工厂方法模式中,用户只需要知道创建对象的具体工厂,不用知道对象具体的创建过程。在增加新的类时,只需增加一个具体类和对应的实现工厂,符合“开闭原则”。

缺点:类会越来越多,增加了系统的复杂度。


3、抽象工厂模式(Abstract Factory Parrern)

在工厂方法模式中一个具体的工厂对应一个具体的对象。但是有时候我们需要一个工厂能够提供多个相关或相互依赖对象,而不是单一的对象,这个时候我们就需要使用抽象工厂模式。

eg: 接着上面的工厂模式写

抽象工厂:

public interface Driver {    Car driverCar();    Bike driverBike();}

具体工厂:

public class MMDriver implements Driver {    @Override    public Car driverCar() {        return new Benz();    }    @Override    public Bike driverBike() {        return new HelloBike();    }}

调用:

Driver driver = new MMDriver();driver.driverCar();driver.driverBike();

优缺点同工厂方法模式

原创粉丝点击