클래스를 확장하고 인터페이스를 구현하는 일반 Java 클래스를 만드는 방법은 무엇입니까?

펠리페로 데

내 안드로이드 프로젝트 구조에서 DDD를 사용하고 있습니다. 일부 도메인에서는 "public class profileBehavior {..}"와 같이이 폴더에 모든 화면 동작을 배치하기 위해 "behavior"라는 새 폴더를 만들어야합니다.

프로젝트 인쇄 : http://tinypic.com/view.php?pic=r1hppi&s=8#.VPDdSlPF_rc

시간이 지남에 따라 재사용을 목표로하는 개선으로 인해 다음과 같은 일반적인 메서드를 사용하여 "genericBehavior"를 만드는 것을 생각하고 있습니다.

public class GenericBehavior {

private static Context context;
private static View view;

public GenericBehavior(Context context) {
    context = context;
}
public GenericBehavior(View view) {
    view = view;
}

public static GenericBehavior with(final Context context) {


    return new GenericBehavior(context);
}

public GenericBehavior where(final View view) {
    return new GenericBehavior(view);
}

profileBehavior 클래스에서 withwhere 메소드를 재사용하여 profileBehavior 컨텍스트 및보기를 설정하고 싶습니다.

처럼:

public class ProfileBehavior extends GenericBehavior {


public ProfileBehavior(Context context) {
    super(context);
}

profileFragment에서 다음과 같이 사용하고 싶습니다.

ProfileBehavior
            .with(getActivity())
            .where(rootView)
            .listenAttachOptions()
            .doScrollStuff();

유형 매개 변수 및 인터페이스에 대해 읽었지만 그것에 대해 정말 혼란 스러웠습니다. 제 경우에는 행동 방식을 복제하거나 이에 대한 해결책이있는 것이 더 낫습니까?

Nir Alfasi

세 가지 방법 (생각할 수있는)이 있습니다.

  1. 기본 클래스를 작성하여 (추상적 일 수있다)와 구현 where()with()이 기본 클래스와이를 확장 할 수 있습니다.
  2. Java 8을 사용하는 경우 기본 메소드 를 얻을 있습니다 ( 인터페이스에서 메소드의 기본 구현을 가질 있음).
  3. 컴포지션 : where()with()(비헤이비어 "기본"개체) 를 구현하는 개체를 만들고 "비헤이비어"클래스의 다른 인스턴스가 이러한 기본 개체의 인스턴스를 전용 멤버로 보유하도록 할 수 있습니다. 이러한 각 클래스는 모든 where()with()호출을이 기본 개체에 위임 합니다.

# 3 구현의 예 :

class BaseBehavior implement Behavior {
    public Behavior with(final Context context) {
        return new BaseBehavior(context);
    }

    public Behavior where(final View view) {
        return new BaseBehavior(view);
    }
}

class AnotherBehavior implement Behavior {
    BaseBehavior base;    

    AnotherBehavior(BaseBehavior base) {
        this.base = base;
    }

    public Behavior with(final Context context) {
        return base.with(context);
    }

    public Behavior where(final View view) {
        return base.with(view);
    }        
}

일반적으로 구성은 상속보다 선호됩니다 (따라서 Java 8을 사용하지 않는 경우-# 1보다 # 3을 사용하는 것이 좋습니다). 몇 가지 이유를들 수 있습니다. 디버그 및 유지 관리가 더 쉬우므로 코드 덜 분리되고 계층 구조가 단순 해지며 하나의 클래스 만 상속 (확장) 할 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Java-인터페이스 메서드를 호출하는 일반 클래스를 만드는 방법은 무엇입니까?

분류에서Dev

클래스에서 확장되고 인터페이스를 구현하는 것을 올바르게 반환하는 방법은 무엇입니까?

분류에서Dev

일반 사전 클래스를 구현하는 방법은 무엇입니까?

분류에서Dev

Java에서 Number 클래스를 확장하고 다른 클래스에서 실행할 수 있도록 일반 인터페이스를 올바르게 제한하는 방법은 무엇입니까?

분류에서Dev

Java-최종 swt 클래스를 확장하는 방법은 무엇입니까? 래퍼 클래스를 만드는 방법은 무엇입니까?

분류에서Dev

클래스 멤버를 사용하여 인터페이스를 구현하는 방법은 무엇입니까?

분류에서Dev

인터페이스를 구현하는 클래스 목록을 얻는 방법은 무엇입니까?

분류에서Dev

Java에서 일반 클래스의 인스턴스를 만드는 방법은 무엇입니까?

분류에서Dev

활동 클래스를 확장하지 않고 Java 클래스의 자산 폴더에서 파일을 읽는 방법은 무엇입니까?

분류에서Dev

인터페이스를 구현하는 기본 클래스에서 파생 된 인스턴스 목록을 만드는 방법은 무엇입니까?

분류에서Dev

Java와의 인터페이스 메커니즘으로 JPype를 사용하여 Python에서 Java 클래스를 확장하는 방법은 무엇입니까?

분류에서Dev

제네릭 유형이 Java에서 다른 클래스 / 인터페이스를 확장하는지 확인하는 방법은 무엇입니까?

분류에서Dev

JAR로 내 보낸 후 JAVA 인터페이스를 다른 클래스에서 "구현"하는 방법은 무엇입니까?

분류에서Dev

Serializable 인터페이스를 모든 하위 클래스로 확장하는 방법은 무엇입니까?

분류에서Dev

데이터 기반 함수로 클래스를 확장하고 컴파일 타임에 확인하는 방법은 무엇입니까?

분류에서Dev

인터페이스의 클래스를 아는 것만으로 인터페이스를 구현하는 클래스의 객체를 메소드에 전달하고 ArrayList에 추가하는 방법은 무엇입니까?

분류에서Dev

일반 클래스 유형으로 Java 메소드를 작성하는 방법은 무엇입니까?

분류에서Dev

Java : 인터페이스 요소로 채워진 데이터 구조-인터페이스를 구현하는 클래스가 compareTo ()를 구현하도록 강제하는 방법은 무엇입니까?

분류에서Dev

이 클래스를 일반화하는 방법은 무엇입니까?

분류에서Dev

일반 인터페이스를 구현하는 클래스에서 "클래스가 인터페이스 멤버를 구현하지 않습니다."오류

분류에서Dev

기본 클래스 (또는 인터페이스)를 동적으로 서브 클래스 (또는 구현)하는 방법은 무엇입니까?

분류에서Dev

java 제네릭-HashSet <T>를 취하는 클래스를 구현하는 방법은 무엇입니까?

분류에서Dev

일반 클래스를 지정하는 방법은 무엇입니까?

분류에서Dev

Java의 다른 클래스에서 start (Stage) 메서드를 구현하는 방법은 무엇입니까?

분류에서Dev

일반 인터페이스를 구현하는 클래스 인스턴스화

분류에서Dev

Java의 추상 클래스에서 인터페이스를 구현하고 스레드를 확장하는 방법

분류에서Dev

동일한 방법,하지만 같은 인터페이스를 구현하지와 클래스의 그룹에 대한 공통 코드를 작성하는 관용적 인 방법은 무엇입니까?

분류에서Dev

__new__를 사용하여 다른 클래스의 인스턴스를 기반으로 클래스를 만드는 방법은 무엇입니까?

분류에서Dev

이 구체적인 클래스를 일반화하는 방법은 무엇입니까?

Related 관련 기사

  1. 1

    Java-인터페이스 메서드를 호출하는 일반 클래스를 만드는 방법은 무엇입니까?

  2. 2

    클래스에서 확장되고 인터페이스를 구현하는 것을 올바르게 반환하는 방법은 무엇입니까?

  3. 3

    일반 사전 클래스를 구현하는 방법은 무엇입니까?

  4. 4

    Java에서 Number 클래스를 확장하고 다른 클래스에서 실행할 수 있도록 일반 인터페이스를 올바르게 제한하는 방법은 무엇입니까?

  5. 5

    Java-최종 swt 클래스를 확장하는 방법은 무엇입니까? 래퍼 클래스를 만드는 방법은 무엇입니까?

  6. 6

    클래스 멤버를 사용하여 인터페이스를 구현하는 방법은 무엇입니까?

  7. 7

    인터페이스를 구현하는 클래스 목록을 얻는 방법은 무엇입니까?

  8. 8

    Java에서 일반 클래스의 인스턴스를 만드는 방법은 무엇입니까?

  9. 9

    활동 클래스를 확장하지 않고 Java 클래스의 자산 폴더에서 파일을 읽는 방법은 무엇입니까?

  10. 10

    인터페이스를 구현하는 기본 클래스에서 파생 된 인스턴스 목록을 만드는 방법은 무엇입니까?

  11. 11

    Java와의 인터페이스 메커니즘으로 JPype를 사용하여 Python에서 Java 클래스를 확장하는 방법은 무엇입니까?

  12. 12

    제네릭 유형이 Java에서 다른 클래스 / 인터페이스를 확장하는지 확인하는 방법은 무엇입니까?

  13. 13

    JAR로 내 보낸 후 JAVA 인터페이스를 다른 클래스에서 "구현"하는 방법은 무엇입니까?

  14. 14

    Serializable 인터페이스를 모든 하위 클래스로 확장하는 방법은 무엇입니까?

  15. 15

    데이터 기반 함수로 클래스를 확장하고 컴파일 타임에 확인하는 방법은 무엇입니까?

  16. 16

    인터페이스의 클래스를 아는 것만으로 인터페이스를 구현하는 클래스의 객체를 메소드에 전달하고 ArrayList에 추가하는 방법은 무엇입니까?

  17. 17

    일반 클래스 유형으로 Java 메소드를 작성하는 방법은 무엇입니까?

  18. 18

    Java : 인터페이스 요소로 채워진 데이터 구조-인터페이스를 구현하는 클래스가 compareTo ()를 구현하도록 강제하는 방법은 무엇입니까?

  19. 19

    이 클래스를 일반화하는 방법은 무엇입니까?

  20. 20

    일반 인터페이스를 구현하는 클래스에서 "클래스가 인터페이스 멤버를 구현하지 않습니다."오류

  21. 21

    기본 클래스 (또는 인터페이스)를 동적으로 서브 클래스 (또는 구현)하는 방법은 무엇입니까?

  22. 22

    java 제네릭-HashSet <T>를 취하는 클래스를 구현하는 방법은 무엇입니까?

  23. 23

    일반 클래스를 지정하는 방법은 무엇입니까?

  24. 24

    Java의 다른 클래스에서 start (Stage) 메서드를 구현하는 방법은 무엇입니까?

  25. 25

    일반 인터페이스를 구현하는 클래스 인스턴스화

  26. 26

    Java의 추상 클래스에서 인터페이스를 구현하고 스레드를 확장하는 방법

  27. 27

    동일한 방법,하지만 같은 인터페이스를 구현하지와 클래스의 그룹에 대한 공통 코드를 작성하는 관용적 인 방법은 무엇입니까?

  28. 28

    __new__를 사용하여 다른 클래스의 인스턴스를 기반으로 클래스를 만드는 방법은 무엇입니까?

  29. 29

    이 구체적인 클래스를 일반화하는 방법은 무엇입니까?

뜨겁다태그

보관