設計模式之《抽象工廠方法模式》

package com.design02.design;
/**
 * 人種接口
 * @author Administrator
 *
 */
public interface IHuman {
	//人種的皮膚顏色
	void getColor();
	//人種的語言
	void talk();
	//人都有性別
	void getSex();
}
package com.design02.design;

/**
 * 人種抽象類 每個抽象類都有兩個實現類,分別實現公共的最細節,最具體的事物
 * 黑種人
 * @author Administrator
 *
 */
public abstract class AbstractBlackHuman implements IHuman {

	@Override
	public void getColor() {
		System.out.println("黑色人種皮膚比較黑...");

	}

	@Override
	public void talk() {
		System.out.println("黑色人種說話一般人聽不懂..");
	}

}
package com.design02.design;

/**
 * 人種抽象類 每個抽象類都有兩個實現類,分別實現公共的最細節,最具體的事物
 * 黃種人
 * @author Administrator
 *
 */
public abstract class AbstractYellowHuman implements IHuman {

	@Override
	public void getColor() {
		System.out.println("黃種人皮膚呈現黃白色");

	}

	@Override
	public void talk() {
		System.out.println("黃種人說普通話");
	}

}
package com.design02.design;

/**
 * 人種抽象類 每個抽象類都有兩個實現類,分別實現公共的最細節,最具體的事物
 * 白種人
 * @author Administrator
 *
 */
public abstract class AbstractWhiteHuman implements IHuman {

	@Override
	public void getColor() {
		System.out.println("白色人種皮膚是白色的..");
	}

	@Override
	public void talk() {
		System.out.println("白色人種說話一般是單字節");
	}
}
package com.design02.design.impl;

import com.design02.design.AbstractBlackHuman;

/**
 * 
 * 黑人女性
 * @author Administrator
 *
 */
public class FemaleBlackHumanImpl extends AbstractBlackHuman {

	@Override
	public void getSex() {
		System.out.println("黑人女性");
	}

}
package com.design02.design.impl;

import com.design02.design.AbstractWhiteHuman;

/**
 * 白人女性
 * @author Administrator
 *
 */
public class FemaleWhiteHumanImpl extends AbstractWhiteHuman {

	@Override
	public void getSex() {
		System.out.println("白人女性");
	}

}
package com.design02.design.impl;

import com.design02.design.AbstractYellowHuman;

/**
 * 黃人女性
 * @author Administrator
 *
 */
public class FemaleYellowHumanImpl extends AbstractYellowHuman {

	//黃色人種女性
	@Override
	public void getSex() {
		System.out.println("黃人女性");
	}

}
package com.design02.design.impl;

import com.design02.design.AbstractBlackHuman;

/**
 * 黑人男性
 * @author Administrator
 *
 */
public class MaleBlackHumanImpl extends AbstractBlackHuman {

	@Override
	public void getSex() {
		System.out.println("黑人男性");

	}

}
package com.design02.design.impl;

import com.design02.design.AbstractWhiteHuman;

/**
 * 白人男性
 * @author Administrator
 *
 */
public class MaleWhiteHumanImpl extends AbstractWhiteHuman {

	@Override
	public void getSex() {
		System.out.println("白人男性");

	}

}
package com.design02.design.impl;

import com.design02.design.AbstractYellowHuman;

/**
 * 黃人男性
 * @author Administrator
 *
 */
public class MaleYellowHumanImpl extends AbstractYellowHuman {

	@Override
	public void getSex() {
		System.out.println("黃人男性");

	}

}
package com.design02.design;

/**
 * 人類生產工廠
 * @author Administrator
 *
 */
public interface IHumanFactory {

	//製造一個黃種人
	IHuman createYellowHuman();
	//製造一個黑種人
	IHuman createBlackHuman();
	//製造一個白種人
	IHuman createWhiteHuman();
}
package com.design02.design.impl;

import com.design02.design.IHumanFactory;
import com.design02.design.IHuman;

/**
 * 女人生產工廠
 * @author Administrator
 *
 */
public class FemaleFactoryImpl implements IHumanFactory {

	@Override
	public IHuman createYellowHuman() {
		
		return new FemaleYellowHumanImpl();
	}

	@Override
	public IHuman createBlackHuman() {
		
		return new FemaleBlackHumanImpl();
	}

	@Override
	public IHuman createWhiteHuman() {
		
		return new FemaleWhiteHumanImpl();
	}

}
package com.design02.design.impl;

import com.design02.design.IHuman;
import com.design02.design.IHumanFactory;
/**
 * 男人生產工廠
 * @author Administrator
 *
 */
public class MaleFactoryImpl implements IHumanFactory {

	@Override
	public IHuman createYellowHuman() {
		
		return new MaleYellowHumanImpl();
	}

	@Override
	public IHuman createBlackHuman() {
		
		return new MaleBlackHumanImpl();
	}

	@Override
	public IHuman createWhiteHuman() {
		
		return new MaleWhiteHumanImpl();
	}

}
package com.design02.design;

import com.design02.design.impl.FemaleFactoryImpl;
import com.design02.design.impl.MaleFactoryImpl;

public class NvWaTest {

	public static void main(String[] args) {
		//第一條生產線 男性生產線
		IHumanFactory maleHumanFactory = new MaleFactoryImpl();
		//第二條生產線 女性生產線
		IHumanFactory femaleHumanFactory = new FemaleFactoryImpl();
		
		//開始生產任務
		//男人
		IHuman human = maleHumanFactory.createYellowHuman();
		human.getSex();
		human.getColor();
		human.talk();
		//女人
		IHuman human2 = femaleHumanFactory.createYellowHuman();
		human2.getSex();
		human2.getColor();
		human2.talk();
	}
}
黃人男性
黃種人皮膚呈現黃白色
黃種人說普通話
黃人女性
黃種人皮膚呈現黃白色
黃種人說普通話












發佈了41 篇原創文章 · 獲贊 43 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章