设计模式之--工厂方法模式

抽象工厂--导读

  当我们一个小品牌的汽车厂做成大的汽车厂时,这时我们不仅仅,满足与只是创建昂贵的汽车和便宜的汽车,而这时我们更趋向于生产不同系列的汽车

但是问题来了牌子还时这个牌子但是我现在生产的汽车不同了,所以我需要同的厂来生产不同系列的车因为这样才能做到高效,因为制作车的流程没有改变

但是不同系列车的优点也有不同,这时我们的抽象工厂就发挥了大作用了。

抽象工厂--定义    

  抽象工厂模式(Abstract Factory Pattern)是围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式,在抽象工厂模式中,接口是负责创建一个相关对象的工厂,不需要显式指定它们的类。每个生成的工厂都能按照工厂模式提供对象。

抽象工厂--模式     

        工厂方法模式的UML结构图:

         

        Product:抽象产品。所有的产品必须实现这个共同的接口,这样一来,使用这些产品的类既可以引用这个接口。而不是具体类。

        ConcreteProduct:具体产品。

        Creator:抽象工厂。它实现了所有操纵产品的方法,但不实现工厂方法。Creator所有的子类都必须要实现factoryMethod()方法。

        ConcreteCreator:具体工厂。制造产品的实际工厂。它负责创建一个或者多个具体产品,只有ConcreteCreator类知道如何创建这些产品。

        工厂方法模式是简单工厂模式的延伸。在工厂方法模式中,核心工厂类不在负责产品的创建,而是将具体的创建工作交给子类去完成。也就是后所这个核心工厂仅仅只是提供创建的接口,具体实现方法交给继承它的子类去完成。当我们的系统需要增加其他新的对象时,我们只需要添加一个具体的产品和它的创建工厂即可,不需要对原工厂进行任何修改,这样很好地符合了“开闭原则”。

抽象工厂--代码实现

jeepFactory具体生产某一系列车的工厂

package Abstract_Factory_Pattern;
/**
 * 一个具体的工厂用于生产节油系列的汽车
 * @author liu
 *
 */
public class JeepFactory extends CarFactory {

    
    public Cars createCar(String type) {
        Cars car =null;
        if(type.equals("cheap")) {
            car=new JeepCheapCar("Jeep");
        }else {
            car=new JeepExpensiveCar("Jeep");
        }
        return car;
    }

    

}
package Abstract_Factory_Pattern;
/**
 * 定义一个汽车的总的生产流程,其他厂都是跟据该工厂来进行
 * 制作产品,这是一个总的抽向工厂
 * @author liu
 *
 */
public abstract class CarFactory {
    
    public abstract Cars createCar(String type);
}

用于生产另一系列的车

package Abstract_Factory_Pattern;

public  class Roadster_Factory extends CarFactory {

    public Cars createCar(String type) {
        Cars car =null;
        if(type.equals("cheap")) {
            car=new RoadsterCheapCar("Roadster");
        }else {
            car=new RoadsterExpensiveCar("Roadster");
        }
        return car;
    }

}

抽象工厂--优缺点

    优点

           1、  在工厂方法中,用户只需要知道所要产品的具体工厂,无须关系具体的创建过程,甚至不需要具体产品类的类名。

           2、  在系统增加新的产品时,我们只需要添加一个具体产品类和对应的实现工厂,无需对原工厂进行任何修改,很好地符合了“开闭原则”。

        缺点

           1、  每次增加一个产品时,都需要增加一个具体类和对象实现工厂,是的系统中类的个数成倍增加,在一定程度上增加了系统的复杂度,同时也增加了系统具体类的依赖。这并不是什么好事。

抽象工厂--使用场景

  1、QQ 换皮肤,一整套一起换。

  2、生成不同操作系统的程序。

猜你喜欢

转载自www.cnblogs.com/sank/p/10645758.html