초보자를 위한 Java 디자인 패턴에 대한 참고 사항 - 팩토리 패턴(계속)

팩토리 패턴을 사용하면 객체 생성 프로세스와 객체 사용을 분리(즉, 디커플링)할 수 있으므로 객체 생성 프로세스의 캡슐화를 촉진할 수 있습니다.

이전 기사 초보자를 위한 Java 디자인 패턴 학습에 대한 참고 사항 - 팩토리 패턴의 예제 14를 검토할 때 다음과 같은 질문이 있을 수 있습니다.

 

추상적인 제품 클래스를 갖는 이유는 무엇입니까?

팩토리 메소드가 추상 제품 클래스 유형을 반환하는 이유는 무엇입니까?

클라이언트가 호출할 때 제품 클래스 객체도 추상 제품 클래스를 통해 정의되는 이유는 무엇입니까?

 

이는 팩토리 패턴에서 제품 클래스의 다형성 입니다 .

 

특정 제품 클래스는 추상 제품 클래스를 상속(또는 구현)하므로 클라이언트는 특정 제품의 실제 유형을 알 필요가 없으며 원하는 제품을 얻을 수 있습니다.

이러한 다형성은 팩토리 패턴의 캡슐화 효과를 촉진하며, 팩토리 클래스는 어떤 제품이 생성될지, 어떻게 제품 객체를 생성할지에 대한 세부 사항을 완벽하게 캡슐화합니다.

 

현실 세계를 통한 다형성 이해:

A고객님은 원래 아우디 A6를 구매하려고 했으나, 제조사에서 우연히 아우디 A8의 신모델을 생산하게 되었고, 아우디 A6는 단종되었으며 가격은 거의 같았습니다. 그래서 고객 A는 주문을 변경하여 아우디 A8을 구입했습니다.

그런 다음 예제 1을 기반으로 새로운 특정 제품 클래스 AudiA8Car를 추가한 다음 팩토리 클래스 CarFactory를 수정하기만 하면 됩니다.

예시 5:

 

Audi A8(특정 제품 역할):

FAW-Volkswagen이 생산한 신차라는 새로운 특정 제품 카테고리가 추가되었습니다.

/*
 * 奥迪A8,是一汽大众生产的一款汽车 (具体产品类)
 */
public class AudiA8Car extends Car {
	
	public AudiA8Car(){
		this.name = "奥迪A8";
		
	}
	
	public String toString(){
		return "一辆"+ this.name;
	}

}

 

FAW-폭스바겐(공장 역할):

정적 팩토리 메소드인 ManufacturerCar()가 수정되었습니다. 원래는 AudiA6Car 객체를 반환했지만 이제는 AudiA8Car 객체를 반환합니다 .

/*
 * 生产汽车的工厂,一汽大众 (工厂类)
 */
public class CarFactory {

	/*
	 * 生产汽车(通过一个静态方法来得到一辆汽车的对象)
	 */
	public static Car manufactureCar(){

//		奥迪A6停产了
//		return new AudiA6Car();
		
//		新款汽车奥迪A8
		return new AudiA8Car();
	}

}

 

자동차(추상적인 제품 역할):

예제 1과 동일하며 변경 사항이 없습니다.

/*
 * 奥迪A6,是一汽大众生产的一款汽车 (具体产品类)
 */
public class AudiA6Car extends Car {
	
	public AudiA6Car(){
		this.name = "奥迪A6";
		
	}
	
	public String toString(){
		return "一辆"+ this.name;
	}

}

 

이 Audi A6 차량을 구매한 고객 A(클라이언트): 

또한 변경사항 없이 예제 1과 동일합니다.

/*
 * 购买汽车的顾客A(客户端)
 */
public class CustomerA {
	
	public static void main(String[] args){
		
//		通过汽车工厂来制造出了一辆汽车
		Car myCar = CarFactory.manufactureCar();
		System.out.println("一辆汽车被造好,并且出厂了。");
		
//		顾客得到了一辆汽车,十分的高兴
		System.out.println("我终于买了"+myCar+"。真是太好了!");
	}

}

 

 

작업 결과:

一辆汽车被造好,并且出厂了。
我终于买了一辆奥迪A8。真是太好了!

 

위의 실행 결과에 따르면 이 다형성의 이점을 확인할 수 있습니다.

캡슐화 효과가 향상되고 클라이언트는 변경 사항 없이 요구사항 변경을 실현할 수 있습니다.

 

 

일반적으로,

팩토리 패턴은 디커플링과 다형성을 통해 객체 생성과 사용을 분리하고 복잡한 객체 생성 프로세스를 캡슐화하며 객체 사용을 통합합니다.

이는 코드 유지 관리 및 수정에 도움이 되므로 코드가 요구 사항 변경에 더 쉽게 적응하고 이러한 변경이 시스템에 미치는 영향을 줄일 수 있습니다.

추천

출처blog.csdn.net/louis_lee7812/article/details/83764262