希赛考试网
首页 > 软考 > 软件设计师

抽象工厂模式代码示例

希赛网 2024-06-15 09:38:22

抽象工厂模式是一种常见的设计模式,它可以使得客户端和具体类之间解耦,并且能够保证创建的对象是同一种类型。本文从多个角度分析抽象工厂模式,通过代码示例的方式,让读者更直观地理解该模式的设计和应用。

一、背景介绍

在软件开发中,我们经常需要创建不同类型的对象,如果直接使用new关键字创建的话,就会导致程序和具体类之间高度耦合,不利于维护和扩展。为了更好地解决这个问题,可以使用工厂模式,但是工厂模式只能创建一种类型的对象,无法满足多个类型的需求。因此,抽象工厂模式应运而生,它能够创建多个类型的对象,并且保持这些对象的一致性。

二、UML图

下面是抽象工厂模式的UML类图:

![](https://img-blog.csdn.net/20160529102646481)

三、角色介绍

抽象工厂模式包含以下几个角色:

1. 抽象工厂类(AbstractFactory):定义了创建一组抽象产品的方法,每个方法对应一种产品。

2. 具体工厂类(ConcreteFactory):实现了抽象工厂类定义的方法,可以创建多种不同类型的具体产品。

3. 抽象产品类(AbstractProduct):定义了产品的属性和方法,具体产品实现该类。

4. 具体产品类(ConcreteProduct):实现了抽象产品类定义的方法。

5. 客户端(Client):使用抽象工厂和抽象产品类创建需要的具体产品。

四、代码示例

下面是一个简单的代码示例,使用抽象工厂模式实现一个简单的图形绘制器:

1. 首先,我们定义抽象图形工厂类:

```

public interface ShapeFactory {

Circle createCircle();

Square createSquare();

}

```

2. 然后,我们定义具体图形工厂类,分别创建圆形和正方形:

```

public class RedShapeFactory implements ShapeFactory {

@Override

public Circle createCircle() {

return new RedCircle();

}

@Override

public Square createSquare() {

return new RedSquare();

}

}

public class GreenShapeFactory implements ShapeFactory {

@Override

public Circle createCircle() {

return new GreenCircle();

}

@Override

public Square createSquare() {

return new GreenSquare();

}

}

```

3. 接着,我们定义抽象图形类:

```

public interface Shape {

void draw();

}

```

4. 最后,我们定义具体图形类,分别表示不同颜色的圆形和正方形:

```

public class RedCircle implements Circle {

@Override

public void draw() {

System.out.println("绘制一个红色的圆形");

}

}

public class GreenCircle implements Circle {

@Override

public void draw() {

System.out.println("绘制一个绿色的圆形");

}

}

public class RedSquare implements Square {

@Override

public void draw() {

System.out.println("绘制一个红色的正方形");

}

}

public class GreenSquare implements Square {

@Override

public void draw() {

System.out.println("绘制一个绿色的正方形");

}

}

```

5. 最后,我们可以在客户端中使用图形工厂创建需要的具体图形:

```

public class Client {

public static void main(String[] args) {

ShapeFactory redFactory = new RedShapeFactory();

Circle redCircle = redFactory.createCircle();

Square redSquare = redFactory.createSquare();

ShapeFactory greenFactory = new GreenShapeFactory();

Circle greenCircle = greenFactory.createCircle();

Square greenSquare = greenFactory.createSquare();

redCircle.draw(); // 输出 "绘制一个红色的圆形"

redSquare.draw(); // 输出 "绘制一个红色的正方形"

greenCircle.draw(); // 输出 "绘制一个绿色的圆形"

greenSquare.draw(); // 输出 "绘制一个绿色的正方形"

}

}

```

五、优缺点分析

抽象工厂模式的优点主要有以下几个方面:

1. 抽象工厂模式可以更好地解耦客户端和具体类之间的依赖关系,使得程序更容易维护和扩展。

2. 抽象工厂模式保持了一组对象的一致性,即多个对象具有相同的接口或基类,这大大降低了程序复杂度。

3. 抽象工厂模式可以实现多态性,即通过工厂类返回不同的具体对象,来满足不同的需求。

抽象工厂模式的缺点主要有以下几个方面:

1. 抽象工厂模式的实现比较复杂,需要创建多个抽象类和具体类,从而增加了程序的复杂度。

2. 抽象工厂模式通常需要创建大量的类,这可能会影响程序的性能,尤其是在运行时需要动态创建对象时。

3. 抽象工厂模式中的具体产品类之间通常具有较高的内聚性,这可能会导致一个具体产品类的变化会影响到其他的具体产品类。

扫码咨询 领取资料


软考.png


软件设计师 资料下载
备考资料包大放送!涵盖报考指南、考情深度解析、知识点全面梳理、思维导图等,免费领取,助你备考无忧!
立即下载
软件设计师 历年真题
汇聚经典真题,展现考试脉络。精准覆盖考点,助您深入备考。细致解析,助您查漏补缺。
立即做题

软考资格查询系统

扫一扫,自助查询报考条件