単純な工場と抽象的な工場モデルの理解


簡単なファクトリ・メソッド、例:データ・アクセス・レイヤのファクトリ・クラスDAOFactory(インタフェース)があり、そこには様々なデータベースの実装があります.たとえば、OracleDAOFactoryやMysqlDAOFactoryなどです.その後、クライアントでの入力またはプロファイルの情報:「ORACLE」または「MYSQL」に基づいて、自分の必要なデータベース実装を作成します:DAOFactory df=(DAOFactory)Class.forName(「OracleDAOFactoryクラスフルネーム」).newInstance();プログラム結合性を低減する目的を達成する.
 
抽象工場モデルの使い方は比較的複雑で、例:私は農業銀行ABCと工行ICBCのオンライン支払いを行い、各オンライン支払いにはpay支払いとverify検証の2つの動作があるが、農業銀行の支払いは工行の検証と一緒に置くことはできない.codingの説明:
1、まず抽象工場を定義する:AbstractFactory()で、中の2つの方法は支払い行為を獲得し、行為を検証するために使用される.
public interface AbstractFactory {
	public abstract PayAction createPayAction();
	public abstract VerifyAction createVerifyAction();
}

 
2、二つの銀行を再定義し、抽象工場を実現する.
public  class ABCFactory implements AbstractFactory{

	@Override
	public PayAction createPayAction() {
		// TODO Auto-generated method stub
		return new ABCPayAction();
	}

	@Override
	public VerifyAction createVerifyAction() {
		// TODO Auto-generated method stub
		return new ABCVerifyAction();
	}

}

 
public class ICBCFactory implements AbstractFactory{

	@Override
	public PayAction createPayAction() {
		// TODO Auto-generated method stub
		return new ICBCPayAction();
	}

	@Override
	public VerifyAction createVerifyAction() {
		// TODO Auto-generated method stub
		return new ICBCVerifyAction();
	}

}

3、支払動作クラスを作成し、動作クラスを検証します.
public interface PayAction{
	public void doPay();
}

 
public interface VerifyAction {
	public void doVerify();
}

4、銀行ごとの支払い情報と検証情報が異なるため、農業銀行行為と工行行為はそれぞれそれぞれの支払い動作と検証動作を実現する.
農業銀行の支払いと検証:
public class ABCPayAction implements PayAction {
	@Override
	public void doPay() {
		System.out.println("this is abc pay!");
		
	}

}

public class ABCVerifyAction implements VerifyAction{

	@Override
	public void doVerify() {
		System.out.println("this is abc verify!");
		
	}

}

工商銀行の支払いと検証:
public class ICBCPayAction implements PayAction {
	@Override
	public void doPay() {
	System.out.println("this is icbc pay!");		
	}

}

public class ICBCVerifyAction implements VerifyAction {
	@Override
	public void doVerify() {
		System.out.println("this is icbc verify!");
	}
}

5、その後、消費者Buyerは消費を開始し、消費者クラスを作成する.
public class Buyer {
	private PayAction pa= null;
	private VerifyAction va = null;
	public void doBuy(AbstractFactory af){
		this.pa = af.createPayAction();
		this.va =af.createVerifyAction();
		this.pa.doPay();
		this.va.doVerify();
	}
}

6、すべてOKして、クライアントのテストを始めます
public class Cilent {
	
	public static void main(String[] args) {
		Buyer b = new Buyer();
		b.doBuy(new ABCFactory());
		//b.doBuy(new ICBCFactory());

	}

}
  :
this is abc pay!
this is abc verify!