大家好,别扯了我是工厂冰河~~
今天给大家介绍《Java极简设计模式》的第03章,工厂方法模式(FactoryMethod),模式多一句没有,其实少一句不行,简单用最简短的篇幅讲述设计模式最核心的知识,好了,开始今天的内容。
定义一个用于创建对象的接口,让子类决定实例化哪一个类。FactoryMethod使一个类的实例化延迟到其子类。
1.当一个类不知道它所必须创建的对象的类的时候。
2.当一个类希望由它的子类来指定它所创建的对象的时候。
3.当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
1.Product 定义工厂方法所创建的对象的接口。
2.ConcreteProduct 实现Product接口。
3.Creator 声明工厂方法,该方法返回一个Product类型的对象。Creator也可以定义一个工厂方法的缺省实现,它返回一个缺省的ConcreteProduct对象。可以调用工厂方法以创建一个Product对象。
4.ConcreteCreator 重定义工厂方法以返回一个ConcreteProduct实例。
图片
Product
package io.binghe.design.factotymethod;/** * 定义一个接口Work * @author binghe */public interface Work { /** * 定义方法 */ void doWork();}
ConcreteProduct
package io.binghe.design.factotymethod;/** * Work接口的具体实现类 * @author binghe */public class TeacherWork implements Work { public void doWork() { System.out.println("老师审批作业!"); }}
package io.binghe.design.factotymethod;/** * Work接口的具体实现类 * @author binghe */public class StudentWork implements Work { @Override public void doWork() { System.out.println("学生做作业!"); }}
Creator
package io.binghe.design.factotymethod;/** * 抽象工厂接口 * @author binghe */public interface IWorkFactory { /** * 定义获取Work实例对象的方法 * @return */ Work getWork();}
ConcreteCreator
package io.binghe.design.factotymethod;/** * IWorkFactory工厂的实现类 * @author binghe */public class StudentWorkFactory implements IWorkFactory { @Override public Work getWork() { return new StudentWork(); }}
package io.binghe.design.factotymethod;/** * IWorkFactory工厂的实现类 * @author binghe */public class TeacherWorkFactory implements IWorkFactory { @Override public Work getWork() { return new TeacherWork(); }}
Test
package io.binghe.design.factotymethod;/** * 测试类 * @author binghe */public class Test { public static void main(String[] args) { IWorkFactory studentWorkFactory = new StudentWorkFactory(); studentWorkFactory.getWork().doWork(); IWorkFactory teacherWorkFactory = new TeacherWorkFactory(); teacherWorkFactory.getWork().doWork(); }}
Result
学生做作业!老师审批作业!
好了,今天就到这儿吧,相信大家对工厂方法模式有了进一步的认识,我是冰河,我们下期见~~
责任编辑:武晓燕 来源: 冰河技术 Creator工厂方法Creator(责任编辑:百科)
北京汽车(01958.HK)年度净利跌59.4% 每股收益为人民币0.24元
寰亚传媒(08075.HK)中期亏损收窄至1916万港元 每股亏损4.58港仙
uSens凌感发布ARVR SDK及配套硬件 启动uDev计划
新筑股份(002480.SZ):拟开展融资性售后回租业务 租赁期限3年
按需开关更省钱,这样的 Kubernetes 集群谁不想要