추상 공장 모델 학습 사례 코드

6283 단어 추상 공장
전재 출처 를 밝 혀 주 십시오:http://blog.csdn.net/droyon/article/details/8684435
추상 적 인 공장 모델: 인 터 페 이 스 를 제공 하여 관련 되 거나 의존 대상 의 가족 을 만 드 는 데 사용 되 며 구체 적 인 유형 을 명확 하 게 밝 힐 필요 가 없다.
추상 적 인 공장 모델 은 고객 이 추상 적 인 인 인 터 페 이 스 를 사용 하여 관련 제품 을 만 들 수 있 도록 허용 하고 실제 생산 된 구체 적 인 제품 이 무엇 인지 알 필요 가 없다.이렇게 하면 고객 은 구체 적 인 제품 에서 결합 을 풀 수 있다.
사례 코드 다운로드
요약: 추상 적 인 공정 모델 은 대상 을 만 드 는 공장 방법 모델 의 집합 으로 볼 수 있다.
추상 적 인 공장 모델 은 같은 방안 의 교체 에 사용 할 수 있다.예 를 들 어 데이터 베이스 전체 방안 의 교체, 데이터 베 이 스 는 데이터 베 이 스 를 만 들 고 데이터 베 이 스 를 삭제 하 며 데이터 베 이 스 를 업데이트 하고 데이터 베 이 스 를 삽입 하 는 등 일련의 조작 을 가지 고 있 습 니 다. access 나 SqlServer 구조 에서 모든 조작 에 대해 다 를 수 있 습 니 다.우 리 는 추상 적 인 공장 방법 을 사용 하여 두 개의 공장 을 실현 할 수 있다. 한 개의 공장 이 상술 한 작업 의 실현 을 완성 하지 않 으 면 우 리 는 그들 을 편리 하 게 교체 할 수 있 고 데이터 뱅 크 의 조작 인터페이스 에 어떠한 영향 도 주지 않 을 것 이다.
제품 의 인 터 페 이 스 를 생산 하 다.
public interface CongeeAttachmentInterface {
	Zhibei createZhibei();
	Xiguan createXiguan();
	String createAdword();
}

구체 적 인 실현:
public class AbstractFactoryA implements CongeeAttachmentInterface{

	@Override
	public Zhibei createZhibei() {
		// TODO Auto-generated method stub
		return new AZhibei();
	}

	@Override
	public Xiguan createXiguan() {
		// TODO Auto-generated method stub
		return new SmallXiguan();
	}

	@Override
	public String createAdword() {
		// TODO Auto-generated method stub
		return "     ";
	}

}
public class AbstractFactoryB implements CongeeAttachmentInterface{

	@Override
	public Zhibei createZhibei() {
		// TODO Auto-generated method stub
		return new BZhibei();
	}

	@Override
	public Xiguan createXiguan() {
		// TODO Auto-generated method stub
		return new BigXiguan();
	}

	@Override
	public String createAdword() {
		// TODO Auto-generated method stub
		return "    ,       ";
	}

}

죽 종류:
public abstract class Congee {
	private String name;
	protected Zhibei zhibei;
	protected Xiguan xiguan;
	protected String adWord;
	protected CongeeAttachmentInterface attachment;
	
	public Congee(String name,CongeeAttachmentInterface atta){
		this.name = name;
		attachment = atta;
		init();
	}
	
	abstract void init();
	
	public void takeCup(){
		System.out.println("    "+zhibei+",       :"+adWord);
		System.out.println("    :"+xiguan);
	}
	public void fillCongee(){
		System.out.println("  "+name);
	}
	public void sell(){
		System.out.println("     ,  :"+getPrice(name)+" ");
	}
	
	private double getPrice(String name){
		if(name.equals("   ")){return 2;}
		if(name.equals("   ")){return 2;}
		if(name.startsWith("   ")){return 2.5;}
		if(name.equals("   ")){return 2.5;}
		return 0;
	}
}

구체 적 인 죽 류 는 팔보죽 이 하나 밖 에 없다.
public class Babaozhou extends Congee{

	public Babaozhou(CongeeAttachmentInterface attach) {
		super("   	",attach);
	}

	@Override
	void init() {
		zhibei = attachment.createZhibei();
		xiguan = attachment.createXiguan();
		adWord = attachment.createAdword();
	}

}

종이 컵 류
public abstract class Zhibei {
	@Override
	public abstract String toString();
}

구체 적 인 종이 컵 류, 공장 A, 공장 B 에서 생산 한
public class AZhibei extends Zhibei{

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "  A     ";
	}

}
public class BZhibei extends Zhibei{

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "  B     ";
	}

}

빨대
public abstract class Xiguan {

	@Override
	public abstract String toString();
	
}
public class BigXiguan extends Xiguan{

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "     ";
	}

}
public class SmallXiguan extends Xiguan{

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "     ";
	}

}

죽 집:
public abstract class CongeeStoreBase {
	public CongeeStoreBase(){
	}
	
	public void buyCongee(String name){
		System.out.println("   :"+name);
		sellCongee(name);
	}
	
	private void sellCongee(String name){
		Congee congee = getCongee(name);
		congee.takeCup();
		congee.fillCongee();
		congee.sell();
	}
	
	protected abstract Congee getCongee(String name);
}
public class CongeeStore extends CongeeStoreBase{
	private CongeeAttachmentInterface atta;
	public CongeeStore(CongeeAttachmentInterface atta){
		this.atta = atta;
	}
	
	public void setAtta(CongeeAttachmentInterface attachment){
		atta = attachment;
	}
	@Override
	protected Congee getCongee(String name) {
		/*if(name.equals("   ")){
			return new Damizhou();
		}else if(name.equals("   ")){
			return new Xiaomizhou();
		}else*/ if(name.equals("   ")){
			return new Babaozhou(atta);
		}/*else {
			return new Congee("null");
		}*/
		return null;
	}

}

Test.java
public class Test {
	public static void main(String args[]){
		//       
		CongeeAttachmentInterface atta1 = new AbstractFactoryA();
		CongeeAttachmentInterface atta2 = new AbstractFactoryB();
		//       
		CongeeStore congeeStore = new CongeeStore(atta1);
		
		//    
		congeeStore.buyCongee("   ");
		//  A       ,           ,        ,    
		congeeStore.setAtta(atta2);
		System.out.println("---------------------------------");
		//    
		congeeStore.buyCongee("   ");
	}
}

테스트 결과:
   :   
      A     ,       :     
    :     
     	
     ,  :2.5 
---------------------------------
   :   
      B     ,       :    ,       
    :     
     	
     ,  :2.5 

요약:
간단 한 공장 은 진정한 디자인 모델 은 아니 지만 간단 한 방법 이 라 고 할 수 있다.
공장 방법 은 계승 을 사용 하여 대상 의 창설 을 하위 클래스 에 위탁 하고 하위 클래스 는 공장 방법 클래스 창설 대상 을 실현 한다.
추상 적 인 공장 사용 대상 의 조합, 대상 의 설립 은 공장 인터페이스 에 노출 되 는 방법 에서 이 루어 진다.
모든 공장 모델 은 응용 프로그램 과 구체 적 인 유형 간 의 의존 을 줄 여 소나무 결합 을 촉진 한다.

좋은 웹페이지 즐겨찾기