«design-patterns» 태그된 질문

디자인 패턴은 소프트웨어 디자인에서 일반적으로 발생하는 문제에 대한 일반적인 재사용 가능한 솔루션입니다.

5
전략 패턴과 의존성 주입을 사용하여 상속을 완전히 대체 할 수 있습니까?
예를 들면 다음과 같습니다. var duckBehaviors = new Duckbehavior(); duckBehaviors.quackBehavior = new Quack(); duckBehaviors.flyBehavior = new FlyWithWings(); Duck mallardDuck = new Duck(DuckTypes.MallardDuck, duckBehaviors) Duck 클래스에는 모든 비헤이비어 (추상)가 포함되어 있으므로 새 클래스를 만드는 MallardDuck(확장 Duck) 필요하지 않은 것 같습니다. 참조 : 헤드 퍼스트 디자인 패턴, 1 장.

6
Dependency Injection에 대한 최상의 정의는 무엇입니까?
누군가 나에게 다가 가서 개념적 방식으로 Dependency Injection을 정의하고 소프트웨어 디자인에서 DI를 사용하는 실제 장단점을 설명하도록 요청할 때마다. 나는 DI의 개념을 설명하기가 어렵다고 고백합니다. 나는 그들에게 단일 책임 원칙, 상속에 대한 구성 등에 관한 역사를 말할 필요가있을 때마다. 누구나 개발자를 위해 DI를 설명하는 가장 좋은 방법을 설명하는 데 도움을 줄 …

4
함수를 호출하는이 방법이 나쁜 습관입니까?
다음 코드가 있습니다. public void moveCameraTo(Location location){ moveCameraTo(location.getLatitude(), location.getLongitude()); } public void moveCameraTo(double latitude, double longitude){ LatLng latLng = new LatLng(latitude, longitude); moveCameraTo(latLng); } public void moveCameraTo(LatLng latLng){ GoogleMap googleMap = getGoogleMap(); cameraUpdate = CameraUpdateFactory.newLatLngZoom(latLng, INITIAL_MAP_ZOOM_LEVEL); googleMap.moveCamera(cameraUpdate); } 나는 이런 식 LatLng으로 다른 수업에 무엇이 있는지 아는 책임을 제거한다고 생각합니다 …

4
“조기 추상화”란 무엇입니까?
나는 문구가 arround에 던져지는 것을 들었고 나에게 논쟁은 완전히 미친 소리로 들린다. (여기서 내가 밀짚을 치고 있다면 미안하지만 내 의도는 아니다) 일반적인 경우가 무엇인지 알기 전에 추상화를 생성하고 싶지 않습니다. 그렇지 않으면 (1) 속하지 않은 추상화에 포함하거나 (2) 중요한 것을 생략 할 수 있습니다. (1) 나에게 이것은 프로그래머가 실용적이지 않은 …

2
경보 시스템 아키텍처
다양한 프로그램의 경고 메시지를 처리하고 전자 메일을 통해 소비자에게 바람을 불어 넣을 수있는 시스템을 만들고 싶습니다. 이것은 모두 하나의 내부 네트워크를 통해 포함됩니다. 기본 아키텍처가 다음과 같이 보이기를 원합니다. 내가 현재 가지고있는 주요 관심사는 "메시지 처리기"비트인데, 이는 "API 정렬"입니다. 이 시스템의 모든 구성 요소가 데이터베이스에 대한 모든 쓰기를 처리하는 API로 …

6
똑같이 차선책으로 디자인을 반복적으로 피하는 방법은 무엇입니까?
그래서 아마도 많은 사람들처럼, 나는 종종 문제를 직감적으로 맞추고 원하는 이점을 갖는 디자인 패턴 / 접근법이있는 디자인 문제로 두통을 겪고 있습니다. 종종 어떤 종류의 작업없이 패턴 / 접근을 구현하기 어렵게 만드는 몇 가지주의 사항이있어 패턴 / 접근의 이점을 무효화합니다. 거의 모든 패턴 / 접근 방식을 반복하는 것은 매우 쉬운 일이 …

4
컴파일러는 정확히 유형 오류를 어떻게 복구합니까?
필자는 컴파일러의 기본 원리, 기술 및 도구 (제 2 판) ( 제 2 판)의 여러 문서, 기사 및 4.1.4 절 (제 2 판) (일명 "드래곤 북 (Dragon Book)")을 읽었으며 구문 컴파일러 오류 복구 주제에 대해 설명했다. 그러나 현대의 여러 컴파일러를 실험 한 결과 시맨틱 오류뿐만 아니라 구문 오류 도 복구 …

5
LSP를 위반해도 괜찮습니까?
이 질문 에 후속 조치를 취하고 있지만 코드에서 원칙으로 초점을 전환하고 있습니다. 의 나의 이해에서 Liskov 대체 원칙 방법은 내 기본 클래스에있는 어떤 (LSP), 그들은 내 서브 클래스에서 구현되어야하며,에 따라 이 페이지는 기본 클래스의 메소드를 오버라이드 (override)하는 경우 그것은 아무것도하지 않는다 또는를 던졌습니다 예외, 당신은 원칙을 위반합니다. 이제 내 문제는 …

5
유사한 기능에 다른 패턴 사용
저는 다른 소프트웨어 프로젝트와 마찬가지로 향후 다른 사람이 사용할 수있는 프로젝트의 유일한 개발자입니다. 기능 A를 구현하기 위해 패턴 X를 사용했다고 가정 해 봅시다. 기능을 개발하고 마무리 한 후에 방금 배운 패턴 Y를 사용하여 동일한 기능을 구현할 수 있다는 것을 알게되었습니다. 그러나 기능 A는 훌륭하게 작동하며 X에서 Y로 리팩토링하는 데 시간이 …

4
Java : setter 순서가 중요하지 않은 단계 작성기를 구현하는 방법은 무엇입니까?
편집 : 이 질문은 이론적 문제를 설명하고 싶습니다. 필수 매개 변수에 생성자 인수를 사용하거나 API가 잘못 사용되면 런타임 예외가 발생할 수 있음을 알고 있습니다. 그러나 생성자 인수 또는 런타임 검사가 필요 없는 솔루션을 찾고 있습니다. 다음 Car과 같은 인터페이스 가 있다고 상상해보십시오 . public interface Car { public Engine getEngine(); …

3
느슨하게 결합 된 코드에 인터페이스 사용
배경 특정 유형의 하드웨어 장치의 사용에 의존하는 프로젝트가 있지만 필요한 작업을 수행하는 한 누가 하드웨어 장치를 만드는지는 중요하지 않습니다. 그렇게 말하면, 같은 일을하도록되어있는 두 장치조차도 같은 제조업체가 만들지 않으면 차이가있을 것입니다. 따라서 인터페이스를 사용하여 응용 프로그램을 관련된 특정 제조업체 / 모델 과 분리 하고 대신 인터페이스가 최상위 기능을 다루도록 하려고 …

5
컴파일 타임 값 매개 변수를 사용하여 Java 클래스 생성
클래스가 동일한 기본 동작, 메소드 등을 구현하지만 해당 클래스의 여러 버전이 다른 용도로 존재할 수있는 상황을 고려하십시오. 내 특별한 경우에는 벡터 (목록이 아닌 기하학적 벡터)가 있고 그 벡터는 모든 N 차원 유클리드 공간 (1 차원, 2 차원, ...)에 적용될 수 있습니다. 이 클래스 / 타입을 어떻게 정의 할 수 있습니까? …

3
인수가 많은 생성자를 피하십시오
그래서 다른 클래스의 객체를 만드는 팩토리가 있습니다. 가능한 클래스는 모두 추상 조상에서 파생됩니다. 팩토리에는 구성 파일 (JSON 구문)이 있으며 사용자 구성에 따라 작성할 클래스를 결정합니다. 이를 위해 팩토리는 JSON 구문 분석에 boost :: property_tree를 사용합니다. 그는 ptree를 통해 어떤 콘크리트 객체를 만들지 결정합니다. 그러나 product-objects에는 많은 필드 (속성)가 있습니다. 구체적인 …

3
다 대다 관계를 관리하기위한 디자인 패턴이 있습니까?
이 데이터 패턴을 정의하는 데 문제가 있습니다. 여러 응용 프로그램에서 작업했습니다. 다음으로 구성됩니다. 많은 객체 자체로 구성된 객체 유형 두 번째 객체 유형으로, 각 인스턴스에는 첫 번째 객체가 '많이 있습니다' 또한, 제 1 객체의 각 서브 객체는 제 2 객체 유형에 대한 각 연관마다 수정 가능하다. 간단한 예는 다음과 같습니다. …

4
클래스의 복잡성 감소
몇 가지 답변 을보고 Google에서 검색했지만 유용한 정보를 찾을 수 없었습니다 (예 : 불편한 부작용이 없음). 내 문제는 요약하자면, 나는 객체가 있고 그것에 대해 긴 일련의 작업 을 수행해야한다는 것입니다. 차를 만드는 것과 같은 일종의 조립 라인이라고 생각합니다. 이러한 객체는 Method Objects 라고 합니다 . 따라서이 예제에서는 어느 시점에서 installWithSeat, …

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.