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

哈尔滨城乡建设局网站首页上海资讯

哈尔滨城乡建设局网站首页,上海资讯,做网站的职业叫什么,东莞网站建设方案服务工厂方法模式–制造细节无需知 前面介绍过简单工厂模式#xff0c;简单工厂模式只是最基本的创建实例相关的设计模式。在真实情况下#xff0c;有更多复杂的情况需要处理。简单工厂生成实例的类#xff0c;知道了太多的细节#xff0c;这就导致这个类很容易出现难维护、灵…工厂方法模式–制造细节无需知 前面介绍过简单工厂模式简单工厂模式只是最基本的创建实例相关的设计模式。在真实情况下有更多复杂的情况需要处理。简单工厂生成实例的类知道了太多的细节这就导致这个类很容易出现难维护、灵活性差的问题。就像我们去饭店吃饭只需要付钱等成品不需要了解这盘菜是怎么做的如何加工的。 简单工厂 再来回顾下简单工厂模式的计算器功能的工厂类。 public static Operation createOperate(String operate) {Operation oper null;switch (operate) {case :oper new Add();break;case -:oper new Sub();break;case *:oper new Mul();break;case /:oper new Div();break;}return oper; }客户端调用时 Operation operate OperationFactory.createOperate(strOperate); double result operate.getResult(numberA, numberB);当使用工厂方法模式实现 实际就是对简单工厂中的细节部分进行再封装让这个工厂类不需要知道很多的实现细节。是这样子吗体验一下子。 结构图如下 先构建一个工厂接口 public interface IFactory {Operation createOperation(); }然后加减乘除的工厂都去实现这个接口并实现自己的createOeration()方法 // 加法工厂 public class AddFactory implements IFactory {Overridepublic Operation createOperation() {return new Add();} }// 减法工厂 public class SubFactory implements IFactory {Overridepublic Operation createOperation() {return new Sub();} }// 乘法工厂 public class MulFactory implements IFactory {Overridepublic Operation createOperation() {return new Mul();} }// 除法工厂 public class DivFactory implements IFactory {Overridepublic Operation createOperation() {return new Div();} }那么在对外工厂类中就可以这么实现 public class OperationFactory {public static Operation createOperate(String operate) {Operation oper null;IFactory factory null;switch (operate) {case :factory new AddFactory();break;case -:factory new SubFactory();break;case *:factory new MulFactory();break;case /:factory new DivFactory();break;}oper factory.createOperation();return oper;}}当我需要增加新的运算功能时需要增加运算类运算工厂类一下增加了好几个类这样是不是变得更麻烦了 简单工厂VS工厂方法 简单工厂模式的最大优点在于工厂类中包含必要的逻辑判断根据客户端的选择条件动态实例化相关的类对于客户端来说去除了与具体产品的依赖。 就像计算器工厂类客户端只需要传入一个或别的就能得到想要的功能算法。 但是当我们继续增加计算器功能时比如增加一个指数运算增加一个对数运算要去不断修改OperationFactory类就违背了开放-封闭原则。那我们该如何降低这种风险呢?就需要使用到工厂方法模式 我们应该尽量将长的代码分派切割成小段再将每一小段封装起来减少每段代码之间的耦合这样风险就分散了需要修改或扩展的难度就降低了。 再以计算器功能为例项目起初我们只知道加减乘除的功能那我们就可以将这四个功能定义为基础运算工厂也就是说前期功能是确定的作为基础功能我们就没有必要给加减乘除类增加冗余的工厂了。 后来增加了指数、对数运算我们定义为高级运算工厂。 那么其实并不是如上面的代码所讲加减乘除功能每一个功能需要一个工厂类。而是将加减乘除用一个基础工厂来创建而后面增加新的产品功能又不想影响原有的工厂代码于是就扩展一个新的工厂来处理即可。 工厂方法模式定义一个用于创建对象的接口让子类决定实例化哪个类。工厂方法使一个类的实例化延迟到子类 修改结构图: 新增两个运算类(指数和对数) // 指数 public class Pow extends Operation {Overridepublic double getResult(double numberA, double numberB) {return Math.pow(numberA, numberB);} }// 对数运算 public class Log extends Operation {Overridepublic double getResult(double numberA, double numberB) {return Math.log(numberB) / Math.log(numberA);} }工厂接口不变 public interface IFactory {Operation createOperation(String operType); }基础运算工厂类此类已经比较成熟稳定实现后应该封装到位不建议轻易修改此类 public class FactoryBase implements IFactory {Overridepublic Operation createOperation(String operate) {Operation oper null;switch (operate) {case :oper new Add();break;case -:oper new Sub();break;case *:oper new Mul();break;case /:oper new Div();break;}return oper;} }高级运算工厂类也许还有扩展产品的可能性 public class FactoryAdvanced implements IFactory {Overridepublic Operation createOperation(String operType) {Operation oper null;switch (operType) {case pow:oper new Pow();break;case log:oper new Log();break;}return oper;} }那么最后一步就是对外工厂类根据传入的参数选择具体使用哪个工厂类。 public class OperationFactory {public static Operation createOperate(String operate) {Operation oper null;IFactory factory null;switch (operate) {case :case -:case *:case /:factory new FactoryBase();break;case pow:case log:factory new FactoryAdvanced();}oper factory.createOperation(operate);return oper;}}总结 工厂方法模式是简单工厂模式的进一步抽象和推广。工厂方法模式本质就是对获取对象过程的抽象。 对于复杂的参数的构造对象可以很好地对外层屏蔽代码的复杂性有很好的解耦能力。
http://www.tj-hxxt.cn/news/135310.html

相关文章:

  • 网站建设与规划实验心得wordpress免费主题网站
  • 建立网站多少钱一年用户体验设计经典案例
  • 七牛怎么做网站服务器wordpress重定向插件
  • 做网站还是订阅号北京企业建站定制
  • 网站网站做代理做网站 需要审核么
  • 先做个在线电影网站该怎么做省工程建设信息网
  • 网站建设接单网站开发移动端
  • 如何做自己的网站百度推广重庆手机网站推广
  • 外贸建站优化撤销网站备案
  • flash全屏网站模板厦门网站建设工程
  • 网站推广软文欣赏优秀的字体设计网站
  • 做视频推广有哪几个网站搜索引擎优化论文3000字
  • VS2010做网站登录页面步骤wordpress删除侧边栏
  • 最新网站网址永久发布wordpress水滴
  • 站长工具seo综合查询张家界新娘东莞网站建设图表
  • 淄博团购网站建设推广网站平台免费
  • 网站怎么进行优化做自媒体搬运文章的网站
  • 建材网站模板做网站需要公章吗
  • 网站建设可行性方案模板怎么做表格
  • 避免网站侵权1m带宽做网站快不
  • 在那个网站做ppt可以赚钱网站建设什么专业
  • 内网门户网站建设互联网推广员是做什么
  • 运营企业网站怎么赚钱个人备案网站可以做淘宝客吗
  • 网站可信网站建设与维护课难吗
  • 网站默认首页文件顺序WordPress 微信小程序登录
  • 招商网站建站装潢设计网
  • 重庆涪陵网站设计公司哪家专业花生棒 做网站
  • 网站宣传的好处html美食网页设计源码
  • 台州网站建设策划怎么做自助交易网站
  • 陕西专业网站开发联系电话陕西省建设网信息截图