1_工程设计模式-简单工厂设计
2024-01-07 23:48:20
工程设计模式
一.简单工程设计模式
1.概念
简单工厂模式( Simple Factory Pattern )是指由一个工厂对象决定创建出哪一种产品类的实例。
但它不属于 GOF 23 种设计模式。简单工厂适用于工厂类负责创建的对象较少的场景,且客户端只需要传入工厂类的参数,对于如何创建对象的逻辑不需要关心。
2.代码实例【课程录制功能工厂案例】
创建一个抽象类
public interface ICourse {
/** 录制视频 */
void record();
}
创建抽象实现类
//java课程录制功能
public class JavaCourse implements ICourse {
public void record() {
System.out.println("录制Java课程");
}
}
//Python课程录制功能
public class PythonCourse implements ICourse {
public void record() {
System.out.println("录制Python课程");
}
}
创建简单工厂类来,创建对应的对象[这个对象都是抽象类的实现]
public class CourseFactory {
//1.通过标识字符串来创建不同实例实例对象
public ICourse create(String name){
if("java".equals(name)){
return new JavaCourse();
}else if("python".equals(name)){
return new PythonCourse();
}else {
return null;
}
}
//2.根据类全路径来创建不同的实例对象
public ICourse create(String className){
try {
if (!(null == className || "".equals(className))) {
return (ICourse) Class.forName(className).newInstance();
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
//3.通过反射来创建不同的实例对象-->推荐使用更简洁
public ICourse create(Class<? extends ICourse> clazz){
try {
if (null != clazz) {
return clazz.newInstance();
}
}catch (Exception e){
e.printStackTrace();
}
return null;
}
}
调用简单的工厂类创建不同的实例对象
public class SimpleFactoryTest {
public static void main(String[] args) {
//使用类全路径来创建不同的实例对象
ICourseFactory factory = new ICourseFactory();
ICourse course = factory.create("com.gupaoedu.vip.pattern.factory.JavaCourse");
course.record();
//通过反射来创建不同的实例对象-->推荐使用更简洁而且不容易错
CourseFactory factory = new CourseFactory();
ICourse course = factory.create(JavaCourse.class);
course.record();
}
}
3.上面简单工厂类类图
类全路径来创建不同的实例对象类图:
反射来创建不同的实例对象类图:
4.简单工厂类总结:
简单工厂概念:
-
简单工厂创建较少的对象,根据传入的参数获取不同的实例对象。不需要关注创建实例对象逻辑处理过程。
简单工厂创建步骤:
-
创建抽类并实现抽象类
-
根据抽象类,创建对于的简单工厂类[根据字符串标识创建对应的实例对象[易错];根据类路径创建对应实例对象[易错];通过反射创建实例对象;]
-
调用工厂类创建不同实例对象
文章来源:https://blog.csdn.net/jinhuding/article/details/135446068
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!