本文内容来自书上,不懂设计模式,只求混个眼熟。
三、抽象工厂模式
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.优缺点:
【优点】:
在抽象工厂模式中,客户端不再需要负责对象的创建,而是把这个责任
交给了具体的工厂类,客户端只负责对对象的调用,明确了各个类的职责。
当一系列相互关联的产品被设计到一个工厂里面后,客户端的调用变得简单,
而且,更换这一列的产品时,只需要更换一个工厂类即可。
【缺点】:
如果有新的产品加进来,则需要修改抽象工厂类的设计,并同时修改实现这个
抽象工厂类的具体实现类,需要额外编写代码,增加了工作量。