1、工厂方法模式:定义一个用于创建对象的接口,让之类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
2、题目:学雷锋,帮社区老人扫地,洗衣服,买米,做好事。
3、UML图:


4、代码示例:
4.1、雷锋相关类:
LeiFeng类

package com.aibaiyang.idemo.service.factorymethod;
import lombok.Data;
/**
* @Author zhong guo
* @Date 2019/8/30 19:14
* @description 雷锋类
**/
@Data
public class LeiFeng {
public void sweep(){
System.out.println("扫地");
}
public void wash(){
System.out.println("洗衣服");
}
public void buyRice(){
System.out.println("买米");
}
}
Undergraduate类

package com.aibaiyang.idemo.service.factorymethod;
/**
* @Author zhong guo
* @Date 2019/8/30 19:17
* @description 学雷锋的大学生
**/
public class Undergraduate extends LeiFeng{
}
Volunteer类

package com.aibaiyang.idemo.service.factorymethod;
/**
* @Author zhong guo
* @Date 2019/8/30 19:18
* @description 社区志愿者
**/
public class Volunteer extends LeiFeng{
}
4.2、雷锋工厂相关类
IFactory接口

package com.aibaiyang.idemo.service.factorymethod;
/**
* @Author zhong guo
* @Date 2019/8/30 19:18
* @description 雷锋工厂
**/
public interface IFactory {
/**
* 创建雷锋对象
* @return
*/
LeiFeng createLeiFeng();
}
UndergraduateFactory类

package com.aibaiyang.idemo.service.factorymethod;
/**
* @Author zhong guo
* @Date 2019/8/30 19:20
* @description 学雷锋大学生工厂
**/
public class UndergraduateFactory implements IFactory{
@Override
public LeiFeng createLeiFeng() {
return new Undergraduate();
}
}
VolunteerFactory类

package com.aibaiyang.idemo.service.factorymethod;
/**
* @Author zhong guo
* @Date 2019/8/30 19:21
* @description 志愿者工厂
**/
public class VolunteerFactory implements IFactory {
@Override
public LeiFeng createLeiFeng() {
return new Volunteer();
}
}
4.3、工厂方法模式客户端

package com.aibaiyang.idemo.service.factorymethod;
/**
* @Author zhong guo
* @Date 2019/8/30 19:22
* @description 工厂方法客户端
**/
public class FactoryMethodClient {
public static void main(String[] args) {
//工厂方法模式
//此处为学雷锋学生工厂,若要替换成志愿者,只需替换工厂类即可
// IFactory factory = new UndergraduateFactory();
IFactory factory = new VolunteerFactory();
LeiFeng student = factory.createLeiFeng();
student.wash();
student.sweep();
student.buyRice();
}
}
5、github:
