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