工厂模式
1、简单工厂模式
package com.factory.simple;
public interface Worker {
void work();
}
package com.factory.simple;
public class Employee implements Worker{
@Override
public void work() {
System.out.println("员工做事");
}
}
package com.factory.simple;
public class Leader implements Worker{
@Override
public void work() {
System.out.println("经理管人");
}
}
package com.factory.simple;
public class WorkerFactory {
public static Worker create(Class<? extends Worker> clazz){
try {
return clazz.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
package com.factory.simple;
import com.factory.simple.Employee;
import com.factory.simple.Leader;
import com.factory.simple.Worker;
import com.factory.simple.WorkerFactory;
public class SimpleFactoryTest {
public static void main(String[] args) {
Worker worker = WorkerFactory.create(Employee.class);
worker.work();
Worker worker2 = WorkerFactory.create(Leader.class);
worker2.work();
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407175932346.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNjM2ODkw,size_16,color_FFFFFF,t_70)
2、工厂方法模式
package com.factory.factoryfunction;
public abstract class Course {
}
package com.factory.factoryfunction;
public class JavaCourse extends Course{
}
package com.factory.factoryfunction;
public class PythonCourse extends Course{
}
package com.factory.factoryfunction;
public interface CourseFactory {
Course create();
}
package com.factory.factoryfunction;
public class JavaCourseFactory implements CourseFactory{
@Override
public Course create() {
return new JavaCourse();
}
}
package com.factory.factoryfunction;
public class PythonCourseFactory implements CourseFactory{
@Override
public Course create() {
return new PythonCourse();
}
}
package com.factory.factoryfunction;
public class FunctionFactoryTest {
public static void main(String[] args) {
CourseFactory javaCourseFactory = new JavaCourseFactory();
Course javaCourse = javaCourseFactory.create();
CourseFactory pythonCourseFactory = new PythonCourseFactory();
Course pythonCourse = pythonCourseFactory.create();
System.out.println(javaCourse);
System.out.println(pythonCourse);
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407180017877.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNjM2ODkw,size_16,color_FFFFFF,t_70)
3、抽象工厂
package com.factory.abstractfactory;
public interface Note {
void edit();
}
package com.factory.abstractfactory;
public class JavaNote implements Note{
@Override
public void edit() {
System.out.println("Java笔记");
}
}
package com.factory.abstractfactory;
public class PythonNote implements Note{
@Override
public void edit() {
System.out.println("Python笔记");
}
}
package com.factory.abstractfactory;
public interface Video {
void record();
}
package com.factory.abstractfactory;
public class JavaVideo implements Video{
@Override
public void record() {
System.out.println("Java视频");
}
}
package com.factory.abstractfactory;
public class PythonVideo implements Video{
@Override
public void record() {
System.out.println("Python视频");
}
}
package com.factory.abstractfactory;
public abstract class CourseFactory {
public void init(){
System.out.println("初始化数据");
}
protected abstract Note createNote();
protected abstract Video createVideo();
}
package com.factory.abstractfactory;
public class JavaCourseFactory extends CourseFactory{
@Override
public Note createNote() {
super.init();
return new JavaNote();
}
@Override
public Video createVideo() {
super.init();
return new JavaVideo();
}
}
package com.factory.abstractfactory;
public class PythonCourseFactory extends CourseFactory{
@Override
public Note createNote() {
super.init();
return new PythonNote();
}
@Override
public Video createVideo() {
super.init();
return new PythonVideo();
}
}
package com.factory.abstractfactory;
public class AbstractFactoryTest {
public static void main(String[] args) {
CourseFactory javaCourseFactory = new JavaCourseFactory();
javaCourseFactory.createNote().edit();
javaCourseFactory.createVideo().record();
CourseFactory pythonFactory = new PythonCourseFactory();
pythonFactory.createVideo().record();
pythonFactory.createNote().edit();
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210407180122530.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwNjM2ODkw,size_16,color_FFFFFF,t_70)