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:
原文:https://www.cnblogs.com/aibaiyang/p/11443115.html