03.作成型――抽象工場モデル

3325 ワード

package Create.c.AbstractFactory;

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

  
package Create.c.AbstractFactory;

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

  
package Create.c.AbstractFactory;

//     
public class HeBeiTax implements Tax {

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

}

  
package Create.c.AbstractFactory;

//     
public class HeBeiSalary implements Salary {

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

}

  
package Create.c.AbstractFactory;

//     
public class GuangDongTax implements Tax {

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

}

  
package Create.c.AbstractFactory;


//     
public class GuangDongSalary implements Salary {

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

}

  
package Create.c.AbstractFactory;

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

  
package Create.c.AbstractFactory;

//        
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.c.AbstractFactory;


//        
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.c.AbstractFactory;


//     
public class Client {
public static void main(String[] args) {
	Factory fa = new GuangDongFactory();
	Salary sa = fa.createSalary();
	Tax tax =  fa.createTax();
	sa.calcSalary();
	tax.calcTax();
	
	fa = new HeBeiFactory();
	sa = fa.createSalary();
	tax =fa.createTax();
	sa.calcSalary();
	tax.calcTax();
	
	
}
}

  
利点:すべての実装クラスが1つのファクトリクラスに設計され、クライアント呼び出しが非常に簡単になり、一連の製品を交換する必要がある場合は、1つのファクトリクラスを交換するだけでよい.
欠点:需要変更または追加に関連する場合は、抽象ファクトリクラスを変更し、この抽象ファクトリクラスを実装する具体的な実装クラスを変更し、追加の符号化ワークロードを追加する必要があります(ファクトリメソッドモードと同じです).