设计模式之《抽象工厂方法模式》

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();
	}
}
黄人男性
黄种人皮肤呈现黄白色
黄种人说普通话
黄人女性
黄种人皮肤呈现黄白色
黄种人说普通话












猜你喜欢

转载自blog.csdn.net/cm777/article/details/78142995