작년에 작성자가 기본 클래스에서 정적 함수를 선언했지만 파생 클래스에 정의 된 일부 소스 코드 (C++)를 보았습니다. 위에서 언급 한 정적 함수를 정의하는 데 오직 하나의 파생 클래스 만 허용된다는 제약이 있음을 기억합니다.정적 메소드 정의가 파생 클래스에 위임되었습니다. (C++)
정적 메서드를 재정의하는 것은 불가능하다는 것을 알고 있지만,이 트릭은 내가 필요한 것입니다. 난 그냥 내 코드에서 작동하게 만들 수 없다 :) 누군가 가이 기능에 대해 알고 있습니까?
왜 이것이 유용할까요? 기본 클래스 (Shape)와 파생 클래스 (Circle, Triangle ...)가 있다고 가정합니다. Shape가 내 핵심 아키텍처의 일부이고 파생 클래스가 플러그인으로 처리된다고 가정 해보십시오. 앞으로 핵심 아키텍처를 변경하고 싶지는 않습니다. 그래서 우리는 가지고있다 :
class Shape
{
//other stuff here
static Shape* Factory();
}
class Circle:Shape
{
//other stuff here
static Shape* Factory();
}
셰이프는 일종의 추상 클래스이며 Factory 메서드를 구현하지 않습니다. 메서드는 파생 클래스 중 하나만 사용하여 구현됩니다. 구현에서 파생 클래스는 자체의 새 인스턴스를 반환하므로 팩토리 메서드에 불과합니다. 이 트릭은 저자가 방법 다음 클라이언트 클래스에서이 정적 메서드를 사용할 수 :
그는 같은 것을했다 생성자의 구현에서class Client
{
public Shape* shape;
public Client();
//other stuff here
}
:
Client::Client()
:shape(Shape::Factory())
{
}
그는 "권리"를 인스턴스화 할 수 있었다이 방법을 엔진에서 핵심 클래스를 변경하지 않고 도형 파생. 코어 클래스에서 다른 모양을 사용하기를 원했을 때 파생 된 클래스에서 정적 팩토리 메서드를 정의하고 다른 파생 클래스에서 기존 팩트를 제거해야했습니다.
이렇게하면 "정적 다형성"이 있습니다. 웹에서이 기술에 대해 아무 것도 없습니다. 그것도 이름이 있습니까? 이와 같은 것이 C# 언어로 구현 될 수 있다면 특별히 관심이 있습니까? :)
미리 감사드립니다. 내 나쁜 영어로 유감스럽게 생각합니다.
당신의 솔루션은 훌륭하지만, 파생 클래스의 구현을 숨기는 것 외에도 기본 클래스와 파생 클래스를 스스로 만들고 싶었습니다. 하지만 분리 된 팩토리 메서드 (기본 셰이프 가져 오기)를 사용하는 방식도 작업을 수행해야한다고 생각합니다. 감사합니다. – Kovasandra