Android 프로 그래 밍 디자인 모델 의 공장 방법 모델 인 스 턴 스 상세 설명
소개
공장 방법 모델 (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
총화
장점:
공장 방법 모델 은 설계 원칙 에 완전히 부합 되 어 대상 간 의 결합 을 낮 추 었 다.고 층 모듈 은 제품 의 추상 류 만 알 아야 하고 다른 실현 은 관심 을 가 질 필요 가 없다.
양호 한 포장 성, 코드 구조 가 뚜렷 하 다.확장 성 이 좋다.
단점:
우리 가 공장 방법 모델 에 새로운 제품 을 추가 할 때마다 새로운 제품 류 를 만들어 야 한다.또한 추상 층 을 도입 해 야 한다. 이것 은 반드시 유형 구조의 복잡 화 를 초래 할 수 있 기 때문에 어떤 상황 이 비교적 간단 할 때 공장 모델 을 사용 해 야 하 는 지 여 부 는 디자이너 가 이해득실 을 따 져 봐 야 한다.
더 많은 안 드 로 이 드 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,,,,,,,,, 등 을 볼 수 있 습 니 다.
본 고 에서 말 한 것 이 여러분 의 안 드 로 이 드 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.