面试题答案
一键面试性能优先
当性能优先时,考虑对象创建和内存管理的效率。对于频繁创建销毁的对象,可以使用对象池技术。这里以Circle
形状为例:
- 对象池设计
using System;
using System.Collections.Generic;
public interface Shape
{
void Draw();
}
public class Circle : Shape
{
public void Draw()
{
Console.WriteLine("Drawing a circle.");
}
}
public class ShapeObjectPool
{
private Stack<Circle> circlePool;
public ShapeObjectPool(int initialCount)
{
circlePool = new Stack<Circle>();
for (int i = 0; i < initialCount; i++)
{
circlePool.Push(new Circle());
}
}
public Circle GetCircle()
{
if (circlePool.Count > 0)
{
return circlePool.Pop();
}
return new Circle();
}
public void ReturnCircle(Circle circle)
{
circlePool.Push(circle);
}
}
- 使用示例
class Program
{
static void Main()
{
ShapeObjectPool pool = new ShapeObjectPool(5);
Circle circle1 = pool.GetCircle();
circle1.Draw();
pool.ReturnCircle(circle1);
}
}
这种方式减少了频繁创建和销毁Circle
对象的开销,提高性能。
代码简洁优先
当追求代码简洁时,使用依赖注入和工厂模式可以简化对象的创建和初始化。以创建Rectangle
形状为例:
- 定义形状和接口
public interface Shape {
void draw();
}
public class Rectangle implements Shape {
@Override
public void draw() {
System.out.println("Drawing a rectangle.");
}
}
- 工厂类
public class ShapeFactory {
public Shape createShape(String shapeType) {
if ("rectangle".equals(shapeType)) {
return new Rectangle();
}
return null;
}
}
- 使用示例
public class Main {
public static void main(String[] args) {
ShapeFactory factory = new ShapeFactory();
Shape rectangle = factory.createShape("rectangle");
if (rectangle != null) {
rectangle.draw();
}
}
}
通过工厂类,可以将对象创建逻辑封装起来,使代码结构更清晰,易于维护和扩展,符合代码简洁优先的需求。