抽象工厂模式可以向客户端提供一个接口,使得客户端在不必指定产品的具体类型的情况下,创建多个产品族的产品对象。
类图如下:
一个例子:由于业务需求,我公司引进了一个使用机器绘图,可以很方便绘制不同的几何形状,如圆形,方形和三角形。但是有时还得需要手动绘图,每个几何图形都要有画图draw()和擦去erase()两个方法,请使用抽象工厂来解决此问题
先实现定义抽象产品
public interface Shape {
public void draw();
public void erase();
}
public interface Circle extends Shape {
}
public interface Square extends Shape {
}
public interface Triangle extends Shape {
}
再定义手写版 的具体产品:
public class HandCircle implements Circle {
public void draw() {
System.out.println("HandCircle.draw()");
}
public void erase() {
System.out.println("HandCircle.erase()");
}
}
public class HandSquare implements Square {
public void draw() {
System.out.println("HandSquare.draw()");
}
public void erase() {
System.out.println("HandSquare.erase()");
}
}
public class HandTriangle implements Triangle {
public void draw() {
System.out.println("HandTriangle.draw()");
}
public void erase() {
System.out.println("HandTriangle.erase()");
}
}
再定义机器制造的具体产品:
public class MachineCircle implements Circle {
public void draw() {
System.out.println("MachineCircle.draw()");
}
public void erase() {
System.out.println("MachineCircle.erase()");
}
}
public class MachineSquare implements Square {
public void draw() {
System.out.println("MahchineSquare.draw()");
}
public void erase() {
System.out.println("MahchineSquare.erase()");
}
}
public class MachineTriangle implements Triangle {
public void draw() {
System.out.println("MachineTriangle.draw()");
}
public void erase() {
System.out.println("MachineTriangle.erase()");
}
}
再定义抽象工厂,实现了这个接口的类会创建三个不同等级的产品。
public interface ArtTracer {
public Circle createCircle();
public Square createSquare();
public Triangle createTriangle();
}
具体工厂:
//手写版的工厂
public class HandTracer implements ArtTracer {
public Circle createCircle() {
return new HandCircle();
}
public Square createSquare() {
return new HandSquare();
}
public Triangle createTriangle() {
return new HandTriangle();
}
}
//机器制造的工厂
public class MachineTracer implements ArtTracer {
public Circle createCircle() {
return new MachineCircle();
}
public Square createSquare() {
return new MachineSquare();
}
public Triangle createTriangle() {
return new MachineTriangle();
}
}
最后编写客户端进行测试:
public class Client {
public static void main(String[] args) {
ArtTracer artTracer = new HandTracer();
artTracer.createCircle().draw();
artTracer.createCircle().erase();
artTracer.createSquare().draw();
artTracer.createSquare().erase();
artTracer.createTriangle().draw();
artTracer.createTriangle().erase();
System.out.println("--------------------------");
artTracer = new MachineTracer();
artTracer.createCircle().draw();
artTracer.createCircle().erase();
artTracer.createSquare().draw();
artTracer.createSquare().erase();
artTracer.createTriangle().draw();
artTracer.createTriangle().erase();
}
}
分享到:
相关推荐
java设计模式 抽象工厂模式详解 一张图让你彻底明白抽象工厂模式
介绍的是工厂模式 包括简单工厂模式、工厂方法模式、抽象工厂模式 包括PPT和代码
设计模式-抽象工厂模式(讲解及其实现代码)
工厂方法模式和抽象工厂模式的区别,对工厂方法模式和抽象工厂模式做了简单的比较
设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂模式 反射 配置文件 设计模式 抽象工厂...
深入浅出设计模式之抽象工厂模式+工厂方法模式+策略模式实现手机加工厂(加类图)
抽象工厂模式ppt。抽象工厂模式ppt。抽象工厂模式ppt。
设计模式--抽象工厂模式实现多数据库连接 设计模式,.net设计模式,抽象工厂
java设计模式【之】抽象工厂模式【源码】【场景:制作咖啡】 * 抽象工厂 * * 创建对象实例时,不要直接 new 类, 而是把这个new 类的动作放在一个工厂的方法中,并返回。 * 在工厂方法的基础上,进一步抽象工厂...
设计模式 - 抽象工厂模式
抽象工厂模式(Abstract Factory Pattern) 引入: 在前面介绍的两个创建型模式里面,我们解决的都是有关"new"的问题,用它们来避免显式指定类创建对象。我写的也非常简单易懂,相信看过的朋友们都应该对简单工厂...
抽象工厂模式.ppt抽象工厂模式.ppt
通过C++实现了简单工厂模式、工厂模式、抽象工厂模式三大设计模式的经典案例。
设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 设计模式 抽象工厂模式 三层架构 要您一个资源分,也算是对我的尊重,谢谢下载。
抽象工厂模式实现计算器源码,学习C#设计模式。
在C#项目开发中设计模式中的抽象工厂模式应用实例实现。
抽象工厂模式的实现源代码,清晰易懂,还有详细的说明
通过抽象工厂搜提供的接口,可以创建产品的家族,利用这个接口书写代码,我们...这是与博客《抽象工厂模式--GOF的23个之一》配套实例源代码,具体说明欢迎阅读。 如有好的建议,可留言或发至笔者邮箱:fzb_xxzy@163.com
项目需求: 有两间塑料加工厂(A厂仅生产容器类产品;B厂仅生产模具类产品);... 抽象工厂模式以一种倾斜的方式支持增加新的产品,它为新产品族的增加提供方便,而不能为新的产品等级结构的增加提供这样的方便。
c++ java 抽象工厂模式