MST

星途 面试题库

面试题:Go接口初始化方式在不同场景下的应用选择

假设你正在开发一个图形绘制库,其中有一个`Shape`接口,包含`Draw`方法。有圆形、矩形等多种形状实现该接口。在实际场景中,根据不同的需求(例如性能优先、代码简洁优先等),如何选择合适的接口初始化方式?请结合示例代码说明。
29.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

性能优先

当性能优先时,考虑对象创建和内存管理的效率。对于频繁创建销毁的对象,可以使用对象池技术。这里以Circle形状为例:

  1. 对象池设计
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);
    }
}
  1. 使用示例
class Program
{
    static void Main()
    {
        ShapeObjectPool pool = new ShapeObjectPool(5);
        Circle circle1 = pool.GetCircle();
        circle1.Draw();
        pool.ReturnCircle(circle1);
    }
}

这种方式减少了频繁创建和销毁Circle对象的开销,提高性能。

代码简洁优先

当追求代码简洁时,使用依赖注入和工厂模式可以简化对象的创建和初始化。以创建Rectangle形状为例:

  1. 定义形状和接口
public interface Shape {
    void draw();
}

public class Rectangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing a rectangle.");
    }
}
  1. 工厂类
public class ShapeFactory {
    public Shape createShape(String shapeType) {
        if ("rectangle".equals(shapeType)) {
            return new Rectangle();
        }
        return null;
    }
}
  1. 使用示例
public class Main {
    public static void main(String[] args) {
        ShapeFactory factory = new ShapeFactory();
        Shape rectangle = factory.createShape("rectangle");
        if (rectangle != null) {
            rectangle.draw();
        }
    }
}

通过工厂类,可以将对象创建逻辑封装起来,使代码结构更清晰,易于维护和扩展,符合代码简洁优先的需求。