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