2013-12-20 2 views
7

나는 이런 식으로 사용되는 코드를 생성하는 좋은 방법인지 궁금하네요 : 여기 하나의 메소드로 클래스를 생성하는 것이 적절합니까?

new TemplateProcessor(inputStream).processTemplate("output-path.xhtml"); 

는 TemplateProcessor 만 하나의 공용 방법가 포함되어 있습니다. 위의 코드는 정적 메서드로 표현할 수 있지만이를 피하고 싶습니다. 그 이유는 간단합니다. 객체는 캡슐화 된 상태를 포함 할 수 있습니다 (어쩌면 지금은 어쩌면). 친애하는 전문가 여러분,이 경우 무엇을 선호하십니까?

+3

:

더욱 두드러 그 분리가,가 아닌 instantiatable 유틸리티 클래스 인 TemplateProcessorFacade처럼, 형제 클래스에 정적 메서드를 추가 할 수 있도록하려면 클래스는가는 길인 것처럼 보인다. 유틸리티 정적 메서드는 상태가 옮겨지지 않을 때만 좋은 방법으로 보입니다. – skiwi

+1

미래 증명 코드가 좋은 코드입니다 – Bathsheba

+1

@skiwi DI/IoC를 사용하기 시작한 이래로 정적 메소드가 좋지 않은 것처럼 보입니다.:> – user2864740

답변

2

사용하기 매우 간단하게 고정 수입으로, 정적 메서드의 코드를 캡슐화하는 것이 합리적이다 : 수,

processTemplate(inputStream, "output-path.xhtml"); 

위의 정적 방법은 단지 외관 될 것 편리한 메소드을 그 특정 사용 사례에 사용되어 클래스가 해결되고 있다고 가정합니다. 일반적으로 매우 일반적입니다. 클래스를 진화 시키거나 상태를 추가하는 것을 방해하지 않습니다. 보다 특수화 된 사용 사례의 경우, 소비자는 여전히 클래스의 인스턴스를 생성하고 평소대로 메소드를 사용할 수 있습니다. 객체가 상태를 수행하는 경우 다음,

public final class TemplateProcessorFacade { 
    private TemplateProcessorFacade() {} 
    public static void processTemplate(...) { 
    ... 
    } 
} 
0

클래스는 프로그램에서 핵심 역할 또는 기능을 수행하는 객체 또는 모듈로 간주되어야합니다. 다른 클래스 나 모듈이 수행하지 않는 역할. 예를 들어, sleep(), run() 기능을 제공하는 클래스 Animal을 가질 수 있습니다. 하지만 kill(), hunt() 등 육식 동물 수업을 원할 수도 있습니다. 따라서 Animal의 모든 변수가하는 일을 수행하는 Animal에서 연장하여 Carnivores 클래스를 구현할뿐 아니라 추가로 사냥 및 사냥을 수행 할 수 있습니다.

클래스에 공용 메서드가 하나만있는 경우 디자인에 별도의 모듈로 포함하는 것이 중요한 경우 해당 클래스를 사용하는 것이 좋습니다. 필요한 경우 나중에 확장 할 수 있습니다.

은 또한 당신은, 정적 및 공공의가 그렇게 모든 Animal '을 sleep()run() 기능을 유지할 수 있습니다, 그래서 당신은 별도의 인스턴스를 생성하지 않고, Animal.sleep() 등을 바로 할 수 있습니다. 그러나 roar()과 같은 기능을해서는 안됩니다.

업데이트 : 내가 말한 이유, sleep()run() 정적이 될 수있다, 또한 자고 실행 클래스 Man있을 수 있습니다.

질문

물어 :

는 의미는 sleep()run() 또는 그 클래스의 객체를 초기화하지 않고 클래스의 함수를 호출 할 수 있도록 하는가? 그렇다면 정적으로 만드는 것이 좋습니다.

+0

의 코멘트를 증명한다고 생각합니다. 마지막 문장은 나에게 불분명하다. 정적 메소드를 여기에서 만드는 이유는 무엇입니까? 모든 Animal은 sleep()과 run()으로 모두 Animal을 상속받습니다. – dazu

+0

@ dazu 업데이트 된 답변에서 설명했습니다. –

관련 문제