博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
抽象工厂模式
阅读量:7191 次
发布时间:2019-06-29

本文共 4622 字,大约阅读时间需要 15 分钟。

抽象工厂模式也是一种工厂模式,只是它生产的对象是工厂。

代码演示

第1步:创建Shape的接口

Shape.java

1 public interface Shape {2    void draw();3 }

第2步:创建实现相同接口的具体类

Rectangle.java

1 public class Rectangle implements Shape {2 3    @Override4    public void draw() {5       System.out.println("Inside Rectangle::draw() method.");6    }7 }

Square.java

1 public class Square implements Shape {2 3    @Override4    public void draw() {5       System.out.println("Inside Square::draw() method.");6    }7 }

Circle.java

1 public class Circle implements Shape {2 3    @Override4    public void draw() {5       System.out.println("Inside Circle::draw() method.");6    }7 }

第3步:创建一个Colors接口

Color.java

1 public interface Color {2    void fill();3 }

第4步:创建实现相同接口的具体类

Red.java

1 public class Red implements Color {2 3    @Override4    public void fill() {5       System.out.println("Inside Red::fill() method.");6    }7 }

Green.java

1 public class Green implements Color {2 3    @Override4    public void fill() {5       System.out.println("Inside Green::fill() method.");6    }7 }

Blue.java

1 public class Blue implements Color {2 3    @Override4    public void fill() {5       System.out.println("Inside Blue::fill() method.");6    }7 }

第5步:创建实现相同接口的具体类

AbstractFactory.java

1 public abstract class AbstractFactory {2    abstract Color getColor(String color);3    abstract Shape getShape(String shape) ;4 }

第6步:创建实现相同接口的具体类

创建工厂类,根据给定信息扩展AbstractFactory以生成具体类的对象

ShapeFactory.java

1 public class ShapeFactory extends AbstractFactory { 2  3    @Override 4    public Shape getShape(String shapeType){ 5  6       if(shapeType == null){ 7          return null; 8       } 9 10       if(shapeType.equalsIgnoreCase("CIRCLE")){11          return new Circle();12 13       }else if(shapeType.equalsIgnoreCase("RECTANGLE")){14          return new Rectangle();15 16       }else if(shapeType.equalsIgnoreCase("SQUARE")){17          return new Square();18       }19 20       return null;21    }22 23    @Override24    Color getColor(String color) {25       return null;26    }27 }

ColorFactory.java

1 public class ColorFactory extends AbstractFactory { 2  3    @Override 4    public Shape getShape(String shapeType){ 5       return null; 6    } 7  8    @Override 9    Color getColor(String color) {10 11       if(color == null){12          return null;13       }        14 15       if(color.equalsIgnoreCase("RED")){16          return new Red();17 18       }else if(color.equalsIgnoreCase("GREEN")){19          return new Green();20 21       }else if(color.equalsIgnoreCase("BLUE")){22          return new Blue();23       }24 25       return null;26    }27 }

第7步:创建工厂生成器/生产器类,通过传递如ShapeColor等信息来获取工厂

FactoryProducer.java

1 public class FactoryProducer { 2    public static AbstractFactory getFactory(String choice){ 3  4       if(choice.equalsIgnoreCase("SHAPE")){ 5          return new ShapeFactory(); 6  7       }else if(choice.equalsIgnoreCase("COLOR")){ 8          return new ColorFactory(); 9       }10 11       return null;12    }13 }

第8步:使用FactoryProducer来获取AbstractFactory,以便通过传递类型等信息来获取具体类的工厂

AbstractFactoryPatternDemo.java

1 public class AbstractFactoryPatternDemo { 2    public static void main(String[] args) { 3  4       //get shape factory 5       AbstractFactory shapeFactory = FactoryProducer.getFactory("SHAPE"); 6  7       //get an object of Shape Circle 8       Shape shape1 = shapeFactory.getShape("CIRCLE"); 9 10       //call draw method of Shape Circle11       shape1.draw();12 13       //get an object of Shape Rectangle14       Shape shape2 = shapeFactory.getShape("RECTANGLE");15 16       //call draw method of Shape Rectangle17       shape2.draw();18 19       //get an object of Shape Square 20       Shape shape3 = shapeFactory.getShape("SQUARE");21 22       //call draw method of Shape Square23       shape3.draw();24 25       //get color factory26       AbstractFactory colorFactory = FactoryProducer.getFactory("COLOR");27 28       //get an object of Color Red29       Color color1 = colorFactory.getColor("RED");30 31       //call fill method of Red32       color1.fill();33 34       //get an object of Color Green35       Color color2 = colorFactory.getColor("Green");36 37       //call fill method of Green38       color2.fill();39 40       //get an object of Color Blue41       Color color3 = colorFactory.getColor("BLUE");42 43       //call fill method of Color Blue44       color3.fill();45    }46 }

第9步:验证输出,结果如下

1 Inside Circle::draw() method.2 Inside Rectangle::draw() method.3 Inside Square::draw() method.4 Inside Red::fill() method.5 Inside Green::fill() method.6 Inside Blue::fill() method.

 

转载于:https://www.cnblogs.com/wangzhisdu/p/8142722.html

你可能感兴趣的文章
android 银联支付接入报nullexception异常
查看>>
配置OSPF
查看>>
EIGRP邻居关系
查看>>
x3850X5如何添加CPU和QPI Wrap Card及两节点配置说明
查看>>
12.3、bash脚本循环语句
查看>>
用C语言实现“智障”的棋盘游戏
查看>>
JavaScript的对象——灵活与危险
查看>>
如何看待sds?
查看>>
隔行换色
查看>>
-- 小白python2之函数
查看>>
如何不用那么担心成为一个坏程序员
查看>>
基于SSM的驾校预约报名管理系统-java驾校预约报名管理系统
查看>>
#8 bash的颜色显示规则
查看>>
用python写的判断质数和登录程序升级版
查看>>
18.6 负载均衡集群介绍 18.7 LVS介绍 18.8 LVS调度算法 18.9/18.10 L
查看>>
Apache安装部署
查看>>
CCNA网络技术实验手册:Cisco IOS备份与升级
查看>>
相关VB.NET文件对象基础知识讲解
查看>>
简单描述Servlet Filter(过滤器) 相关知识
查看>>
生成自增的编号,生成订单号
查看>>