Factory - juedaiyuer/researchNote GitHub Wiki

#工厂模式#

Person person=new Person();

工厂模式就是为了替代我们的new的方式来创建对象.不关心如何如创建对象,我们只关心对象创建成功没有.

  1. 简单工厂:只有抽象的工厂父类.然后一个工厂类(Factory)
  2. 工厂方法:提供一个抽象的工厂类,供我们的子类工厂去扩展,并且把创建对象的任务交给我们具体的子类工厂去创建.
  3. 抽象工厂:实现产品的组合化,就好像工具箱一样.生产衣服工厂,需要生产上衣并且生产裤子这样作为一个产品的组合来实现。

##简单工厂##

public interface Car
{
	public void create();
}

public class Benz implements Car
{
	public void create()
	{
		System.out.println("Benz---create");
	}
}

public class BMW implements Car
{
	public void create()
	{
		System.out.println("BMW---create");
	}
}

public class Factory
{
	public Car getCar(String name)
	{
		if(name.equals("Benz"))
			return new Benz();
		else if(name.equals("BMW"))
			return new BMW();
		else
			return null;
					
	}	
}

public class demo
{
	public static void main(String[] args){
	Factory factory = new Factory();
	Car createCar = factory.getCar("Benz");
	createCar.create();	
	}
}
  • 核心思想便是有一个专门的类用来负责创建实例

简单工厂的UML图

简单工厂


##工厂方法##

  • 对工厂类Factory进行抽象

    public interface Factory { public Car getCar(); }

    public class BenzFactory implements Factory { public Car getCar() { return new Benz(); } }

    public class BMWFactory implements Factory { public Car getCar() { return new BMW(); } }

    public class demo { public static void main(String[] args){ BenzFactory factory = new BenzFactory(); Car createCar = factory.getCar(); createCar.create(); } }


##抽象工厂##

//人族接口

public interface Human 
{

	public void getColor();
	public void getSex();
 
}

//白种人抽象类,实现肤色的定义

public abstract class AbstractWhiteHuman implements Human
{
	public void getColor()
	{
 		System.out.println("---白种人---");
	}	 
}

public abstract class AbstractYellowHuman implements Human
{
	public void getColor()
	{
 		System.out.println("---黄种人---");
	}	 
}


//黄人女性

public class FemaleYellowHuman extends AbstractYellowHuman 
{
	public void getSex()
	{
		System.out.println("黄人女性"); 
	}
 
}

//黄人男性

public class MaleYellowHuman extends AbstractYellowHuman 
{
	public void getSex()
	{
		System.out.println("黄人男性"); 
	}
 
}

//工厂定义,可以理解成造人的八卦炉

public interface HumanFactory {

	//制造一个黄色人种

	public Human createYellowHuman(); 
 
	//制造一个白色人种
 
	public Human createWhiteHuman();
 	 
}

//生产女人的八卦炉	

public class FemaleFactory implements HumanFactory {
 	 
	public Human createWhiteHuman() {
	 
	return new FemaleWhiteHuman();
	 
	}
	 
	//生产出黄人女性
	 
	public Human createYellowHuman() {
	 
	return new FemaleYellowHuman();
	 
	}
 
}

//建立成产线

public class NvWa {

	public static void main(String[] args) {
	 
	//第一条生产线,男性生产线
	 
	HumanFactory maleHumanFactory = new MaleFactory();
	 
	//第二条生产线,女性生产线
	 
	HumanFactory femaleHumanFactory = new FemaleFactory();
	 
	//生产线建立完毕,开始生产人了:
	 
	Human maleYellowHuman = maleHumanFactory.createYellowHuman();
	System.out.println("---黄人男性生产线---");		
	maleYellowHuman.getColor();
	maleYellowHuman.getSex();

	Human femaleYellowHuman = femaleHumanFactory.createYellowHuman();
	System.out.println("---黄人女性生产线---"); 
	maleYellowHuman.getColor();
	maleYellowHuman.getSex();

}