코드가 Product가 추상적이고 "Product B"가 실제로 "MobileProduct", 과 같이 해당 클래스의 파생물 인스턴스 인 경우에만 코드가 종속성을 숨 깁니다. "그것이 존재하지 않습니다.
공장이 추상적 인 경우 실제로는 제품을 생산할 수있는 여러 가지 방법을 숨 깁니다. 예를 들어 "SqlProductFactory"또는 "InMemoryProductFactory"가있는 경우 그런 다음 제품의 저장, 생성 또는 원본에 대한 의존성을 숨 깁니다.
날씨가 좋든 없든간에 공장은 설계에 좋든 그렇지 않든간에 문제는 매우 다르며 해결 방법은 무엇입니까? 예를 들어 큰 API 또는 라이브러리를 작성하는 경우 소비자가 알 필요가없는 일부 종속성을 숨길 수 있습니다. 그러나 "Hello World"또는 "FizzBuzz"만 해결하면 클래스는 필요하지 않습니다. 공장은 말할 것도 없습니다.
질문에 대한 답변을 보려면 코드가 종속성을 숨기고 있습니까? 좋은 디자인인가요? 두 경우 모두 그것은 현재의 문제에 달려 있습니다. 여기
EnemyBase {
int Hitpoints;
int Damage;
void Speak();
}
EasyEnemy : EnemyBase {
public int Hitpoints = 100;
public int Damage = 20;
private string Name = "EZGuy";
public void Speak(){
print this.Name + ": I shall destroy you!";
}
}
HardEnemy : EnemyBase {
public int Hitpoints = 200;
public int Damage = 40;
private string Name = "Da hard1";
public void Speak(){
print this.Name + ": Your days are numbered!";
}{
}
EnemyFactory {
private int EnemiesProduced = 0;
public EnemyBase getEnemy(){
if(IsOdd(++this.EnemiesProduced)){
return new EasyEnemy();
} else {
return new HardEnemy();
}
}
}
Game {
EnemyFactory enemies;
public Game(EnemyFactory factory){
enemies = factory;
}
public void Start(){
EnemyBase e = factory.getEnemy();
}
}
게임 그것은 단지 EnemyBase을 얻기에 대한 관심, HardEnemy 또는 EasyEnemy에 대해 아무것도 알지 못한다. 또한 EnemyBase 클래스가 제공하는 두 가지 공개 필드 및 말하기 메서드에 대해서만 알 수 있습니다. 좋은 일일 수도 있고 그렇지 않을 수도 있습니다. 예를 들어 여기서는 게임을 변경하지 않고 적의 구현을 변경할 수 있습니다. 게임 개발에 관심을 두지 않고 적을 개발하고 게임에 어떤 영향을 미치는지 테스트 해 봅시다.그래서 그것은 정말 좋은 일이 될 수 있습니다. 당신이 일을 더 빨리, 어쩌면 팀간에, 또는 미래의 솔루션을 증명하도록 해봅시다. [
그래서 결론 : 정말 따라 달라집니다 : (말 장난이 또는 구성되지 않을 수 있음)
팩토리는 간접의 추가 계층이며, 그것은이다 - 그러나 또한 복잡성을 완전히 불필요 층일 수있다 종종 불필요한] (https://www.cuttingedge.it/blogs/steven/pivot/entry.php?id=100). – Steven
질문의 목적을 자세히 설명해주십시오. 나는 "네,이 의존성을 숨기지"라고 대답 할 수 있습니다. 그러나 그것이 당신에게 도움이되는지 확신 할 수 없습니다. – R2C2