Android 프로 그래 밍 디자인 모델 의 공장 방법 모델 인 스 턴 스 상세 설명

6637 단어
본 고 는 안 드 로 이 드 프로 그래 밍 디자인 모델 의 공장 방법 모델 을 실례 로 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다. 구체 적 으로 는 다음 과 같 습 니 다.
소개
공장 방법 모델 (Factory Pattern) 은 창설 형 디자인 모델 중의 하나 이다.공장 방법 모델 은 구조 가 간단 한 모델 로 우리 가 평소에 개발 하 는 과정 에서 광범 위 하 게 응용 되 었 다. 아마 당신 은 모 를 것 이다. 그러나 당신 은 이미 수 차례 이 모델 을 사용 했다. 예 를 들 어 안 드 로 이 드 중의 Activity 중의 각 생명 주기 방법, onCreate 방법 을 예 로 들 면 공장 방법 으로 볼 수 있다.우 리 는 그 중에서 우리 의 View 를 구성 하고 set ContentView 를 통 해 framework 처리 등 을 되 돌려 줄 수 있 습 니 다. 관련 내용 은 다음 에 말씀 드 리 겠 습 니 다. 먼저 공장 방법 모델 의 정 의 를 보 겠 습 니 다.
정의
대상 을 만 드 는 데 사용 할 인 터 페 이 스 를 정의 하여 하위 클래스 가 어떤 종 류 를 예화 할 지 결정 합 니 다.
3. 장면 사용
복잡 한 대상 을 만 들 필요 가 있 는 곳 에 서 는 공장 방법 모델 을 사용 할 수 있다.복잡 한 대상 은 공장 모델 을 사용 하기에 적합 하 며, new 로 만 든 대상 은 공장 모델 을 사용 하지 않 아 도 된다.
4. 모델 의 간단 한 실현
추상 적 인 제품 종류:

public abstract class Product {
  /**
   *         
   *           
   * */
  public abstract void method();
}


구체 적 인 제품 유형 A:

public class ConcreteProductA extends Product {
  @Override
  public void method() {
    System.out.println("       A");
  }
}


구체 적 인 제품 유형 B:

public class ConcreteProductB extends Product {
  @Override
  public void method() {
    System.out.println("       B");
  }
}


추상 공장 클래스:

public abstract class Factory {
  /**
   *       
   *        
   * 
   * @return        
   * */
  public abstract Product createProduct();
}


구체 적 인 공장 종류:

public class ConcreteFactory extends Factory {
  /**
   *      
   * */
  @Override
  public Product createProduct() {
    return new ConcreteProductA();
  }
}


클 라 이언 트 클래스:

public class Client {
  public static void main(String[] args) {
    Factory factory = new ConcreteFactory();
    Product product = factory.createProduct();
    product.method();
  }
}


결과:

       A


이곳 의 몇 가지 역할 은 모두 간단 하 다. 주로 4 대 모듈 로 나 뉘 는데 하 나 는 추상 적 인 공장 이 고 공장 방법 모델 의 핵심 이다.둘째, 구체 적 인 공장 으로 구체 적 인 업무 논 리 를 실현 했다.셋째, 추상 적 인 제품 으로 공장 방법 모델 이 만 든 제품 의 부류 이다.넷 째, 구체 적 인 제품 으로 추상 적 인 제품 을 실현 하기 위 한 구체 적 인 제품 의 대상 이다.
상기 코드 에서 우 리 는 Client 류 에서 공장 대상 을 구 축 했 고 이 를 통 해 제품 대상 을 생산 했다. 여기 서 우리 가 얻 은 제품 대상 은 ConcreteProductA 의 실례 이다. 만약 에 ConcreteProductB 의 실례 를 얻 으 려 면 ConcreteFactory 의 논 리 를 바 꾸 면 된다.

public class ConcreteFactory extends Factory {
  /**
   *      
   * */
  @Override
  public Product createProduct() {
    //return new ConcreteProductA();
    return new ConcreteProductB();
  }
}


이런 방식 은 흔히 볼 수 있 습 니 다. 어떤 제품 이 필요 하면 어느 제품 을 생산 합 니까? 가끔 은 반사 방식 으로 구체 적 인 제품 대상 을 더욱 간결 하 게 생산 할 수 있 습 니 다. 이때 공장 방법의 매개 변수 목록 에 Class 류 를 입력 하여 어떤 제품 류 인지 결정 해 야 합 니 다.

public abstract class Factory {
  /**
   *       
   *        
   * 
   * @param clz        
   * 
   * @return        
   * */
  public abstract  T createProduct(Class clz);
}


구체 적 인 공장 류 에 대해 서 는 반사 획득 류 의 예 를 들 면 된다.

public class ConcreteFactory extends Factory {
  /**
   *      
   * */
  @SuppressWarnings("unchecked")
  @Override
  public  T createProduct(Class clz) {
    Product product = null;
    try {
      product = (Product) Class.forName(clz.getName()).newInstance();
    } catch (Exception e) {
      e.printStackTrace();
    }
    return (T)product;
  }
}


마지막 으로 클 라 이언 트 의 실현 을 살 펴 보 겠 습 니 다.

public class Client {
  public static void main(String[] args) {
    Factory factory = new ConcreteFactory();
    Product product = factory.createProduct(ConcreteProductB.class);
    product.method();
  }
}


어떤 유형의 대상 이 필요 하면 어떤 유형의 유형 에 들 어가 면 된다. 이런 방법 은 비교적 간결 하고 동태 적 이다. 만약 에 이런 방식 을 좋아 하지 않 는 다 면 모든 제품 에 구체 적 인 공장 을 정의 하고 각자 의 직책 을 맡 도록 시도 할 수 있다.

public class ConcreteFactoryA extends Factory {
  /**
   *      
   **/
  @Override
  public Product createProduct() {
    return new ConcreteProductA();
  }
}
public class ConcreteFactoryB extends Factory {
  /**
   *      
   **/
  @Override
  public Product createProduct() {
    return new ConcreteProductB();
  }
}
public class Client {
  public static void main(String[] args) {
    Factory factoryA = new ConcreteFactoryA();
    Product productA = factoryA.createProduct();
    productA.method();
    Factory factoryB = new ConcreteFactoryB();
    Product productB = factoryB.createProduct();
    productB.method();
  }
}


이렇게 여러 개의 공장 을 가 진 방식 을 우 리 는 다 공장 방법 모델 이 라 고 부른다. 마찬가지 로 우리 최초의 그 공장 방법 모델 로 돌아 가면 우리 의 공장 이 하나 밖 에 없 을 때 우 리 는 공장 에 추상 적 인 유형 을 제공 했다. 그러면 우 리 는 이 를 간소화 할 수 있 을 까?만약 에 당신 의 공장 류 가 하나 밖 에 없다 고 확정 하면 추상 류 를 간소화 하 는 것 은 문제 가 없 을 것 입 니 다. 우 리 는 해당 하 는 공장 방법 을 정태 적 인 방법 으로 바 꾸 면 됩 니 다.

public class Factory {
  /**
   *      
   **/
  @Override
  public static Product createProduct() {
    return new ConcreteProductA();
  }
}


이런 방식 은 간단 한 공장 모델 이나 정태 적 인 공장 모델 이 라 고도 부 르 는데 이것 은 공장 방법 모델 의 약화 버 전 이다.
사실은 여기 서 공장 방법 모델 은 디자인 원칙 에 완전히 부합 되 고 대상 간 의 결합 도 를 낮 춘 다 는 것 을 알 수 있 을 것 이다. 또한 공장 방법 모델 은 추상 적 인 구조 에 의존 하고 사례 화 된 임 무 를 하위 류 에 맡 겨 완성 하 며 매우 좋 은 확장 성 을 가진다.
5. Android 소스 코드 의 공장 방법 모델
Activity 의 각종 생명주기
Array List 와 HashSet
총화
장점:
공장 방법 모델 은 설계 원칙 에 완전히 부합 되 어 대상 간 의 결합 을 낮 추 었 다.고 층 모듈 은 제품 의 추상 류 만 알 아야 하고 다른 실현 은 관심 을 가 질 필요 가 없다.
양호 한 포장 성, 코드 구조 가 뚜렷 하 다.확장 성 이 좋다.
단점:
우리 가 공장 방법 모델 에 새로운 제품 을 추가 할 때마다 새로운 제품 류 를 만들어 야 한다.또한 추상 층 을 도입 해 야 한다. 이것 은 반드시 유형 구조의 복잡 화 를 초래 할 수 있 기 때문에 어떤 상황 이 비교적 간단 할 때 공장 모델 을 사용 해 야 하 는 지 여 부 는 디자이너 가 이해득실 을 따 져 봐 야 한다.
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,,,,,,,,, 등 을 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기