设计模式-4-工厂方法

设计模式-4-工厂方法

简介:工厂类创建对应实现类的工作,交给子类去实现

目的:不修改工厂类的情况下,引进其他产品

总结:工厂方法就是提供一个抽象的工厂,一个抽象的产品,相当于Driver(数据库连接工厂)和Connection(抽象产品);

           实现一方需要提供一个具体的工厂类(比如mysql驱动)和一个具体的产品(比如mysql数据库连接)

组成:工厂接口, 工厂接口实现类, 具体产品的接口,产品实现类

一,工厂接口

package com.design.d.factory.method;

/**
 * 抽象工厂
 */
public interface CoreFactory {

    HospitalService createHospitalFactory();
    
}

二,工厂接口实现类

package com.design.d.factory.method;
/**
 * 指定产品的具体工厂
 */
public class GzHospitalFactory implements CoreFactory {

    @Override
    public HospitalService createHospitalFactory() {
        return new GzHospitalServiceImpl();
    }

    
}
package com.design.d.factory.method;
/**
 * 指定产品的具体工厂
 */
public class HzHospitalFactory implements CoreFactory {

    @Override
    public HospitalService createHospitalFactory() {
        return new HzHospitalServiceImpl();
    }

}

三,具体产品接口

package com.design.d.factory.method;
/**
 * 抽象产品接口
 */
public interface HospitalService {

    void guahao();
}

四,产品实现类

package com.design.d.factory.method;
/**
 * 具体的产品
 */
public class GzHospitalServiceImpl implements HospitalService {

    @Override
    public void guahao() {
        System.out.println(" GZ - 医院挂号  ... ...");
    }

}
package com.design.d.factory.method;
/**
 * 具体的产品
 */
public class HzHospitalServiceImpl implements HospitalService {

    @Override
    public void guahao() {
        System.out.println(" HZ - 医院挂号  ... ...");
    }

}

Main:

package com.design.d.factory.method;
/**
 * 4-工厂方法模式
 */
public class MainTest {

    public static void main(String[] args) {
        
        CoreFactory hospitalFactory = new GzHospitalFactory();
        HospitalService gz = hospitalFactory.createHospitalFactory();
        gz.guahao();
        
        hospitalFactory = new HzHospitalFactory();
        HospitalService hz = hospitalFactory.createHospitalFactory();
        hz.guahao();
    }
}

Result:

 GZ - 医院挂号  ... ...
 HZ - 医院挂号  ... ...