Compare commits

..

14 Commits
2 ... main

@ -0,0 +1,27 @@
package middleware;
/**
*
*
*/
public class AuthMiddleware extends MiddlewareDecorator {
public AuthMiddleware(HttpRequestHandler decoratedHandler) {
super(decoratedHandler);
}
@Override
public HttpResponse handle(HttpRequest request) {
// 简单的认证检查逻辑
String authHeader = request.getHeaders();
if (authHeader != null && authHeader.contains("Authorization: Bearer token123")) {
System.out.println("Authentication successful");
return super.handle(request);
} else {
HttpResponse response = new HttpResponse();
response.setStatusCode(401);
response.setBody("Unauthorized");
return response;
}
}
}

@ -0,0 +1,15 @@
package middleware;
/**
* HTTP
*
*/
public class BasicHttpRequestHandler implements HttpRequestHandler {
@Override
public HttpResponse handle(HttpRequest request) {
HttpResponse response = new HttpResponse();
response.setBody("Hello from Basic Handler: " + request.getPath());
response.setHeaders("Content-Type: text/plain");
return response;
}
}

@ -0,0 +1,23 @@
package middleware;
/**
* CORS
*
*/
public class CORSMiddleware extends MiddlewareDecorator {
public CORSMiddleware(HttpRequestHandler decoratedHandler) {
super(decoratedHandler);
}
@Override
public HttpResponse handle(HttpRequest request) {
HttpResponse response = super.handle(request);
// 添加CORS头信息
String existingHeaders = response.getHeaders() != null ? response.getHeaders() + "\n" : "";
response.setHeaders(existingHeaders + "Access-Control-Allow-Origin: *\nAccess-Control-Allow-Methods: GET, POST, PUT, DELETE\nAccess-Control-Allow-Headers: *");
return response;
}
}

@ -0,0 +1,80 @@
package challenge;
import basic.Shape;
import advanced.Resizable;
/**
* ShapeResizable
*/
public class Circle implements Shape, Resizable {
private String color;
private double radius;
/**
*
* @param color
* @param radius
*/
public Circle(String color, double radius) {
this.color = color;
this.radius = radius;
}
@Override
public String getColor() {
return color;
}
@Override
public double getArea() {
return Math.PI * radius * radius;
}
@Override
public void display() {
System.out.println("Circle [color=" + color + ", radius=" + radius + ", area=" + getArea() + "]");
}
@Override
public void enlarge(double factor) {
if (factor > 0) {
this.radius *= factor;
}
}
@Override
public void shrink(double factor) {
if (factor > 0 && factor < 1) {
this.radius *= factor;
}
}
@Override
public String getSizeInfo() {
return "Circle with radius: " + radius + ", area: " + getArea();
}
/**
*
* @return
*/
public double getRadius() {
return radius;
}
/**
*
* @param radius
*/
public void setRadius(double radius) {
this.radius = radius;
}
/**
*
* @param color
*/
public void setColor(String color) {
this.color = color;
}
}

@ -0,0 +1,60 @@
package challenge;
import basic.Shape;
/**
* ShapeConverter
*/
public class CircleToEllipseConverter implements ShapeConverter {
private double stretchFactor; // 拉伸因子,用于确定椭圆的长半轴
/**
*
* @param stretchFactor 1
*/
public CircleToEllipseConverter(double stretchFactor) {
this.stretchFactor = Math.max(stretchFactor, 1.0); // 确保拉伸因子至少为1
}
@Override
public Shape convert(Shape sourceShape) {
if (!canConvert(sourceShape)) {
return null;
}
Circle circle = (Circle) sourceShape;
double radius = circle.getRadius();
// 将圆形转换为椭圆形:保持颜色不变,半径作为短半轴,拉伸后的半径作为长半轴
double semiMinorAxis = radius;
double semiMajorAxis = radius * stretchFactor;
return new Ellipse(circle.getColor(), semiMajorAxis, semiMinorAxis);
}
@Override
public boolean canConvert(Shape sourceShape) {
return sourceShape instanceof Circle;
}
@Override
public String getConversionDescription() {
return "将圆形转换为椭圆形,拉伸因子为:" + stretchFactor;
}
/**
*
* @return
*/
public double getStretchFactor() {
return stretchFactor;
}
/**
*
* @param stretchFactor
*/
public void setStretchFactor(double stretchFactor) {
this.stretchFactor = Math.max(stretchFactor, 1.0);
}
}

@ -0,0 +1,39 @@
package advanced;
public class ClassRoom {
private String id;
private String name;
private Teacher teacher;
public ClassRoom() {
}
public ClassRoom(String id, String name) {
this.id = id;
this.name = name;
}
public void setTeacher(Teacher teacher) {
this.teacher = teacher;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Teacher getTeacher() {
return teacher;
}
}

@ -0,0 +1,143 @@
package challenge;
import basic.Shape;
import advanced.Resizable;
import java.util.ArrayList;
import java.util.List;
/**
* ShapeResizable
*/
public class CompositeShape implements Shape, Resizable {
private String color;
private String name;
private List<Shape> shapes;
/**
*
* @param name
* @param color
*/
public CompositeShape(String name, String color) {
this.name = name;
this.color = color;
this.shapes = new ArrayList<>();
}
/**
*
* @param shape
*/
public void addShape(Shape shape) {
if (shape != null) {
shapes.add(shape);
}
}
/**
*
* @param shape
* @return truefalse
*/
public boolean removeShape(Shape shape) {
return shapes.remove(shape);
}
/**
*
*/
public void clearShapes() {
shapes.clear();
}
/**
*
* @return
*/
public List<Shape> getShapes() {
return new ArrayList<>(shapes); // 返回副本,防止外部修改
}
@Override
public String getColor() {
return color;
}
@Override
public double getArea() {
double totalArea = 0.0;
for (Shape shape : shapes) {
totalArea += shape.getArea();
}
return totalArea;
}
@Override
public void display() {
System.out.println("CompositeShape [name=" + name + ", color=" + color + ", totalShapes=" + shapes.size() + ", totalArea=" + getArea() + "]");
System.out.println(" 子图形列表:");
for (int i = 0; i < shapes.size(); i++) {
System.out.print(" " + (i + 1) + ". ");
shapes.get(i).display();
}
}
@Override
public void enlarge(double factor) {
if (factor > 0) {
for (Shape shape : shapes) {
if (shape instanceof Resizable) {
((Resizable) shape).enlarge(factor);
}
}
}
}
@Override
public void shrink(double factor) {
if (factor > 0 && factor < 1) {
for (Shape shape : shapes) {
if (shape instanceof Resizable) {
((Resizable) shape).shrink(factor);
}
}
}
}
@Override
public String getSizeInfo() {
return "CompositeShape '" + name + "' with " + shapes.size() + " shapes, total area: " + getArea();
}
/**
*
* @return
*/
public String getName() {
return name;
}
/**
*
* @param name
*/
public void setName(String name) {
this.name = name;
}
/**
*
* @param color
*/
public void setColor(String color) {
this.color = color;
}
/**
*
* @return
*/
public int getShapeCount() {
return shapes.size();
}
}

@ -0,0 +1,59 @@
package advanced;
public class AdvancedCourse {
private int id;
private String name;
private int credit;
private java.util.List<AdvancedCourse> prerequisiteCourses;
public AdvancedCourse() {
this.prerequisiteCourses = new java.util.ArrayList<>();
}
public AdvancedCourse(int id, String name, int credit) {
this.id = id;
this.name = name;
this.credit = credit;
this.prerequisiteCourses = new java.util.ArrayList<>();
}
public void addPrerequisiteCourse(AdvancedCourse course) {
prerequisiteCourses.add(course);
}
public void removePrerequisiteCourse(AdvancedCourse course) {
prerequisiteCourses.remove(course);
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getCredit() {
return credit;
}
public void setCredit(int credit) {
this.credit = credit;
}
public java.util.List<AdvancedCourse> getPrerequisiteCourses() {
return prerequisiteCourses;
}
public void setPrerequisiteCourses(java.util.List<AdvancedCourse> prerequisiteCourses) {
this.prerequisiteCourses = prerequisiteCourses;
}
}

@ -0,0 +1,101 @@
package challenge;
import basic.Shape;
import advanced.Resizable;
/**
* ShapeResizable
*/
public class Ellipse implements Shape, Resizable {
private String color;
private double semiMajorAxis; // 长半轴
private double semiMinorAxis; // 短半轴
/**
*
* @param color
* @param semiMajorAxis
* @param semiMinorAxis
*/
public Ellipse(String color, double semiMajorAxis, double semiMinorAxis) {
this.color = color;
this.semiMajorAxis = Math.max(semiMajorAxis, semiMinorAxis); // 确保长半轴不小于短半轴
this.semiMinorAxis = Math.min(semiMajorAxis, semiMinorAxis);
}
@Override
public String getColor() {
return color;
}
@Override
public double getArea() {
return Math.PI * semiMajorAxis * semiMinorAxis;
}
@Override
public void display() {
System.out.println("Ellipse [color=" + color + ", semiMajorAxis=" + semiMajorAxis + ", semiMinorAxis=" + semiMinorAxis + ", area=" + getArea() + "]");
}
@Override
public void enlarge(double factor) {
if (factor > 0) {
this.semiMajorAxis *= factor;
this.semiMinorAxis *= factor;
}
}
@Override
public void shrink(double factor) {
if (factor > 0 && factor < 1) {
this.semiMajorAxis *= factor;
this.semiMinorAxis *= factor;
}
}
@Override
public String getSizeInfo() {
return "Ellipse with semi-major axis: " + semiMajorAxis + ", semi-minor axis: " + semiMinorAxis + ", area: " + getArea();
}
/**
*
* @return
*/
public double getSemiMajorAxis() {
return semiMajorAxis;
}
/**
*
* @param semiMajorAxis
*/
public void setSemiMajorAxis(double semiMajorAxis) {
this.semiMajorAxis = semiMajorAxis;
}
/**
*
* @return
*/
public double getSemiMinorAxis() {
return semiMinorAxis;
}
/**
*
* @param semiMinorAxis
*/
public void setSemiMinorAxis(double semiMinorAxis) {
this.semiMinorAxis = semiMinorAxis;
}
/**
*
* @param color
*/
public void setColor(String color) {
this.color = color;
}
}

@ -0,0 +1,40 @@
package middleware;
/**
* HTTP
*/
public class HttpRequest {
private String path;
private String method;
private String headers;
private String body;
public HttpRequest(String path, String method) {
this.path = path;
this.method = method;
}
public String getPath() {
return path;
}
public String getMethod() {
return method;
}
public void setHeaders(String headers) {
this.headers = headers;
}
public String getHeaders() {
return headers;
}
public void setBody(String body) {
this.body = body;
}
public String getBody() {
return body;
}
}

@ -0,0 +1,14 @@
package middleware;
/**
* HTTP
* HTTP
*/
public interface HttpRequestHandler {
/**
* HTTP
* @param request HTTP
* @return HTTP
*/
HttpResponse handle(HttpRequest request);
}

@ -0,0 +1,38 @@
package middleware;
/**
* HTTP
*/
public class HttpResponse {
private int statusCode;
private String headers;
private String body;
public HttpResponse() {
this.statusCode = 200;
}
public int getStatusCode() {
return statusCode;
}
public void setStatusCode(int statusCode) {
this.statusCode = statusCode;
}
public void setHeaders(String headers) {
this.headers = headers;
}
public String getHeaders() {
return headers;
}
public void setBody(String body) {
this.body = body;
}
public String getBody() {
return body;
}
}

@ -0,0 +1,20 @@
package middleware;
/**
*
*
*/
public class LoggingMiddleware extends MiddlewareDecorator {
public LoggingMiddleware(HttpRequestHandler decoratedHandler) {
super(decoratedHandler);
}
@Override
public HttpResponse handle(HttpRequest request) {
System.out.println("Logging request: " + request.getMethod() + " " + request.getPath());
HttpResponse response = super.handle(request);
System.out.println("Logging response status: " + response.getStatusCode());
return response;
}
}

@ -0,0 +1,18 @@
package middleware;
/**
*
* HttpRequestHandlerHttpRequestHandler
*/
public abstract class MiddlewareDecorator implements HttpRequestHandler {
protected HttpRequestHandler decoratedHandler;
public MiddlewareDecorator(HttpRequestHandler decoratedHandler) {
this.decoratedHandler = decoratedHandler;
}
@Override
public HttpResponse handle(HttpRequest request) {
return decoratedHandler.handle(request);
}
}

@ -0,0 +1,49 @@
package advanced;
public class Parent {
private String id;
private String name;
private java.util.List<basic.Student> children;
public Parent() {
this.children = new java.util.ArrayList<>();
}
public Parent(String id, String name) {
this.id = id;
this.name = name;
this.children = new java.util.ArrayList<>();
}
public void addChild(basic.Student student) {
children.add(student);
}
public void removeChild(basic.Student student) {
children.remove(student);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public java.util.List<basic.Student> getChildren() {
return children;
}
public void setChildren(java.util.List<basic.Student> children) {
this.children = children;
}
}

@ -0,0 +1,109 @@
package challenge;
import basic.Shape;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
public class ShapeConversionSystem {
private List<ShapeConverter> converters;
/**
*
*/
public ShapeConversionSystem() {
this.converters = new ArrayList<>();
}
/**
*
* @param converter
*/
public void addConverter(ShapeConverter converter) {
if (converter != null && !converters.contains(converter)) {
converters.add(converter);
}
}
/**
*
* @param converter
* @return truefalse
*/
public boolean removeConverter(ShapeConverter converter) {
return converters.remove(converter);
}
/**
*
* @param sourceShape
* @return
*/
public List<ShapeConverter> findSuitableConverters(Shape sourceShape) {
List<ShapeConverter> suitableConverters = new ArrayList<>();
for (ShapeConverter converter : converters) {
if (converter.canConvert(sourceShape)) {
suitableConverters.add(converter);
}
}
return suitableConverters;
}
/**
* 使
* @param converter 使
* @param sourceShape
* @return null
*/
public Shape convert(ShapeConverter converter, Shape sourceShape) {
if (converter != null && converter.canConvert(sourceShape)) {
return converter.convert(sourceShape);
}
return null;
}
/**
* 使
* @param sourceShape
* @return null
*/
public Shape convert(Shape sourceShape) {
List<ShapeConverter> suitableConverters = findSuitableConverters(sourceShape);
if (!suitableConverters.isEmpty()) {
return suitableConverters.get(0).convert(sourceShape);
}
return null;
}
/**
*
* @return
*/
public List<ShapeConverter> getAllConverters() {
return new ArrayList<>(converters);
}
/**
*
*/
public void displayAvailableConverters() {
System.out.println("===== 可用的图形转换器 =====");
if (converters.isEmpty()) {
System.out.println("暂无可用的转换器");
} else {
for (int i = 0; i < converters.size(); i++) {
System.out.println((i + 1) + ". " + converters.get(i).getConversionDescription());
}
}
System.out.println("=============================");
}
/**
*
*/
public void clearConverters() {
converters.clear();
}
}

@ -0,0 +1,28 @@
package challenge;
import basic.Shape;
/**
*
*/
public interface ShapeConverter {
/**
*
* @param sourceShape
* @return null
*/
Shape convert(Shape sourceShape);
/**
*
* @param sourceShape
* @return truefalse
*/
boolean canConvert(Shape sourceShape);
/**
*
* @return
*/
String getConversionDescription();
}

@ -0,0 +1,50 @@
package advanced;
public class AdvancedStudent {
private int id;
private String name;
private Parent parent;
private java.util.List<basic.Grade> grades;
public AdvancedStudent() {
this.grades = new java.util.ArrayList<>();
}
public AdvancedStudent(int id, String name) {
this.id = id;
this.name = name;
this.grades = new java.util.ArrayList<>();
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Parent getParent() {
return parent;
}
public void setParent(Parent parent) {
this.parent = parent;
}
public java.util.List<basic.Grade> getGrades() {
return grades;
}
public void setGrades(java.util.List<basic.Grade> grades) {
this.grades = grades;
}
}

@ -0,0 +1,49 @@
package advanced;
public class Teacher {
private String id;
private String name;
private java.util.List<ClassRoom> classes;
public Teacher() {
this.classes = new java.util.ArrayList<>();
}
public Teacher(String id, String name) {
this.id = id;
this.name = name;
this.classes = new java.util.ArrayList<>();
}
public void addClass(ClassRoom classRoom) {
classes.add(classRoom);
}
public void removeClass(ClassRoom classRoom) {
classes.remove(classRoom);
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public java.util.List<ClassRoom> getClasses() {
return classes;
}
public void setClasses(java.util.List<ClassRoom> classes) {
this.classes = classes;
}
}
Loading…
Cancel
Save