04.作成型――作成者モード

3540 ワード

package Create.d.Builder;

//    
public interface Tax {
	void calcTax();
}

  
package Create.d.Builder;

//    
public interface Salary {
	void calcSalary();
}

  
package Create.d.Builder;

//     
public class HeBeiTax implements Tax {

	@Override
	public void calcTax() {
		// TODO Auto-generated method stub
		System.out.println("            !");
	}

}

  
package Create.d.Builder;

//     
public class HeBeiSalary implements Salary {

	@Override
	public void calcSalary() {
		// TODO Auto-generated method stub
		System.out.println("            !");
	}

}

  
package Create.d.Builder;

//     
public class GuangDongTax implements Tax {

	@Override
	public void calcTax() {
		// TODO Auto-generated method stub
		System.out.println("            !");
	}

}

  
package Create.d.Builder;

//     
public class GuangDongSalary implements Salary {

	@Override
	public void calcSalary() {
		// TODO Auto-generated method stub
		System.out.println("            !");
	}

}

  
package Create.d.Builder;

//    
public interface Factory {
  Salary createSalary();
  Tax createTax();
}

  
package Create.d.Builder;

//        
public class HeBeiFactory implements Factory {

	@Override
	public Salary createSalary() {
		// TODO Auto-generated method stub
		return new HeBeiSalary();
	}

	@Override
	public Tax createTax() {
		// TODO Auto-generated method stub
		return new HeBeiTax();
	}

}

  
package Create.d.Builder;

//        
public class GuangDongFactory implements Factory {

	@Override
	public Salary createSalary() {
		// TODO Auto-generated method stub
		return new GuangDongSalary();
	}

	@Override
	public Tax createTax() {
		// TODO Auto-generated method stub
		return new GuangDongTax();
	}

}

  
package Create.d.Builder;


//    
public class Builder {
		Factory fa;
		public Builder() {
			super();
		}
		
		public Builder(Factory fa) {
			super();
			this.fa = fa;
		}
		
		//         
		public void build(){
			Salary sa = fa.createSalary();
			Tax tax = fa.createTax();
			sa.calcSalary();
			tax.calcTax();
		}
		
		
}

  
package Create.d.Builder;

//     
public class Client {
public static void main(String[] args) {
	Builder builder = new Builder(new HeBeiFactory());
	builder.build();
	
	builder =  new Builder(new GuangDongFactory());
	builder.build();
	
	
}
}

 
 
利点:クライアントはオブジェクトの作成と組立を担当するのではなく、このタスクを特定の作成クラスと組立クラスに渡し、オブジェクトの呼び出しだけを担当します.
欠点:製品間の差が非常に大きい場合は、複数の作成者クラスを作成する必要があります.この場合、工場モデルと一緒に使用することを考慮すると、より効果的です.