设计模式之路(1)-简单工厂模式


如果对面向对象还不太熟悉,建议先把面向对象的概念过一遍比较好。


一、简单工厂模式的概念

简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

简单工厂模式(Simple Factory Pattern):定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态(static)方法,因此简单工厂模式又被称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。

简单工厂模式的要点在于:当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象,而无须知道其创建细节。

show me code~

举个栗子:

抽象产品–汽车,汽车有很多品牌:Audi、Benz、BMW···

现在有一个客户想开Benz品牌的车,那么最直接的做法就是创建Benz汽车的实例,然后开走~

Benz benz = new Benz();
benz.addGPS();
benz.addRecodes();
benz.addWheels();
benz.drive();

那么再来一个客户,想开Audi品牌的车,那么我们和之前一样,

Audi audi = new Audi();
audi.addGPS();
audi.addRecodes();
audi.addWheels();
audi.drive();

问题就出现了,客户和汽车的创建耦合在一起了,客户是不需要知道的创建的细节的。

所以为了降低耦合,就可以把这些都放到工厂里面去做,客户只需要告诉工厂汽车的品牌和型号就可以了,所有细节交给工厂完成就可以了。这就是简单工厂模式。

工厂类:

public class CarFactory{
    public Benz createBenz(int type){
        switch(type){
            case 200 :
                return new Benz200();
                break;
            case 260 :
                return new Benz260();
                break;
            case 300 :
                return new Benz300();
                break;
            default:
                break;
        }
    }
}

客户类:

public class Customer{
    public static viod main(String[] args){
        CarFactory carFactory = new CarFactory();
        Benz benz200 = carFactory.createBenz(200);//客户定制车型号
        benz200.drive();//客户开走
    }
}

二、简单工厂模式中的几个角色

在简单工厂模式中包含如下几个角色:

  • Factory(工厂角色):工厂角色即工厂类,它是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态的工厂方法factoryMethod(),它的返回类型为抽象产品类型Product。

  • Product(抽象产品角色):它是工厂类所创建的所有对象的父类,封装了各种产品对象的公有方法,它的引入将提高系统的灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所有创建的具体产品对象都是其子类对象。

  • ConcreteProduct(具体产品角色):它是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中声明的抽象方法。

在简单工厂模式中,客户端通过工厂类来创建一个产品类的实例,而无须直接使用new关键字来创建对象,它是工厂模式家族中最简单的一员。

Neil Liu wechat
个人微信,欢迎交流
让我感受下知识的力量~