Factory - juedaiyuer/researchNote GitHub Wiki
#工厂模式#
Person person=new Person();
工厂模式就是为了替代我们的new的方式来创建对象.不关心如何如创建对象,我们只关心对象创建成功没有.
- 简单工厂:只有抽象的工厂父类.然后一个工厂类(Factory)
- 工厂方法:提供一个抽象的工厂类,供我们的子类工厂去扩展,并且把创建对象的任务交给我们具体的子类工厂去创建.
- 抽象工厂:实现产品的组合化,就好像工具箱一样.生产衣服工厂,需要生产上衣并且生产裤子这样作为一个产品的组合来实现。
##简单工厂##
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();
}