Study:底层抽象类;
package com.zhuhuix.startup.test;
public abstract class Study {
public abstract void study();
}
EnglishStudy:英语学习类--继承抽象类并实现抽象方法
package com.zhuhuix.startup.test;
public class EnglishStudy extends Study {
@Override
public void study(){
System.out.println("We Study English");
}
}
MathStudy: 数学学习类--继承抽象类并实现抽象方法
package com.zhuhuix.startup.test;
public class MathStudy extends Study{
@Override
public void study(){
System.out.println("We Study Math");
}
}
StudyFactory:学习工厂类--根据类型参数返回具体学习类
package com.zhuhuix.startup.test;
public class StudyFactory {
public Study getStudy(String type) {
switch (type.toLowerCase()) {
case "math":
return new MathStudy();
case "english":
return new EnglishStudy();
default:
return null;
}
}
}
Test:测试类--创建工厂类,根据学习类型返回具体学习类,并调用具体方法。
package com.zhuhuix.startup.test;
public class Test {
public static void main(String[] args) {
StudyFactory studyFactory = new StudyFactory();
Study study =studyFactory.getStudy("math");
if(study!=null){
study.study();
}
}
}
Diagrams如下:
从以上流图可以看出,具体的产品类都继承于抽象产品类,不同的产品由工厂统一封装,并负责创建具体产品,应用端的用户只需要访问工厂选择不同的产品就行了,实现了应用端与具体产品类的解藕。但简单工厂的最大弊病在于工厂类集中了所有产品类的创建工作,违反了高内聚低耦合的设计原则,另外应用端也需要对工厂中的各种产品都需进行了解,大大增加了应用端的难度系数。