使用简单工厂模式设计一个可以创建不同几何图形(Shape),如Circle,Rectangle,Triangle等绘图工具类,每个几何图形均具有绘制Draw()和擦除Erase()两个方法;要求在绘制不支持的几何图形时,抛出一个UnsuppShapeException异常,绘制类图并使用Java语言实现。

/** * Description: 抽象产品角色 */
public abstract class Shape { public abstract void draw(); public abstract void erase();
}/** * Description: 具体产品角色 */
public class Round extends Shape { @Override public void draw() { System.out.println("绘制圆形"); } @Override public void erase() { System.out.println("擦除圆形"); }
}
public class Square extends Shape { @Override public void draw() { System.out.println("绘制方形"); } @Override public void erase() { System.out.println("擦除方形"); }
}
public class Triangle extends Shape { @Override public void draw() { System.out.println("绘制三角形"); } @Override public void erase() { System.out.println("擦除三角形"); }
}/** * Description: 工厂角色 */
public class ShapeFactory { // 声明创建形状的静态工厂方法 public static Shape createShape(String type) throws UnSupportedShapeException { Shape shape; if ("圆形".equals(type)) { shape = new Round(); } else if ("方形".equals(type)) {shape = new Square(); } else if ("三角形".equals(type)) { shape = new Triangle(); } else { throw new UnSupportedShapeException("UnSupportedShapeException"); } return shape;}
} /** * Description: 自定义异常 */
public class UnSupportedShapeException extends Exception { public UnSupportedShapeException(String message) { super(message); }
}/** * Description: 客户端 */
public class DrawingTool { public static void main(String[] args) { Shape s1, s2, s3, s4; try { s1 = ShapeFactory.createShape("圆形"); s2 = ShapeFactory.createShape("方形"); s3 = ShapeFactory.createShape("三角形"); s1.draw(); s1.erase(); s2.draw(); s2.erase(); s3.draw(); s3.erase(); // s4.draw(); // s4.erase(); } catch (Exception e) { System.out.println(e.getMessage()); } }
}

简单工厂创建不同几何图形(Java代码实例)相关推荐

  1. java订单类_基于Java创建一个订单类代码实例

    这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订 ...

  2. java订单类_使用Java创建一个订单类代码实例

    这篇文章主要简介了使用Java创建一个订单类代码实例,文中通过示例代码简介的非常具体,对大家的学习或者工作具有一定的参考学习网上卖,需要的朋友可以学习下 需求描述 定义一个类,描述订单信息 订单id ...

  3. java考察代码_一段简单的关于字符串的 Java 代码竟考察了这么多东西

    下面的代码运行结果是什么?解释一下为什么会有这些差异. String s1 = "hello"; String s2 = s1 + ",world"; Stri ...

  4. 【Java 代码实例 14】BeanUtils用法详解,附源码分析

    目录 一.org.apache.commons.beanutils.BeanUtils简介 二.使用的前置条件 三.添加pom 四.org.apache.commons.beanutils.BeanU ...

  5. 【Java 代码实例 13】Java操作pdf的工具类itext

    目录 一.什么是iText? 二.引入jar 1.项目要使用iText,必须引入jar包 2.输出中文,还要引入下面```itext-asian.jar```包 3.设置pdf文件密码,还要引入下面` ...

  6. C# EF Core 简单工厂模式,接口多继承实例(三)

    一.说明 1.本实例是基于.Net Core 1.1,EF Core 1.1的代码实例,仅供参考 2.当前版本的EF Core好像还没有提供模型验证,异常跟踪等 二.实体层,自动 生成 三 .接口层 ...

  7. python读文件代码-简单了解Python读取大文件代码实例

    这篇文章主要介绍了简单了解Python读取大文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 通常对于大文件读取及处理,不可能直接加载到内 ...

  8. 手撕设计模式之「简单工厂模式」(Java描述)

    前言 利用简单工厂模式可以实现对象创建和业务逻辑处理的分离,但存在工厂类职责过重,增添新产品违背开闭原则等问题.它不属于GoF 23种设计模式之一,但是它可以作为学习工厂方法模式前的一个很好的引导. ...

  9. 设计模式(一)简单工厂(创建型)(JavaPHP)

    面向对象设计的基本原则 单一职责系统中的每一个对象应该只有一个单独的职责,所有对象关注的应该是自身职责的完成. 基本思想:高内聚,低耦合. 开闭原则一个对象对扩展开放,对修改关闭. 基本思想:对类的改 ...

最新文章

  1. 小程序获取form_id 与 小程序获取openid
  2. Access context of data source and work center view do not match
  3. 【pyradiomics学习】——影像组学特征
  4. feign调用接口参数可以为null吗_FeignClient调用POST请求时查询参数被丢失的情况分析与处理...
  5. Python刷csdn访问量
  6. “3遍读书法” 我是这样自学编程的
  7. 数据:以太坊2.0合约24小时新增2.04万ETH
  8. 为什么现在的监控系统容易硬盘坏?附原理解析
  9. Zabbix 对接 LDAP 实现用户统一登录的方法
  10. 亚吉铁路 + 蒙内铁路
  11. micropython常用模块有那个_Python17个常用内置模块总结
  12. 中职学校计算机课听课记录表,中职语文听课记录10篇
  13. oracle查看服务器的时间,Oracle如何获取系统当前时间等操作实例
  14. UML小结,UML图,UML例子
  15. apache与php乱码
  16. ubuntu安装zsh及环境配置
  17. vue3—reactive如何更改属性
  18. Sublime text3143中文乱码只能输入繁体字
  19. iOS Returning block that lives on the local stack 错误解决
  20. [2016 NUIST 程序设计竞赛] B. 欧几里得的公约数

热门文章

  1. 【论文笔记】Birthday, Name and Bifacial-security Understanding Passwords of Chinese Web Users
  2. 动态添加 Redis 密码认证
  3. Android推送 百度云推送
  4. 《剑指offer》第二章——关于面试官王海波的思考
  5. 【window 小技巧】 如何删除电脑临时文件
  6. 互联网医院系统详细设计-医生端
  7. Mysql中CURRENT_TIMESTAMP,CURRENT_DATE,CURRENT_TIME,now(),sysdate()各项值的区别
  8. Fiddler断点Automatic Breakpoints的使用
  9. Android项目实战之尚硅谷_硅谷p2p金融
  10. SPOJ - GCJ1C09C Bribe the Prisoners