A. 为什么要从设计模式开始及工厂模式详解软件设计7大原则开闭原则 单一职责 依赖倒置原则 接口隔离原则 迪米特法则 里氏替换原则 合成复用原则
B. 工厂模式A. Spring 中用到的设计模式Spring IOC Spring AOP Spring MVC Spring JDBC
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(); }}
|
|