工厂三姐妹

工厂三姐妹


          工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

          工厂模式可以分为三种:

          简单工厂模式:Simple Factory

          工厂方法模式:Factory Method

          抽象工厂模式:Abstract Factory


一、   简单工厂模式

工厂三姐妹_第1张图片

          简单工厂模式,又称为静态工厂方法模式,目的就是:定义一个用于创建对象的接口。

          具体组成:

          工厂类角色:这是本模式的核心,含有一定的商业逻辑和判断逻辑。

          抽象产品角色:一般是具体产品继承的父类,或者实现的接口。

          具体产品角色:工厂类所创建的对象就是此角色的实例。

          这样,客户端避免了直接创建产品对象的责任,而仅仅负责消费产品。

          然而,在实际应用中,产品很可能是一个多层次的树状结构,此时,简单工厂模式中只有一个工厂类来对应这些产品,此时这个工厂类的职责复杂了,于是,有了工厂方法模式。


二、   工厂方法模式


工厂三姐妹_第2张图片


          工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。

          工厂方法模式,就是去掉了简单工厂模式中工厂方法的静态属性,使得它可以被子类继承,这样,集中在工厂方法上的压力,就可以由工厂方法中不同的工厂子类来分担,而不是只集中在一个工厂类上。


          具体组成:

          抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关,是具体工厂角色必须实现的接口,或者继承的父类。

          具体工厂角色:含有和具体业务逻辑有关的代码,由应用程序调用以创建,对应的具体产品的对象。

          抽象产品角色:是具体产品继承的父类,或者是实现的接口。

          具体产品角色:具体工厂角色所创建的对象,就是此角色的实例。


          工厂方法模式,使用继承子抽象工厂角色的多个子类,来代替简单工厂模式中的工厂类,这样便分担了压力,而且更加灵活。

          当有新的产品产生时,只要按照抽象产品角色,抽象工厂角色来合成,就可以被客户使用,而不必修改任何已有的代码,符合开放封闭的原则。

          但是,当产品的种类非常多时,会出现大量的与之对应的工厂对象,此时,可以考虑使用简单工厂模式和工厂方法模式相结合的的方式,来减少工厂类,即对于产品树上类似的种类可以使用简单工厂模式来实现。

          工厂方法模式仿佛已经很完美的对对象的创建进行了包装,使得客户程序中仅仅处理抽象产品角色提供的接口。

          什么时候使用工厂方法模式:当客户程序不需要知道要使用对象的创建过程,或者是客户程序使用的对象存在变动的可能,或者根本就不知道使用哪一个具体的对象。

          简单工厂模式和工厂方法模式,并没有真正的避免了代码的改动,当产品对象创建条件的改变,必然会引起工厂角色的修改,面对这种情况,使用反射机制与配置文件的巧妙结合可以突破这种限制。


三、   抽象工厂模式


工厂三姐妹_第3张图片


          抽象工厂模式:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

          抽象工厂的用意:给客户端提供一个接口,可以创建多个产品族中产品对象,抽象工厂模式需要满足的条件:系统中有多个产品族,而系统一次只可能消费其中一族产品,同属于同一个产品族的产品才会使用。


          具体组成:

          抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关,是具体工厂角色必须实现的接口,或者继承的父类。

          具体工厂角色:含有和具体业务逻辑有关的代码,由应用程序调用以创建,对应的具体产品的对象。

          抽象产品角色:是具体产品继承的父类,或者是实现的接口。

          具体产品角色:具体工厂角色所创建的对象,就是此角色的实例。

          它的组成和工厂方法模式如出一辙。

          抽象工厂模式和工厂方法模式的区别,就在于需要创建对象的复杂程度上,而且,抽象工厂模式是工厂模式三个里面,最为抽象,最具一般性的。

 

你可能感兴趣的:(工厂三姐妹)