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

网站建设可以自学吗广州手机网站建设报价

网站建设可以自学吗,广州手机网站建设报价,什么是网络营销?网络营销与电商营销有什么区别?,网络科技有限公司起名大全参考之前我们学习了一些设计模式#xff0c;今天我们剖析Java JDK 源码中用到的几种常见的设计模式。 1-jdk之工厂模式 在前面讲到工厂模式的时候#xff0c;大部分工厂类都是以Factory作为后缀来命名#xff0c;并且工厂类主要负责创建对象这样一件事情。但在实际的项目开发中…之前我们学习了一些设计模式今天我们剖析Java JDK 源码中用到的几种常见的设计模式。 1-jdk之工厂模式 在前面讲到工厂模式的时候大部分工厂类都是以Factory作为后缀来命名并且工厂类主要负责创建对象这样一件事情。但在实际的项目开发中工厂类的设计更加灵活。那我们就来看下工厂模式在Java JDK中的一个应用java.util.Calendar。 public static Calendar getInstance(){return createCalendar(TimeZone.getDefault(), Locale.getDefault(Locale.Category.FORMAT)); }private static Calendar createCalendar(TimeZone zone,Locale aLocale){CalendarProvider provider LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale).getCalendarProvider();if (provider ! null) {try {return provider.getInstance(zone, aLocale);} catch (IllegalArgumentException iae) {// fall back to the default instantiation}}Calendar cal null;if (aLocale.hasExtensions()) {String caltype aLocale.getUnicodeLocaleType(ca);if (caltype ! null) {switch (caltype) {case buddhist:cal new BuddhistCalendar(zone, aLocale);break;case japanese:cal new JapaneseImperialCalendar(zone, aLocale);break;case gregory:cal new GregorianCalendar(zone, aLocale);break;}}}if (cal null) {if (aLocale.getLanguage() th aLocale.getCountry() TH) {cal new BuddhistCalendar(zone, aLocale);} else if (aLocale.getVariant() JP aLocale.getLanguage() ja aLocale.getCountry() JP) {cal new JapaneseImperialCalendar(zone, aLocale);} else {cal new GregorianCalendar(zone, aLocale);}}return cal;} getInstance()方法可以根据不同TimeZone和Locale创建不同的Calendar子类对象比如BuddhistCalendar、JapaneseImperialCalendar、GregorianCalendar这些细节完全封装在工厂方法createCalendar中使用者只需要传递当前的时区和地址就能够获得一个Calendar类对象来使用而获得的对象具体是哪个Calendar子类的对象使用者在使用的时候并不关心。 2-jdk之建造者模式 建造者模式有两种实现方法一种是单独定义一个Builder类另一种是将Builder实现为原始类的内部类。Calendar就采用了第二种实现思路。 public static class Builder {private static final int NFIELDS FIELD_COUNT 1; // 1 for WEEK_YEARprivate static final int WEEK_YEAR FIELD_COUNT;private long instant;//省略其他的成员变量} 在Builder里面还有build方法来创建Calendar类对象既然已经有了getInstance()工厂方法来创建Calendar类对象为什么还要用Builder来创建Calendar类对象呢这两者之间的区别在哪里呢工厂模式是用来创建不同但是相关类型的对象继承同一父类或者接口的一组子类由给定的参数来决定创建哪种类型的对象。建造者模式用来创建一种类型的复杂对象通过设置不同的可选参数“定制化”地创建不同的对象。 粗看Calendar的Builder类的build()方法你可能会觉得它有点像工厂模式。你的感觉没错前面一半代码确实跟getInstance()工厂方法类似根据不同的type创建了不同的Calendar子类。实际上后面一半代码才属于标准的建造者模式根据setXXX()方法设置的参数来定制化刚刚创建的Calendar子类对象。 3-jdk之装饰器模式 Java IO类库是装饰器模式的非常经典的应用。实际上Java的Collections类也用到了装饰器模式。Collections类是一个集合容器的工具类提供了很多静态方法用来创建各种集合容器比如通过unmodifiableColletion()静态方法来创建UnmodifiableCollection类对象。而这些容器类中的UnmodifiableCollection类、CheckedCollection和SynchronizedCollection类就是针对Collection类的装饰器类。 装饰器模式中的装饰器类是对原始类功能的增强。UnmodifiableCollection的构造函数接收一个Collection类对象然后对其所有的函数进行了包裹Wrap重新实现比如add()函数或者简单封装比如stream()函数。而简单的接口实现或者继承并不会如此来实现UnmodifiableCollection类。所以从代码实现的角度来说UnmodifiableCollection类是典型的装饰器类。 4-jdk之适配器模式 老版本的JDK提供了Enumeration类来遍历容器。新版本的JDK用Iterator类替代Enumeration类来遍历容器。为了兼容老的客户端代码使用老版本JDK的代码我们保留了Enumeration类并且在Collections类中仍然保留了enumaration()静态方法因为我们一般都是通过这个静态函数来创建一个容器的Enumeration类对象。 在新版本的JDK中Enumeration类是适配器类。它适配的是客户端代码使用Enumeration类和新版本JDK中新的迭代器Iterator类。不过从代码实现的角度来说这个适配器模式的代码实现跟经典的适配器模式的代码实现差别稍微有点大。enumeration()静态函数的逻辑和Enumeration适配器类的代码耦合在一起enumeration()静态函数直接通过new的方式创建了匿名类对象。  public static T EnumerationT enumeration(final CollectionT c) {return new EnumerationT() {private final IteratorT i c.iterator();public boolean hasMoreElements() {return i.hasNext();}public T nextElement() {return i.next();}}; } 5-jdk之模板模式 Java中的Collections类的sort()函数就是利用了模板模式的这个扩展特性。Collections.sort()实现了对集合的排序。为了扩展性它将其中“比较大小”这部分逻辑委派给用户来实现。如果我们把比较大小这部分逻辑看作整个排序逻辑的其中一个步骤那我们就可以把它看作模板模式。不过从代码实现的角度来看它看起来有点类似之前讲过的JdbcTemplate并不是模板模式的经典代码实现而是基于Callback回调机制来实现的。 6-jdk之观察者模式 之前我们讲解观察者模式的时候说到Google Guava的EventBus框架它提供了观察者模式的骨架代码使用EventBus。Java JDK也提供了观察者模式的简单框架实现。只包含两个类java.util.Observable和java.util.Observer。前者是被观察者后者是观察者。 7-jdk之单例模式 JDK中java.lang.Runtime类就是一个单例类。每个Java应用在运行时会启动一个JVM进程每个JVM进程都只对应一个Runtime实例用于查看JVM状态以及控制JVM行为。进程内唯一所以比较适合设计为单例。在编程的时候我们不能自己去实例化一个Runtime对象只能通过getRuntime()静态方法来获得。它使用了最简单的饿汉式的单例实现方式。 public class Runtime {private static Runtime currentRuntime new Runtime();public static Runtime getRuntime() {return currentRuntime;}/** Dont let anyone else instantiate this class */private Runtime() {}//....public void addShutdownHook(Thread hook) {SecurityManager sm System.getSecurityManager();if (sm ! null) {sm.checkPermission(new RuntimePermission(shutdownHooks));}ApplicationShutdownHooks.add(hook);}//. 8-jdk之其他模式 享元模式Integer类中的-128~127之间的整型对象是可以复用的还讲到String类型中的常量字符串也是可以复用的。这些都是享元模式的经典应用。 职责链模式Java Servlet中的Filter就是通过职责链来实现的同时还对比了Spring中的interceptor。实际上拦截器、过滤器这些功能绝大部分都是采用职责链模式来实现的。 迭代器模式重点剖析了Java中Iterator迭代器的实现。
http://www.w-s-a.com/news/188642/

相关文章:

  • 服装商城的网站建设宿迁论坛
  • 网站建设服务市场趋势淮南市网站开发的方式
  • 交互设计包含网站设计wordpress和discuz共存
  • 淮阳城乡建设局网站在线网页翻译软件
  • 什么是电商视觉设计郑州seo服务
  • google网站设计原则青海网站建设与管理
  • 简述网站的创建流程广西网站建设定制
  • 唐河网站制作汉中建设工程招标新闻中心
  • 网站过期就可以抢注PHP框架和wordpress
  • 天津做网站得公司克隆网站到wordpress修改
  • 郫县网站建设网站建设报价单及项目收费明细表
  • 商标做网站logo建网站作业
  • 网站顶部展出的大幅广告中建八局第二建设有限公司
  • 公众微信绑定网站帐号优秀中文网页设计
  • 如何做漫画赚钱的网站企业网站管理系统c
  • 安康公司网站制作搜狗网站
  • 太仓住房与城乡建设局网站注册推广赚钱一个80元
  • wordpress 网站生成app企业网站改版的好处
  • 广州建站服务怎么让客户做网站
  • 南京手机网站设计公司wordpress导航页
  • 娄底市建设网站app网站开发小程序
  • 刷粉网站推广免费网站建设找王科杰信誉
  • 投标建设用地是哪个网站微信小程序多少钱
  • 做玄幻封面素材网站我国数字经济报告
  • 手机网站返回跳转wordpress带颜色的文字
  • 微信群领券网站怎么做创意广告图片
  • 跟我一起做网站嘉兴做网站哪家好
  • 上海知名建站公司山东住房和建设庭网站
  • 深圳市城乡建设部网站首页平台设计方案怎么做
  • 深圳美食教学网站制作wordpress列表图显示标题