23种设计模式之-----抽象工厂模式(AbstractFactory pattern)

抽象工厂模式(Abstract Factory Pattern)是工厂方法模式的进一步抽象,其英文原话"Provide an interface for creating families of related or dependent objects without specifying their concrete classes",翻译,“为创建一组相关或相互依赖的对象提供一个借口,无需指定它们的具体类”。抽象工厂模式通常是用于创一族产品,并且这族产品分不同的等级;不同的具体工厂类生产不同等级的一族产品。抽象工厂模式也有四种角色:抽象工厂、具体工厂、抽象产品和具体产品,具体解释参见“Java 工厂方法模式”一文。

在上文女娲造人的基础上,想把性别分出来,大概刚开始造的人没分什么男女吧~于是有:


男人:

public interface Man {
	//强壮
	public void strong();

}


女人:

public interface Woman {
	//漂亮
	public void beautiful();
}


黄种男人:

public class YellowMan implements Man {
	@Override
	public void strong() {
		System.out.println("黄种男人的强壮!");
	}
}




黄种女人:

public class YellowWoman implements Woman{

	@Override
	public void beautiful() {
		System.out.println("黄种女人的漂亮!");
	}
}


白种男人:

public class WhiteMan implements Man {
	@Override
	public void strong() {
		System.out.println("白种男人的强壮!");
	}
}



白种女人:

public class WhiteWoman implements Woman{

	@Override
	public void beautiful() {
		System.out.println("白种女人的漂亮!");
	}
}



黑种男人:

public class BlockMan implements Man{

	@Override
	public void strong() {
		System.out.println("黑种男人的强壮!");
	}
}



黑种女人:

public class BlockWoman implements Woman{

	@Override
	public void beautiful() {
		System.out.println("黑种女人的漂亮!");
	}
}



总工厂:

同时生产男人和女人(此处看作同一产品族,不同肤色看作不同产品等级结构)。

public interface HumanFactory {
	 Man createMan();
	 Woman createWoman();
}


黄种人生产线:

public class YellowFactory implements HumanFactory{
	@Override
	public Man createMan() {
		return new YellowMan();
	}

	@Override
	public Woman createWoman() {
		return new YellowWoman();
	}
}




白种人生产线:

public class WhiteFactory implements HumanFactory {
	@Override
	public Man createMan() {
		return new WhiteMan();
	}

	@Override
	public Woman createWoman() {
		return new WhiteWoman();
	}
}




黑种人生产线:

public class BlockFactory implements HumanFactory{
	@Override
	public Man createMan() {
		return new BlockMan();
	}

	@Override
	public Woman createWoman() {
		return new BlockWoman();
	}
}




女娲开始生产人:

public class Nvwa {
	public static void main(String[] args) {
		//创建黄色的男人和女人
		HumanFactory hf = new YellowFactory();
		hf.createMan().strong();
		hf.createWoman().beautiful();

		//创建黑色的男人和女人
		HumanFactory wf = new WhiteFactory();
		wf.createMan().strong();
		wf.createWoman().beautiful();

		//创建白色的男人和女人
		HumanFactory bf = new BlockFactory();
		bf.createWoman().beautiful();
		bf.createMan().strong();
	}
}


最后我们看看造人结果:


23种设计模式之-----抽象工厂模式(AbstractFactory pattern)_第1张图片


三种工厂模式的对比:

简单工厂:

优点:

1、屏蔽产品的具体实现,调用者只关心产品的接口。

2、实现简单

缺点:

1、增加产品,需要修改工厂类,不符合开放-封闭原则

2、工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则

工厂方法:

优点:

1、继承了简单工厂模式的优点

2、符合开放-封闭原则

缺点:

1、增加产品,需要增加新的工厂类,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性。

抽象工厂:

抽象工厂对开闭原则具有一定的倾斜性,比如以上栗子中,如果你要增加肤色,只需要增加相应的肤色人种和相应的肤色工厂就可以,这样很完美的贴合开闭原则。但是如果你要增加性别,那么你就需要修改所有的工厂,这样完全破坏了开闭原则。











 
  
 
  
 
  
 
 

你可能感兴趣的:(设计模式)