工厂方法模式

模式定义

工厂方法模式:又称为静态工厂模式,也叫做虚拟构造器模式和多态工厂模式,他属于类创造模式。在工厂模式中。工厂父类负责定义创建产品对象的公共接口,而工厂子类负责生成具体产品对象。

模式结构

 模式分析

工厂模式是简单工厂模式的进一步抽象和推广。在工厂方法模式中,核心的工厂类不再负责所有具体产品的创建,而是将生成具体产品类交给子工厂类完成。工厂类和产品类具有平行的等级结构,往往一一对应。

优点:

(1)用户只需关心产品类对应的工厂类,无需关心具体创建细节。

(2)可以由工厂自主确定创建何种产品对象,而如何创建对象的细节完全封装在内部。

(3)系统加入新产品无需修改工厂及接口,而只要添加一个实体类和一个实体类的工厂即可。

缺点:

(1)在添加新的产品时,会创建新的实体类和工厂类,在一定程度上增加了系统复杂性,在编译和运行带来了额外开销。

(2)会增加系统的类数,在一定程度上增加了系统的复杂度和理解难度

(3)系统扩展困难,不利于系统的扩展和维护。

电视案例

TV接口类

package com.zck.factoryfunction;

public interface TV {
    public void play();
}

HaierTV类

package com.zck.factoryfunction;

public class HaierTV implements TV {
    public void play() {
        System.out.print("海尔电视正在播放
");
    }
}

HisenseTV类

package com.zck.factoryfunction;

public class HisenseTV implements TV {
    public void play() {
        System.out.print("海信电视正在播放
");
    }
}

factory接口类

package com.zck.factoryfunction;

public interface TVFactory {
    public TV produceTV();
}

HaierTVFaction类

package com.zck.factoryfunction;

public class HaierTVFactory implements TVFactory {

    public TV produceTV() {
        return new HaierTV();
    }
}

HisenseTVFActory类

package com.zck.factoryfunction;

public class HisenseTVFactory implements TVFactory {

    public TV produceTV() {
        return new HisenseTV();
    }
}

Client类

package com.zck.factoryfunction;

public class Client {

    public static void main(String[] args) {
        TV tv1,tv2;
        TVFactory tvFactory1 = new HaierTVFactory() ;
        TVFactory tvFactory2 = new HisenseTVFactory() ;
        tv1 = tvFactory1.produceTV();
        tv1.play();
        tv2 = tvFactory2.produceTV();
        tv2.play();
    }
}

测试结果

原文地址:https://www.cnblogs.com/2016-zck/p/13864784.html