設計模式之-抽象工廠-AbstractFactory

悠悠隱於市發表於2011-04-14

概述:提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們具體的類。

1.一個系統要獨立於它的產品的建立、組合和表示時。
2.一個系統要由多個產品系列中的一個來配置時。
3.當你要強調一系列相關的產品物件的設計以便進行聯合使用時。
4.當你提供一個產品類庫,而只想顯示它們的介面而不是實現時。

 

package pack.java.IAnimalFactory;

/***
 * 動物介面工廠;
 * @author Administrator
 *
 */
public interface IAnimalFactory {
	/**
	 * 產生貓介面;
	 * @return
	 */
	public ICat createCat();
	
	/**
	 * 產生狗介面;
	 * @return
	 */
	public IDog createDog();
	
}

 

 

package pack.java.IAnimalFactory;

public interface ICat {
	/**
	 * 貓具有吃的方法;
	 */
	public void eat();
}

 

 

package pack.java.IAnimalFactory;

public interface IDog {
	/**
	 * 狗具有吃的方法;
	 */
	public void eat();
}

 

 

package pack.java.AbstractFactory;

import pack.java.AnimalModel.BlackCat;
import pack.java.AnimalModel.BlackDog;
import pack.java.IAnimalFactory.IAnimalFactory;
import pack.java.IAnimalFactory.ICat;
import pack.java.IAnimalFactory.IDog;
/**
 * 黑顏色動物實現類;
 * @author Administrator
 *
 */
public class BlackAnimalFactory implements IAnimalFactory{
	/**
	 * 產生一隻黑貓;
	 */
	public ICat createCat() {
		// TODO Auto-generated method stub
		return new BlackCat();
	}

	/**
	 * 產生一隻狗;
	 */
	public IDog createDog() {
		// TODO Auto-generated method stub
		return new BlackDog();
	}

}

 

 

package pack.java.AbstractFactory;

import pack.java.AnimalModel.WhiteCat;
import pack.java.AnimalModel.WhiteDog;
import pack.java.IAnimalFactory.IAnimalFactory;
import pack.java.IAnimalFactory.ICat;
import pack.java.IAnimalFactory.IDog;

public class WhiteAnimalFactory implements IAnimalFactory{

	public ICat createCat() {
		// TODO Auto-generated method stub
		return new WhiteCat();
	}

	public IDog createDog() {
		// TODO Auto-generated method stub
		return new WhiteDog();
	}
	
}

 

 

package pack.java.AnimalModel;

import pack.java.IAnimalFactory.ICat;

public class BlackCat implements ICat{

	/***
	 * 黑貓具有吃的方法;
	 */
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("一隻黑貓,正在捕捉老鼠!");
	}

}

 

 

package pack.java.AnimalModel;

import pack.java.IAnimalFactory.IDog;

public class BlackDog implements IDog{

	/**
	 * 黑狗具有吃的方法;
	 */
	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("一條黑狗,正在啃骨頭!");
	}

}

 

 

package pack.java.AnimalModel;

import pack.java.IAnimalFactory.ICat;

public class WhiteCat implements ICat{

	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("一隻白貓,正在吃魚!");
	}

}

 

 

package pack.java.AnimalModel;

import pack.java.IAnimalFactory.IDog;

public class WhiteDog implements IDog{

	public void eat() {
		// TODO Auto-generated method stub
		System.out.println("一條白狗,正在吃東西!");
	}

}

 

 

package pack.java.testdemo;

import pack.java.AbstractFactory.BlackAnimalFactory;
import pack.java.AbstractFactory.WhiteAnimalFactory;
import pack.java.IAnimalFactory.IAnimalFactory;
import pack.java.IAnimalFactory.ICat;
import pack.java.IAnimalFactory.IDog;

/**
 * 測試抽象工廠;
 * @author Administrator
 *
 */
public class TestAbstractFactory {

	/**
	 * 主方法;
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		//例項化一個黑色動物工廠類,
		IAnimalFactory animalFactory = new  BlackAnimalFactory();
		
		//產生一隻黑貓;
		ICat blackCat = animalFactory.createCat();
		
		//黑貓吃東西;
		blackCat.eat();
		
		//產生一隻黑狗;
		IDog blackDog = animalFactory.createDog();
		
		//黑狗吃東西;
		blackDog.eat();
		
		System.out.println("");
		
		//例項化一個白色動物工廠;
		IAnimalFactory whiteAnimalFactory = new WhiteAnimalFactory();
		
		//產生一隻白貓;
		ICat whiteCat = whiteAnimalFactory.createCat();
		
		//白貓吃東西的方法;
		whiteCat.eat();
		
		//產生一隻白狗;
		IDog whiteDog = whiteAnimalFactory.createDog();
		
		//白狗吃東西的方法;
		whiteDog.eat();
		
	}
}

 

 

執行結果:

 

一隻黑貓,正在捕捉老鼠!
一條黑狗,正在啃骨頭!

一隻白貓,正在吃魚!
一條白狗,正在吃東西!

相關文章