만 들 기 (Builder) 모드 [만 들 기 모드 6 편]

건설 (빌 더) 모드
건설 모드 는 대상 의 생 성 모드 입 니 다.
제품 의 내부 표상: 한 제품 은 항상 서로 다른 구성 성분 을 제품 의 부품 으로 하 는데 이런 부품 들 은 대상 일 수도 있 고 대상 이 아 닐 수도 있다. 그들 은 보통 제품 의 내부 표상 이 라 고 부른다.
캐릭터:
1. 추상 적 인 건축 자 역할: 추상 적 인 인 터 페 이 스 를 제시 하여 제품 대상 의 각 구성 성분 의 건설 을 규범화 시킨다.일반적으로 부품 이 있 는 만큼 만 드 는 방법 이 있다.
2. 구체 적 인 건설 자 역할: 이 역할 을 맡 은 것 은 응용 프로그램 과 밀접 한 관 계 를 가 진 일부 유형 으로 응용 프로그램의 호출 에 따라 제품 의 인 스 턴 스 를 만 드 는 것 이다.
이 캐릭터 가 완성 한 인물 은 다음 과 같다.
1) 추상 적 인 건설 자 Builder 가 설명 한 인 터 페 이 스 를 실현 하고 제품 인 스 턴 스 를 만 드 는 작업 을 한 걸음 한 걸음 완성 합 니 다.
2) 건설 과정 완료 후 제품 의 인 스 턴 스 제공
3. 감독자 역할: 이 역할 을 맡 은 유형 은 구체 적 인 건축 자 역할 로 제품 대상 을 만든다.감독자 역할 은 제품 류 의 구체 적 인 지식 이 없고 진정 으로 제품 류 를 가지 고 있다.
구체 적 인 지식 은 구체 적 인 건설 자 역할 이다.
4. 제품 역할: 제품 은 바로 건축 중의 복잡 한 대상 이다.일반적으로 한 시스템 에 하나 이상 의 제품 류 가 있 을 수 있 으 며, 이러한 제품 류 는 반드시 공 통 된 인터페이스 가 있 는 것 은 아니다.
상관 하고 싶 지 않 을 수도 있 습 니 다.
(감독자 역할 은 클 라 이언 트 와 접촉 하 는 역할)
일반 류 는 제품 류 가 하나 도 없 으 면 해당 하 는 구체 적 인 건축 자 류 가 있다 고 말한다.

public class Driector{
			private Builder builder;
			
			//      ,            
			public void construct(){
				builder = new ConcreteBuilder();
				builder.buildPart1();
				builder.buildPart2();
				builder.retrieveResult();		//retrieve  
			}
		}
		
		//     
		public abstract class Builder{
			//        
			public abstract void buildPart1();
			
			public abstract void buildPart2();
			
			//      
			public abstract Product retrieveResult();
		}
		
		//     
		public class ConcreteBuilder extends Builder{
			private Product product = new Product();
			
			//      
			public Product retrieveResult(){
				return product;
			}
			
			//        
			public void buildPart1(){
				//build the first part of the product
			}
			
			public void buildPart2(){
				//build the second part of the product
			}	
		}
		
		//   
		public class Product{
			//...................
		}
		//          
		//     
		public class Client{
			private static Builder builder;
			
			public static void main(String args[]){
				//       
				builder = new Builder();
				
				//              
				builder.construct();
				
				//                   
				Product product = builder.retrieveResult();	
			}  
		}
		
	      :
		       ,                      ,                     。       
		              ,              ,         
		
		           ,             ,          :
			1、             ,             ,              ;
			2、       ,   Builder         ,                   
			
	                 ,           。            
		
	*      ,                                 ,                     
	      。
	
	               
	import java.util.*;
	import java.io.*;
	import javax.mail.*;
	import javax.mail.internet.*;
	import javax.activation.*;
	
	public class MailSender{
		private static MineMessage message;
		
		public static void main(String args[]){
			//  SMTP     
			String smtpHost = "smtp.mycompany.com";
			//      
			String from = "[email protected]";
			//     
			String to = "[email protected]";
			
			Properties props = new Properties();
			props.put("mail.smtp.host", smtpHost);
			
			Session session = Session.getDefaultInstance(props,null);
			
			try{
				InternetAddress[] address = new InternetAddress(to);
				//  Message  
				message = new MineMessage(session);
				//          
				message.setFrom(new InternetAddress(from));
				//          
				message.setRecipients(Message.RecipientType.TO,address);
				//      
				messgae.setSubject("Hello from Jeff");
				//        
				message.setSentDate(new Date());
				//      
				message.setText("Hello,
How are things going?"); // , Transport.send(message); System.out.println("email has been sent."); }catch(Exception e){ System.out.println(e); } } } /////////////////////////////////////////////////////////////////////////// // public class Director{ Builder builder; public Director(Builder builder){ this.builder = builder; } // , public void construct(String toAddress, String fromAddress){ this.builder.buildSubject(); this.builder.buildBody(); this.builder.buildTo(toAddress); this.builder.buildFrom(fromAddress); this.builder.buildSendDate(); this.builder.sendMessage(); } } // import java.util.Date; public abstract class Builder{ protected AutoMessage msg; public Builder(){} // public abstract void buildSubject(); // public abstract void buildBody(); // public void buildFrom(String from){ msg.setFrom(from); } // public void buildTo(String to){ System.out.println(to); msg.setTo(to); } // public void buildSendDate(){ msg.setSendDate(new Date()); } // , // public void sendMessage(){ msg.send(); } } // public class WelcomeBuilder extends Builder{ private static final String subject = "Welcome to philharmony news group"; public WelcomeBuilder(){ msg = new WelcomeMessage(); } // public void buildSubject(){ msg.setSubject(subject); } public void buildBody(){ String body = "Congratulations for making the choice!"; msg.setBody(body); } // , // public void sendMessage(){ msg.send(); } }

/ / 아래 상황 에서 건조 모드 를 사용 해 야 합 니 다.
1) 생 성 이 필요 한 제품 의 대상 은 복잡 한 내부 구조 가 있다.모든 내부 성분 자 체 는 대상 일 수도 있 고 하나의 대상 (즉 제품 대상) 의 구성 성분 일 수도 있다.
2) 생 성 이 필요 한 제품 대상 의 속성 은 서로 의존한다.301P
3)  대상 을 만 드 는 과정 에서 시스템 의 다른 대상 에 사 용 됩 니 다. 이 대상 들 은 제품 대상 을 만 드 는 과정 에서 쉽게 얻 을 수 없습니다.
건조 모드 사용 효과:
1. 건축 모델 의 사용 으로 인해 제품 의 내부 이미지 가 독립 적 으로 변화 할 수 있다.건설 모드 를 사용 하면 클 라 이언 트 가 제품 내부 구성의 세부 사항 을 알 필요 가 없 게 할 수 있다
2. 모든 Builder 는 상대 적 으로 독립 되 고 다른 Builder 와 무관 합 니 다.
3. 모델 이 만 든 최종 제품 은 통제 하기 쉽다.
건설 모델 과 기타 모델 의 관계
건설 모델 과 추상 적 인 공장 모델 의 차이
1. 추상 적 인 공장 모델 에서 공장 대상 이 호출 될 때마다 완전한 제품 대상 으로 돌아 가 고 클 라 이언 트 가 이 를 결정 할 수 있 습 니 다.
   제품 이 더 크 고 복잡 한 제품 을 구성 할 수도 있 고 그렇지 않 을 수도 있다.건조 류 는 다르다. 그것 은 조금씩 복잡 한 제품 을 만 들 었 고 이 제품 은
   의 조립 과정 은 건설 자 역할 내부 에서 발생 한다.건설 자 모델 의 클 라 이언 트 가 받 은 것 은 완전한 마지막 제품 이다.
2. 다시 말 하면 추상 적 인 공장 모델 과 건축 모델 은 모두 디자인 모델 이지 만 추상 적 인 공장 모델 은 더욱 구체 적 인 기준 에 있다.
   건설 모델 은 더욱 거시적인 잣 대 에 있다.하나의 시스템 은 하나의 건설 모델 과 추상 적 인 공장 모델 의 공장 역할 을 할 수 있다.
   공장 모델 은 서로 다른 제품 족의 부품 으로 돌아 가 고 건설 자 모델 은 그것들 을 조립 한다.
건설 모델 과 전략 모델 의 차이
1. 건축 모델 은 구조 적 으로 전략 모델 에 가깝다. 사실은 건축 모델 은 전략 모델 의 특수 한 상황 이다. 이 두 가지 모델 의 차 이 는 그들의 의도 에 있다.
   다르다건축 모델 은 클 라 이언 트 에 게 새로운 대상 을 조금씩 만 드 는 데 적용 되 고 서로 다른 유형의 구체 적 인 건축 자 역할 은 똑 같은 인 터 페 이 스 를 가지 지만
   그들 이 만 든 대상 은 완전히 다 를 수 있다.전략 모드 의 목적 은 알고리즘 에 추상 적 인 인 터 페 이 스 를 제공 하 는 것 이다.다시 말 하면 구체 적 인 전략 류 는 하 나 를 계산한다.
   법 은 한 대상 에 포장 되 고 서로 다른 구체 적 인 전략 대상 은 일반적인 서비스 에 서로 다른 실현 을 제공한다.
  
건조 모드 와 합성 모드 의 관계
1. 제품 의 대상 은 대상 일 수도 있 고 대상 이 아 닌 대상 의 특정한 구성 성분 일 수도 있다.제품 의 부품 이 확실히 대상 이 되면 제품 의 대상 이 된다.
   복합 대상 은 제품 내부 에 하위 대상 이 포함 되 어 있 기 때문이다.이 대상 에는 하위 대상 의 구조 가 포함 되 어 있어 합성 모드 로 설명 할 수 있다.
2. 다시 말 하면 합성 모델 은 대상 나무의 구성 구 조 를 묘 사 했 고 건축 모델 은 대상 나무의 생 성 과정 을 묘사 할 수 있다.
'1, 2, 3, 4, 5, 6, 7, 8, 90' 은 고대 여자 가 마음 에 드 는 사람 에 게 쓴 연애시 로 의미 가 있다.
"헤 어 진 후에 두 곳 은 서로 그리워 하고 삼월 의 복숭아꽃 은 물 을 따라 돌 며 사월 의 비파 가 아직 누 렇 지 않 았 는데 노 예 는 거울 을 보고 싶 지만 마음 이 혼 란 스 러 웠 습 니 다."
"오월 의 석 류 는 불 처럼 붉 고, 한사코 찬 비 를 만 나 꽃 에 물 을 주 었 다. 6 월 복날 사람들 은 뜨 거 운 부채질 을 하 며 나 만 추 웠 다. 칠현금 은 마음 이 없 었 다."
"팔 행 서 는 전 할 곳 이 없고 9 연쇄 가 끊 기 고 십 리 장정 이 눈 이 빠 질 것 같 습 니 다."
이것 은 몇 달 동안 의 그리움 을 점차 완성 하 는 과정 이다.

좋은 웹페이지 즐겨찾기