工厂模式

工厂模式有三种:

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();

优缺点同工厂方法模式

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值