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

ps图做ppt模板下载网站有哪些山东天成水利建设 网站

ps图做ppt模板下载网站有哪些,山东天成水利建设 网站,蔬菜网站建设,牡丹江建设工程信息网站装饰图案 自从第一次学习编程设计模式以来#xff0c;装饰器模式一直是我的最爱。 在我看来#xff0c;这是一个很新颖的想法#xff0c;比其他想法有趣得多。 不要误会我的意思#xff0c;其他大多数人也引起了我的注意#xff0c;但没有什么比装饰器模式更重要。 至今装饰器模式一直是我的最爱。 在我看来这是一个很新颖的想法比其他想法有趣得多。 不要误会我的意思其他大多数人也引起了我的注意但没有什么比装饰器模式更重要。 至今它仍然是我的最爱之一。 如果您不熟悉设计模式我强烈建议您采用Head First Design Patterns 。如果您只是想了解装饰器模式请参见这本书的装饰器章节摘录 。 我个人认为装饰器模式通常没有得到充分利用。 可能有几个原因。 一方面我认为这不适用于所有情况。 另外装饰器模式可以解决的问题通常很难发现。 是什么让该模式如此令我赞叹这是因为可能很难弄清楚该模式在哪里的原因这是一个不寻常的想法。 就是说直到您对“继承之上的构成”的原理非常熟悉为止。 太多的地方将继承深深地打入您的脑海以至于使人难以相信组合通常是比继承更好的主意。 无论如何装饰器模式不仅是我最喜欢的模式而且在Java 8我最喜欢的新功能之一中也强烈使用了它Stream API。 实际上我要向您展示的大部分内容都在很大程度上模仿了Stream API的某些行为。 问题 假设您有一个字符串列表但它们可能有也可能没有不需要的前导或尾随空格。 您可能会这样做以消除不需要的空间。 List untrimmedStrings aListOfStrings(); List trimmedStrings new ArrayList();for(String untrimmedString : untrimmedStrings) {trimmedStrings.add(untrimmedString.trim()); }//use trimmed strings... 在这种情况下您将创建一个全新的字符串列表并用第一个列表中的字符串填充它但会对其进行修剪。 这有几个问题。 首先它立即创建了一个完整的新列表。 相反每个经过修剪的String的创建都可以延迟到需要时才进行甚至在不需要时也永远不会完成。 另外如果有人想添加更多字符串则必须将它们添加到两个列表中。 您还必须确保先修剪新的字符串然后再将它们放入修剪的列表中。 最后此代码是命令性的而不是声明性的。 让我们看一下代码的更具声明性的版本然后看看如何使用它来解决其他问题。 List untrimmedStrings aListOfStrings(); List trimmedStrings trimmed(untrimmedStrings);//use trimmed strings... 哎呀该trimmed函数可能会发生任何事情 看看那个 它返回字符串列表就像前面的方法一样。 这样做的好处对吧 错误。 是的该函数从技术上讲可以做与我们之前所做的相同的事情这意味着我们所做的只是使外部代码具有声明性。 但是在此示例中它打算是一个静态工厂方法带有静态导入该方法创建一个新的Trimmed对象该对象包装了untrimmedStrings列表。 Trimmed实现了List接口但它几乎将所有内容都委派给包装的列表但通常具有修饰的功能。 添加或删除新的String时通过对包装的列表进行处理可以对两个列表进行“合并”。 并且当它添加新的String时可以按原样添加它但是只需要确保在输出时将其修剪即可。 另外由于仅在从列表中提取数据时才进行修剪因此我们不必立即完成修剪每个String的所有工作。 有可能甚至无法处理某些字符串因此永远不会不必要地修剪那些字符串。 但是这有一些缺点。 一种如果修剪过的字符串多次从列表中拉出则最终每次都会修剪。 这不会占用任何额外的内存但是会增加一些时间尤其是如果您遍历整个列表几次。 其次它会产生修剪后的列表和未修剪的列表为同一列表的副作用。 无论我们是否想要更改一个都会影响另一个。 我不想在本文中浪费太多时间和空间以向您展示完全创建的Trimmed的List实现为List定义了30多种方法所以我将对其进行调整以便仅定义的可迭代方法。 由于在很多时候您真正要做的就是遍历集合因此必须相对可以接受。 public class Trimmed implements Iterable {public static List trimmed(List base) {return base;}public Trimmed(Iterable base){this.base base;}public Iterator iterator(){return new TrimmedIterator(base.iterator());}private Iterable base; }class TrimmedIterator implements Iterator {public TrimmedIterator(Iterator base){this.base base;}public boolean hasNext(){return base.hasNext();}public String next(){return base.next().trim();}public void remove(){throw new UnsupportedOperationException();}private Iterator base; }如何装饰对象 我不记得有人在任何地方提及此事但这很重要因此我想告诉您。 有两种关于装饰对象的基本思想。 第一种是当您简单地传入传入装饰/包装的对象创建装饰器的新实例时。第二种方法是在要装饰的对象上调用一个方法。 这两个选项都显示在这里 MyCollection untrimmedStrings aCollectionOfStrings();//new Decorator Instance MyCollection trimmedStrings new TrimmingDecorator(untrimmedStrings);//OR//method call on the to-be-decorated object MyCollection trimmedStrings2 untrimmedStrings.trimmed(); 而且trimmed的代码如下所示 public MyCollection trimmed() {return new TrimmingDecorator(this); } 每种方法都有其优点和缺点。 由于每个选项的弊端本质上都缺乏另一个选项的优点因此我只列出每个选项的优点。 新实例专家 比方法调用选项可扩展因为方法调用必须尝试覆盖装饰器的所有可能性 用户可以更轻松地看到它是装饰器模式 可修饰界面中所需的方法更少 方法调用的优点 如果用户不需要知道则隐藏装饰器实现 用户端没有明确的“新”关键字通常被认为是不好的 用户可以轻松找到所有装饰器因为它们都在可装饰对象的界面上列出了 Java的原始IO库是新实例修饰的一个很好的例子而Java 8中的Stream API是方法调用修饰的一个很好的例子。 我个人的喜好是使用方法调用选项因为它使所有可能性对用户显而易见但是如果要这样做则用户也可以使用自己的装饰器扩展对象那么您绝对应该使用新的实例路由。 翻译自: https://www.javacodegeeks.com/2015/01/transforming-collections-with-decorators.html
http://www.zqtcl.cn/news/736409/

相关文章:

  • 网站改版做301重定向百度站长平台查询
  • 织梦网站后台网址妙影免费模板下载
  • 甘肃网站建设开发怎么利用花生壳做自己的网站
  • 怎么查询网站开通时间建个短视频网站
  • 物流网站建设广东网站建设效果
  • 网站推广工作流程图天蝎网站建设
  • 备案ip 查询网站查询网站校园门户网站建设方案
  • 网站seo快速优化技巧建设网站的需要学习哪些课程
  • 网站建设微信托管wordpress p=
  • 专业手机网站制作哪家好吉林建筑大学本科招生网
  • 建立一个网站需要哪些google和百度等相关网站的广告词
  • 手机开发网站教程做古建的那些网站比较适合
  • 网站建设公司的前景长沙商城网站开发
  • 大型网站tag标签 索引自己做网站需要哪些软件
  • 石排做网站万网网站备案流程
  • 南京建设银行网站首页简单的ui界面制作
  • 门户网站 建设 如何写如何布置网站
  • 网站前台功能模块介绍建设银行信用卡网站是哪个好
  • 用python做网站我那些网站开发开发语言
  • 建设网站怎样做安卓app软件公司
  • 重庆seo整站优化效果上海城建建设官方网站
  • 做淘宝要网站兰州画册设计
  • 外贸网站排行榜前十名电影网站标题怎么做流量多
  • 网站建设吉金手指专业13网站备案完成后不解析
  • 社保网站减员申报怎么做长春建筑网站
  • 网站开发用原生wordpress读者墙
  • 食品网站网页设计成都建网页
  • 网站建设 珠海专业团队表情包张伟
  • 建设铝合金窗网站.net制作网站开发教程
  • 网站后台服务器内部错误wordpress 多级菜单