首页 > 代码库 > 易学设计模式看书笔记(4) - 抽象工厂模式

易学设计模式看书笔记(4) - 抽象工厂模式

 本文内容来自书上,不懂设计模式,只求混个眼熟。三、抽象工厂模式1.动物管理系统的例子
public interface Animal{

  public void eat();

}

public class Tiger implements Animal
{
	public void eat(){
		sysout.out.println("老虎会吃");
	};
	public void run(){
		sysout.out.println("老虎会跑");
	};
}

public class Dolphin implements Animal
{
	public void eat(){
		sysout.out.println("海豚会吃");
	};
	public void swim(){
		sysout.out.println("海豚会游泳");
	};
}

下面的和简单工厂模式有区别了。
为了区分亚洲虎和非洲虎,亚洲海豚和非洲海豚,还需要创建四个相应的类:
亚洲虎类和非洲虎类,亚洲海豚和非洲海豚类。
public class AsiaTriger extends Triger
{
	public void run(){
		System.out.println("亚洲老虎在跑");
	}
	public void eat(){
		System.out.println("亚洲老虎吃东西");
	}
}
public class AfricaTriger extends Triger
{
	public void run(){}
	public void eat(){}
}
public class AfricaDolphin extends Dolphin
{

}
public class AfricaDophin extends Dolphin
{

}

然后设计一个只负责定义创建方式的抽象工厂类:

public interface Factory
{
	Triger createTriger();
	Dolphin createDolphin();
}

再设计适合亚洲老虎,亚洲海豚的具体工厂类;

public class AsiaFactory implements Factory
{
	public Triger createTriger(){
	    return new AsiaTriger();
	};
	public Dolphin createDolphin(){
		return new AsiaDolphin();
	};
}

再设计适合非洲老虎,非洲海豚的具体工厂类;

public class AfricaFactory implements Factory
{
	public Triger createTriger(){
	    return new AfricaTriger();
	};
	public Dolphin createDolphin(){
		return new AfricaDolphin();
	};
}

public class Client
{
	public static void main(String[] args) 
	{
		Factory factory = new AsiaFactory();
		factory.createTriger();
	}
}

2.抽象工厂模式简介

【定义】:
如果客户端需要创建一些产品结构,而这些产品结构由分别属于
不同的产品类别,则可以使用抽象工厂模式,抽象工厂模式中的
抽象工厂类负责定义创建对象的接口,而这一系列对象的创建工作由实现
抽象工厂类的具体工厂类来完成。

【原理】:

抽象工厂模式主要有四部分组成:抽象工厂类,实现抽象工厂类的
具体实现类、抽象类和实现抽象类的具体实现类。

原理图如下:

【使用时机】:当系统创建一系列相互关联的对象时,就需要时用抽象工厂模式。

3.优缺点:

【优点】:
在抽象工厂模式中,客户端不再需要负责对象的创建,而是把这个责任
交给了具体的工厂类,客户端只负责对对象的调用,明确了各个类的职责。
当一系列相互关联的产品被设计到一个工厂里面后,客户端的调用变得简单,
而且,更换这一列的产品时,只需要更换一个工厂类即可。

【缺点】:
如果有新的产品加进来,则需要修改抽象工厂类的设计,并同时修改实现这个
抽象工厂类的具体实现类,需要额外编写代码,增加了工作量。