黑马程序员技术交流社区

标题: 【广州校区】工厂模式 [打印本页]

作者: Mylo    时间: 2019-6-20 14:29
标题: 【广州校区】工厂模式
A. 为什么要从设计模式开始及工厂模式详解软件设计7大原则B. 工厂模式A. Spring 中用到的设计模式B. 简单工厂模式定义public interface ICourse {
    public void record();
}

public class JavaCourse implements ICourse {
    @Override
    public void record() {
        System.out.println("录制 Java 架构师视频课程");
    }
}

public class PythonCourse implements ICourse {
    @Override
    public void record() {
        System.out.println("录制 Python 人工智障视频课程");
    }
}public class CourseFactory {
    public ICourse create_v1(String courseName) {
        courseName = courseName.toLowerCase();
        switch (courseName) {
            case "java":
                return new JavaCourse();
            default:
                return null;
        }
    }
    public ICourse create_v2(String className) {
        if (className == null || className.trim().equals("")) return null;
        try {
            return (ICourse) Class.forName(className).newInstance();
        } catch (Exception e) {
            System.err.println("fail to create object!!");
        }
        return null;
    }
    public ICourse create_v3(Class<? extends ICourse> clazz) {
        if (clazz == null) throw new NullPointerException();
        try {
            return clazz.newInstance();
        } catch (Exception e) {
            System.err.println("fail to create object!!");
        }
        return null;
    }
}public class SimpleFactoryTest {
    public static void main(String[] args) {
        System.out.println("普通创建对象方式");
        ICourse course = new JavaCourse();
        course.record();
        
        System.out.println("通过简单工厂获取对象");
        CourseFactory factory = new CourseFactory();
        ICourse javaCourse_1 = factory.create_v1("Java");
        javaCourse_1.record();
        
        System.out.println("改进版后的方法");
        ICourse javaCourse_2 = factory.create_v2(JavaCourse.class.getName());
        javaCourse_2.record();
        
        System.out.println("改进版本 V3");
        ICourse javaCourse_3 = factory.create_v3(JavaCourse.class);
        javaCourse_3.record();
    }
}C. 工厂方法模式public interface ICourse {
    public void record();
}

public class JavaCourse implements ICourse {
    @Override
    public void record() {
        System.out.println("录制 Java 架构师视频课程");
    }
}

public class PythonCourse implements ICourse {
    @Override
    public void record() {
        System.out.println("录制 Python 人工智障视频课程");
    }
}public interface ICourseFactory {
    public ICourse create();
}

public class JavaCourseFactory implements ICourseFactory {
    @Override
    public ICourse create() {
        return new JavaCourse();
    }
}

public class PythonCourseFactory implements ICourseFactory {
    @Override
    public ICourse create() {
        return new PythonCourse();
    }
}public class FactoryMethodTest {
    public static void main(String[] args) {
        ICourseFactory courseFactory = new PythonCourseFactory();
        ICourse pythonCourse = courseFactory.create();
        pythonCourse.record();
    }
}D. 抽象工厂public interface ICourse {}

public interface INote {}

public interface IVideo {}public class JavaCourse implements ICourse {}

public class JavaNote implements INote {}

public class JavaVideo implements IVideo {}public class PythonCourse implements ICourse {}public class PythonNote implements INote{}public class PythonVideo implements IVideo {}public interface ICourseFactory {    public ICourse createCourse();    public IVideo createVideo();    public INote createNote();}public class JavaCourseFactory implements ICourseFactory {    @Override    public ICourse createCourse() { return new JavaCourse(); }    @Override    public IVideo createVideo() { return new JavaVideo(); }    @Override    public INote createNote() { return new JavaNote(); }}public class PythonCourseFactory implements ICourseFactory {    @Override    public ICourse createCourse() { return new PythonCourse(); }    @Override    public IVideo createVideo() { return new PythonVideo(); }    @Override    public INote createNote() { return new PythonNote(); }}public class AbstractFactoryTest {    public static void main(String[] args) {        ICourseFactory javaFactory = new JavaCourseFactory();        javaFactory.createCourse();        javaFactory.createNote();        javaFactory.createVideo();        ICourseFactory pythonFactory = new PythonCourseFactory();        pythonFactory.createCourse();        pythonFactory.createNote();        pythonFactory.createNote();    }}





欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2