简介:工厂类创建对应实现类的工作,交给子类去实现
目的:不修改工厂类的情况下,引进其他产品
总结:工厂方法就是提供一个抽象的工厂,一个抽象的产品,相当于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 - 医院挂号 ... ...