江西省住房城乡建设厅网站,网站网络结构设计,2010年4月江苏省03340网站建设与管理答案,我们的网站抽象工厂 是一种为访问类提供一个创建一族相关或者相互依赖对象的接口#xff0c;且访问类无须指定所要产品的具体类就可以得到同一族的不同等级的产品模式结构 抽象工厂模式是工厂方法模式的升级版本#xff0c;工厂方法模式只生产一个等级的产品#xff0c;而抽象工厂模式…抽象工厂 是一种为访问类提供一个创建一族相关或者相互依赖对象的接口且访问类无须指定所要产品的具体类就可以得到同一族的不同等级的产品模式结构 抽象工厂模式是工厂方法模式的升级版本工厂方法模式只生产一个等级的产品而抽象工厂模式可以生产多个等级的产品
结构
抽象工厂(Abstract Factory):提供了创建产品的接口包含了多个创建产品的方法可以创建不同等级的产品。具体工厂(Concreteractory):主要是实现抽象工厂中的抽象方法完成具体产品的创建。抽象产品(product):定义了产品的规范描述了产品的主要特性和功能抽象工厂模式有多个抽象产品。具体产品(ConcreteProduct实现了抽象产品角色所定义的接口由具体工厂来创建它同县体工厂之间是多对一的关系
实现
升级到抽象工厂模式通常意味着我们要处理多个相关的产品族每个产品族都有各自的接口或抽象类而抽象工厂则提供了创建这些产品族中产品的接口。下面是将工厂方法模式升级为抽象工厂模式的示例 首先我们引入一个新的产品族——颜色(Color)并为形状和颜色分别定义接口
// 定义形状接口
interface Shape {void draw();
}// 定义具体形状类
class Circle implements Shape {Overridepublic void draw() {System.out.println(Drawing a circle...);}
}class Rectangle implements Shape {Overridepublic void draw() {System.out.println(Drawing a rectangle...);}
}// 定义颜色接口
interface Color {void fill();
}// 定义具体颜色类
class Red implements Color {Overridepublic void fill() {System.out.println(Filling with red color...);}
}class Blue implements Color {Overridepublic void fill() {System.out.println(Filling with blue color...);}
}// 定义抽象工厂接口
interface AbstractFactory {Shape getShape(String type);Color getColor(String type);
}// 定义具体工厂类
class ShapeColorFactory implements AbstractFactory {Overridepublic Shape getShape(String type) {if (circle.equalsIgnoreCase(type)) {return new Circle();} else if (rectangle.equalsIgnoreCase(type)) {return new Rectangle();} else {throw new IllegalArgumentException(Invalid shape type: type);}}Overridepublic Color getColor(String type) {if (red.equalsIgnoreCase(type)) {return new Red();} else if (blue.equalsIgnoreCase(type)) {return new Blue();} else {throw new IllegalArgumentException(Invalid color type: type);}}
}// 客户端代码
public class Client {public static void main(String[] args) {// 使用抽象工厂创建不同形状和颜色的对象AbstractFactory factory new ShapeColorFactory();Shape circle factory.getShape(circle);circle.draw();Color red factory.getColor(red);red.fill();Shape rectangle factory.getShape(rectangle);rectangle.draw();Color blue factory.getColor(blue);blue.fill();// 尝试创建无效类型try {Shape invalidShape factory.getShape(triangle);Color invalidColor factory.getColor(green);} catch (IllegalArgumentException e) {System.out.println(e.getMessage());}}
}
在这个抽象工厂模式的示例中AbstractFactory接口提供了创建形状和颜色两个产品族的方法而ShapeColorFactory是它的具体实现负责创建具体的产品对象。客户端代码现在可以一次性获取形状和颜色的完整组合而且可以轻松地扩展其他产品族或者产品类型。
优点
当一个产品族中的多个对象被设计成一起工作时可以保证客户端始终只使用同一产品族中的对象。
缺点
当产品族中需要增加一个新的产品时所有的工厂类都需要进行修改。