나중에 여러 사람들이 사용할 수있는 라이브러리를 만들고 있습니다.클래스를 작성하는 방법 : 특정 (고유 한) 필드가있는 객체 하나만 만들 수 있습니다!
class WrapperMoveable
{
IMoveable moveable;
public WrapperMoveable(IMoveable moveable)
{
this.moveable = moveable;
}
}
문제 : WrapperMoveable 클래스를 편집하여 특정 IMoveable이있는 특정 개체가 존재할 수 있는지 확인하는 방법입니다. 누군가가 일부 인터페이스로 랩퍼 오브젝트를 작성하려고 시도하고 해당 인터페이스를 가진 랩퍼 클래스가이 L 존재하면 mechanizm은 기존 랩퍼 오브젝트를 리턴해야합니다.
몇 가지 해결책이 있지만 먼저 문제에 대해 먼저 생각해보십시오.
솔루션 :
는 생성 된 모든 래퍼 객체를 포함하는 래퍼 클래스의 정적 필드를 만듭니다.
class WrapperMoveable { IMoveable moveable; static List<WrapperMoveable> createdWrappers = new List<WrapperMoveable>(); private WrapperMoveable(IMoveable moveable) { this.moveable = moveable; } public static WrapperMoveable CreateWrapper(IMoveable moveable) { if (createdWrappers.Any(e => e.moveable == moveable)) return createdWrappers.First(e => e.moveable == moveable); WrapperMoveable newWrapper = new WrapperMoveable(moveable); createdWrappers.Add(newWrapper); return newWrapper; } }
이 방법은 프로그래머가 새로운 키워드를 사용하여 normaly 개체를 만들 수 없다는 점에서 문제가 있습니다. 따라서 프로그래머는 정적 메서드로만 객체를 만들 수 있다는 것을 알아야합니다. 또한 참조가 항상 createdWrappers에 존재하므로 garbridge 수집기는 객체를 해제하지 않습니다.
래퍼 클래스를 만드는 WrapperFactory 클래스를 만듭니다. 이전 예에서 proggramer는 래퍼 객체를 생성하는 방법을 알고 있어야합니다. 이 솔루션에서는 팩토리 클래스를 사용합니다.
- WrapperMoveable 유형의 메모리에있는 모든 객체를 스캔하고 객체에 제공된 인터페이스가 있는지 확인하십시오.
이 문제의 해결책은 무엇입니까? 당신 자신의 더 나은 해결책이 있습니까?
게시물의 몸체를 읽어주세요. – MaciejLisCK
정적 인 int = 0을 만들 것입니다. 참조 카운트로 사용하십시오. 카운트가 newwrapper가 이미 생성되었다고 표시되면 다른 사람이 그것을 작성합니다. 네가 뭘 할거야? – Steve