Factory Method

📌템플릿 메소드 패턴을 인스턴스(객체) 생성의 장면에 적용한 것
📌인스턴스를 만드는 방법을 상위 클래스에서 결정-> 구체적인 내용은 하위 클래스에서 수행

예제] 여러 사람의 카드 만들기

클래스 5개

패키지 1 - framework) - 골격 역할 (인스턴스 생성)
🔳 Product class (추상 클래스) : 추상 메소드 use 정의
🔳 Factory class (추상 클래스) : 매소드 create 구현, 추상메소드 createProduct, registerProduct 정의
패키지 2 - idcard ) -구체적 내용 구현 역할
🔳 IDCard class : 메소드 use 구현
🔳 IDCardFactory class : 메소드 createProduct, registerProduct 구현
▪️main class


🌈Product 클래스

제품을 표현하는 클래스
제품: "무엇이든 use 할 수 있는 것 "

package framework;

public abstract class Product{
		public abstract void use(); 

}

🌈Factory 클래스

Template method 패턴이 사용됨
공장 : create 메소드에서 Product의 인스턴스를 생성하는 것
create메소드 : createProduct()에서 구체적 제품을 만들어서 registerProduct()에 등록한다.

package framework;

public abstract class Factory{


	public final Product create(String owner){
    
   		Product p= createProduct(owner); 
    	registerProduct(p); //등록한다 
        return p;
    
    }

	public abstract void registerProduct(); 
	public abstract void createProduct(); 


}

🌈IDCard 클래스

구체적 실행하는 측 = 구체적인 신분증을 만드는
Product클래스를 상속받는다 -> use() 구현

package idcard;
import framework.*; 

public class IDCard extends Product{

	private String name;
    
    IDCard(String owner){
    	System.out.print(owner+"의 신분증을 만듭니다");
    	this.name= name; 
        }
        
        
    public void use(){
    System.out.print(owner+"의 신분증을 사용합니다");
    }    
    
    
    
    public String getOwner(){
    	return owner;
    }
}

🌈IDCardFactory 클래스

카드 주인 목록 (카드 공장)
createProduct(), registerProduct()에 대한 구현
-> 제품을 만드는 일

package idcard;
import framework.*; 
import java.util.*;

public class IDCardFactory extends Factory{
	private List ownerList=new ArrayList(); //등록자들을 모아둔 리스트 
	
	public  void createProduct(String owner){   
   		return new IDCrard(owner) ;  //카드 객체를 만들어서 반환 
        
    }
 
 
 
    public  void registerProduct(Product product){
    	ownerList.add(((IDCard)product).getowner());
        //카드 만든 사람을 리스트에 등록함(add)
    } 
    
    
    
    public List getOwnerList(){  //등록된 리스트를 반환 
    	return OwnerList; 
    }

}

🌈main 클래스


import framework.*; 
import idcard.*;

public class Main{
	public static void main(String[] args){
    
    Factory factory= new IDCardFactory(); 
    
    
    Product p1= factory.create("이순신")  //만들고 등록까지 마치고 
   	Product p1= factory.create("이산신")  
    Product p1= factory.create("이만신")
    Product p1= factory.create("이수신")
          
    p1.use();  //사용 
    p2.use();
    p3.use(); 	
    
    }




}



profile
Why.Not.Now

0개의 댓글

Powered by GraphCDN, the GraphQL CDN