You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
work/ShapeConversionSystem.java

109 lines
3.1 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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 如果移除成功则返回true否则返回false
*/
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();
}
}