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

网站前端做出来后台怎么做网络推广的基本渠道

网站前端做出来后台怎么做,网络推广的基本渠道,桂林漓江门票多少钱一张,电子网站建设推广方案之前我们学习了一些设计模式,今天我们剖析Java JDK 源码中用到的几种常见的设计模式。 1-jdk之工厂模式 在前面讲到工厂模式的时候,大部分工厂类都是以Factory作为后缀来命名,并且工厂类主要负责创建对象这样一件事情。但在实际的项目开发中…

之前我们学习了一些设计模式,今天我们剖析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> Enumeration<T> enumeration(final Collection<T> c) {return new Enumeration<T>() {private final Iterator<T> 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;}/** Don't 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.ysxn.cn/news/3077.html

相关文章:

  • 长春火车站疫情防控咨询电话广告推广文案
  • seo网站排名查询seo搜索优化网站推广排名
  • org域名做商业网站网站建设加推广优化
  • 现在有什么网站做设计或编程兼职西安百度推广运营
  • gif网站素材网络公司优化关键词
  • wordpress论坛程序沈阳seo排名公司
  • 花店网站建设构思镇江网站定制
  • 重庆网站建设公司招聘seo发帖软件
  • 代码大全可复制seo主要是指优化
  • 上海定制网站建设费用整站优化关键词排名
  • 书画网站免费源码互联网营销师培训多少钱
  • 邢台建设一个企业网站中国新闻最新消息今天
  • 仙游莆田交友网站哪里做网络推广
  • wordpress做社交网站2024年小学生简短小新闻
  • php网站建设题目查询关键词
  • 电影的网站做他妈的没完没了没了吗网络策划书范文
  • 开发电子商务网站和其他网站搜狗引擎搜索
  • 万网域名怎样把淘宝网站加进去域名注册查询
  • 如何创建一个自己的博客福州seo网址优化公司
  • 什么直播可以做游戏视频网站吗国外网站搭建
  • 保定网站制作策划短网址在线生成
  • 做网站用哪个电脑关键词优化一年的收费标准
  • 做食品的采购员常用网站百度网盘登录入口网页版
  • 山东联迪建设集团网站站长工具无内鬼放心开车禁止收费
  • 木材模板.网站搜一搜排名点击软件
  • 做影视后期应该关注哪些网站seo整站优化系统
  • 贵州网站建设营销公司长沙seo运营
  • 大连手机自适应网站建设报价seo网站优化公司
  • h5哪个网站可以做b站黄页推广
  • 旅游电子商务网站推广策略分析独立站seo推广