1.简单工厂模式
简单工厂:由一个工厂对象决定创建出哪一种产品类的实例
类型:创建型,不属于GOF23种设计模式
代码示例
第一版:
1.定义一个Vedio类
package com.design_pattern.creational.simplefactory;
/**
* Video
*
* @Description 简单工厂模式
*/
public abstract class Video {
public abstract void produce();
}
2. 定义一个JavaVideo类
package com.design_pattern.creational.simplefactory;
/**
* JavaVideo
*
* @Description
*/
public class JavaVideo extends Video {
@Override
public void produce() {
System.out.println("******************************输出JAVA录音视频");
}
}
3.定义一个PythonVideo类
package com.design_pattern.creational.simplefactory;
/**
* PythonVideo
*
* @Description
*/
public class PythonVideo extends Video {
@Override
public void produce() {
System.out.println("********************输出Python录音视频");
}
}
4.测试类
package com.design_pattern.creational.simplefactory;
/**
* TestSimpleFactory
*
* @Description 测试简单工厂模式
*/
public class TestSimpleFactory {
public static void main(String[] args) {
// Video video = new PythonVideo();
Video video = new JavaVideo();
video.produce();
}
}
5.测试结果
第二版:
1.Video类、JavaVideo类、PythonVideo类 同上
2.定义Video工厂类
package com.design_pattern.creational.simplefactory.version2;
import com.design_pattern.creational.simplefactory.Video;
/**
* VideoFactory
*
* @Description
*/
public class VideoFactory {
/*public Video getVideo(String type) {
if("java".equalsIgnoreCase(type)){
return new JavaVideo();
}else if("python".equalsIgnoreCase(type)){
return new PythonVideo();
}
return null;
}*/
public Video getVideo(Class c) {
Video video = null;
try {
video =(Video) Class.forName(c.getName()).newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
return video;
}
}
3.测试类
package com.design_pattern.creational.simplefactory.version2;
import com.design_pattern.creational.simplefactory.JavaVideo;
import com.design_pattern.creational.simplefactory.Video;
/**
* TestSimpleFactory1
*
* @Description
*/
public class TestSimpleFactory1 {
/* public static void main(String[] args) {
VideoFactory videoFactory = new VideoFactory();
Video java = videoFactory.getVideo("java");
if(java == null){
return;
}
java.produce();
}*/
public static void main(String[] args) {
VideoFactory videoFactory = new VideoFactory();
Video video = videoFactory.getVideo(JavaVideo.class);
if(video == null){
return;
}
video.produce();
}
}
4.测试结果