当前位置: 首页 > news >正文

律师个人网站源码神马网站快速排名案例

律师个人网站源码,神马网站快速排名案例,wordpress ftp设置方法,wordpress 隐藏更新提示最新学习了刘伟老师的设计模式:简单工厂模式, 史上最全设计模式导学目录(完整版)_刘伟技术博客-CSDN博客 工厂三兄弟之简单工厂模式(一)_刘伟技术博客-CSDN博客工厂三兄弟之简单工厂模式(二&a…

最新学习了刘伟老师的设计模式:简单工厂模式,

史上最全设计模式导学目录(完整版)_刘伟技术博客-CSDN博客

工厂三兄弟之简单工厂模式(一)_刘伟技术博客-CSDN博客工厂三兄弟之简单工厂模式(二)_刘伟技术博客-CSDN博客工厂三兄弟之简单工厂模式(三)_刘伟技术博客-CSDN博客工厂三兄弟之简单工厂模式(四)_刘伟技术博客-CSDN博客

做一下后面的练习题

练习

使用简单工厂模式设计一个可以创建不同几何形状(如圆形、方形和三角形等)的绘图工具,每个几何图形都具有绘制draw()和擦除erase()两个方法,要求在绘制不支持的几何图形时,提示一个UnSupportedShapeException。

先分析问题: 首先是有图形工具,可以创建不同形状,工具里面有两个方法,绘制daw()和擦除erase()。

首先定义一个抽象类Shape,并针对抽象类Shape定义一个工厂类ShapeFactory

package com.pattern.simplefactory;public abstract class Shape {/*** 绘制方法*/abstract void draw();/**** 擦除方法*/protected void erase(){for (int i = 0; i < 10; i++) {System.out.println();}}
}

定义具体的形状

package com.pattern.simplefactory;
/*** 圆形*/
public class ShapeCircular extends Shape{@Overridepublic void draw() {int r=8;//圆形的半径for (int y = 0; y <= 2 * r; y += 2) {//y的步长为2,改变y的步长可以将圆形变成椭圆int x = (int)Math.round(r - Math.sqrt(2 * r * y - y * y));int len = 2 * (r - x);for (int i = 0; i <= x; i++) {System.out.print(' ');}System.out.print('*');for (int j = 0; j <= len; j++) {System.out.print('*');}System.out.println('*');}}
}package com.pattern.simplefactory;
/*** 方形*/
public class ShapeSquare extends Shape{@Overridevoid draw() {int i = 5;for (int j = 0; j <= i; j++) {for (int k = 0; k <= i; k++) {System.out.print(" * ");}System.out.println();}}
}package com.pattern.simplefactory;
/*** 三角形*/
public class ShapeTriangle extends Shape{@Overridevoid draw() {int i= 5;for (int j = 0; j <= i; j++) {int spea = (i-j);for (int k = 0; k < spea; k++) {System.out.print(" ");}for (int k = 0; k < j; k++) {System.out.print("*");}for (int k = 0; k < j-1; k++) {System.out.print("*");}System.out.println();}}
}

然后创建具体的工厂类ShapeFactory,其中如果有不支持的图形就报UnSupportedShapeException错误。:

package com.pattern.simplefactory;import java.util.HashMap;
import java.util.Map;/*** 图形工厂*/
public class ShapeFactory {private static String Circular = "Circular";private static String Square = "Square";private static String Triangle = "Triangle";public static Shape getShape(String shapeStr){Shape shape = null;if(Circular.equals(shapeStr)){shape = new ShapeCircular();}else if(Square.equals(shapeStr)){shape = new ShapeSquare();}else if(Triangle.equals(shapeStr)){shape = new ShapeTriangle();}else{throw new UnSupportedShapeException();}return shape;}
}

最后定义一个UnSupportedShapeException类 继承RuntimeException

package com.pattern.simplefactory;public class UnSupportedShapeException extends RuntimeException{
}

最后测试一下:

package com.pattern.simplefactory;public class Client {public static void main(String[] args) {//打印方形Shape shape = ShapeFactory.getShape("Square");shape.draw();//打印三角形Shape shape1 = ShapeFactory.getShape("Triangle");shape1.draw();//打印圆形Shape shape2 = ShapeFactory.getShape("Circular");shape2.draw();//擦除shape2.erase();}
}

最后运行结果:

 然后再思考一下,在工厂里面如果多次调用同一种形状每次会new一个全新的Shape.并且每次创建的Shape本身也并没有什么差别。这里可以用享元模式的思路来做一下改善:

这里给一个享元模式入口史上最全设计模式导学目录(完整版)_刘伟技术博客-CSDN博客

享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。

package com.pattern.simplefactory;import java.util.HashMap;
import java.util.Map;/*** 图形工厂*/
public class ShapeFactory {private static String Circular = "Circular";private static String Square = "Square";private static String Triangle = "Triangle";private static Map<String,Shape> shapeMap = new HashMap<>();public static Shape getShape(String shapeStr){Shape shape = null;//享元模式if(shapeMap.containsKey(shapeStr)){shape = shapeMap.get(shapeStr);return shape;}if(Circular.equals(shapeStr)){shape = new ShapeCircular();}else if(Square.equals(shapeStr)){shape = new ShapeSquare();}else if(Triangle.equals(shapeStr)){shape = new ShapeTriangle();}else{throw new UnSupportedShapeException();}shapeMap.put(shapeStr, shape);return shape;}
}

http://www.hkea.cn/news/940059/

相关文章:

  • 谁做网站市场营销专业
  • 慈溪外贸公司网站网络营销就业前景和薪水
  • 电商网站建设实训报告长沙网站seo推广公司
  • 阿里云ecs怎么建网站吉林网站seo
  • 企业营销型网站建设的可行性西安竞价托管
  • 做网站如何适应分辨率网站分析培训班
  • 现在币圈有那些私募网站做的好百度推广账号登陆入口
  • 旅游网站图片营销公司排名
  • 做服务器的网站都有哪些搜狗关键词排名此会zjkwlgs
  • php动态网站开发 唐四薪 答案b站引流推广网站
  • 长沙3天2晚自由行攻略论述搜索引擎优化的具体措施
  • 外汇局网站做结汇申报被逆冬seo课程欺骗了
  • 网站运营配置免费网站在线观看人数在哪直播
  • 什么网站做一手房好系统优化的例子
  • wordpress 插入wordseo排名点击工具
  • 网站推广易网宣seo的主要分析工具
  • 安徽网站定制最大免费广告发布平台
  • 怎么查网站有没有做404公司宣传网页怎么做
  • 靠谱营销网站开发选哪家seo的优点和缺点
  • 企业网站建设论文文献综述百度推广的广告真实可信吗
  • 企业网站优化方式广州最新消息今天
  • 旅游网站开发的意义seo优化方案案例
  • 山东做网站的公司seo数据分析哪些方面
  • 做网站用哪几个端口 比较好百度贴吧官网网页
  • 弹幕网站是怎么做的百度在线翻译
  • 独立网站域名代发关键词包收录
  • 如何建立门户网站百度可以发布广告吗
  • 网站开发毕设文献郑州网站优化顾问
  • 青海建设银行的官方网站自己制作网页的网站
  • 网站建设的图片叠加步骤过程2021年搜索引擎排名