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

大型网站建设公司排名婚庆策划公司名字大全

大型网站建设公司排名,婚庆策划公司名字大全,绍兴网站建设,在线做海报网站工厂模式定义#xff1a;提供创建对象的接口。 为何使用工厂模式 工厂模式是我们最常用的模式了#xff0c;著名的Jive论坛#xff0c;就大量使用了工厂模式#xff0c;工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用#xff1f;因为工厂模式就相当于…工厂模式定义提供创建对象的接口。 为何使用工厂模式 工厂模式是我们最常用的模式了著名的Jive论坛就大量使用了工厂模式工厂模式在Java程序系统可以说是随处可见。为什么工厂模式是如此常用因为工厂模式就相当于创建实例对象的new我们经常要根据类Class生成实例对象如A anew A() 工厂模式也是用来创建实例对象的所以以后new时就要多个心眼是否可以考虑实用工厂模式虽然这样做可能多做一些工作但会给你系统带来更大的可扩展性和尽量少的修改量。我们以类Sample为例 如果我们要创建Sample的实例对象    Sample samplenew Sample();可是实际情况是通常我们都要在创建sample实例时做点初始化的工作,比如赋值查询数据库等。首先我们想到的是可以使用Sample的构造函数这样生成实例就写成    Sample samplenew Sample(参数);但是如果创建sample实例时所做的初始化工作不是象赋值这样简单的事可能是很长一段代码如果也写入构造函数中那你的代码很难看了就需要Refactor重整。为什么说代码很难看初学者可能没有这种感觉我们分析如下初始化工作如果是很长一段代码说明要做的工作很多将很多工作装入一个方法中相当于将很多鸡蛋放在一个篮子里是很危险的这也是有背于Java面向对象的原则面向对象的封装(Encapsulation)和分派(Delegation)告诉我们尽量将长的代码分派“切割”成每段将每段再“封装”起来(减少段和段之间偶合联系性)这样就会将风险分散以后如果需要修改只要更改每段不会再发生牵一动百的事情。在本例中首先我们需要将创建实例的工作与使用实例的工作分开也就是说让创建实例所需要的大量初始化工作从Sample的构造函数中分离出去。这时我们就需要Factory工厂模式来生成对象了不能再用上面简单new Sample(参数)。还有,如果Sample有个继承如MySample按照面向接口编程我们需要将Sample抽象成一个接口。现在Sample是接口有两个子类MySample 和HisSample。我们要实例化他们时,如下    Sample mysamplenew MySample(); Sample hissamplenew HisSample();随着项目的深入Sample可能还会生出很多儿子出来那么我们要对这些儿子一个个实例化更糟糕的是可能还要对以前的代码进行修改加入后来生出儿子的实例.这在传统程序中是无法避免的。但如果你一开始就有意识使用了工厂模式这些麻烦就没有了。 工厂方法 你会建立一个专门生产Sample实例的工厂 public class Factory{public static Sample creator(int which){//getClass 产生Sample 一般可使用动态类装载装入类。if (which1)return new SampleA();else if (which2)return new SampleB();} }   那么在你的程序中如果要实例化Sample时就使用    Sample sampleAFactory.creator(1);这样在整个就不涉及到Sample的具体子类达到封装效果也就减少错误修改的机会这个原理可以用很通俗的话来比喻就是具体事情做得越多越容易范错误。这每个做过具体工作的人都深有体会相反官做得越高说出的话越抽象越笼统范错误可能性就越少。好象我们从编程序中也能悟出人生道理使用工厂方法要注意几个角色首先你要定义产品接口如上面的Sample产品接口下有Sample接口的实现类如SampleA其次要有一个factory类用来生成产品Sample如下图最右边是生产的对象Sample 进一步稍微复杂一点就是在工厂类上进行拓展工厂类也有继承它的实现类concreteFactory了。 抽象工厂 工厂模式中有工厂方法(Factory Method)和抽象工厂(Abstract Factory)。这两个模式区别在于需要创建对象的复杂程度上。如果我们创建对象的方法变得复杂了如上面工厂方法中是创建一个对象Sample如果我们还有新的产品接口Sample2。这里假设Sample有两个concrete类SampleA和SamleB而Sample2也有两个concrete类Sample2A和SampleB2那么我们就将上例中Factory变成抽象类将共同部分封装在抽象类中不同部分使用子类实现下面就是将上例中的Factory拓展成抽象工厂 public abstract class Factory{public abstract Sample creator();public abstract Sample2 creator(String name); } public class SimpleFactory extends Factory{public Sample creator(){ ......... return new SampleA }public Sample2 creator(String name){ ......... return new Sample2A } } public class BombFactory extends Factory{public Sample creator(){ ...... return new SampleB }public Sample2 creator(String name){ ...... return new Sample2B } }   从上面看到两个工厂各自生产出一套Sample和Sample2也许你会疑问为什么我不可以使用两个工厂方法来分别生产Sample和Sample2抽象工厂还有另外一个关键要点是因为 SimpleFactory内生产Sample和生产Sample2的方法之间有一定联系所以才要将这两个方法捆绑在一个类中这个工厂类有其本身特征也许制造过程是统一的比如制造工艺比较简单所以名称叫SimpleFactory。在实际应用中工厂方法用得比较多一些而且是和动态类装入器组合在一起应用 Java工厂模式举例 我们以Jive的ForumFactory为例这个例子在前面的Singleton模式中我们讨论过现在再讨论其工厂模式 public abstract class ForumFactory {private static Object initLock new Object(); private static String className com.jivesoftware.forum.database.DbForumFactory; private static ForumFactory factory null;public static ForumFactory getInstance(Authorization authorization) {//If no valid authorization passed in, return null.if (authorization null) { return null; }//以下使用了Singleton 单态模式if (factory null) {synchronized(initLock) {if (factory null) { ......try {//动态转载类Class c Class.forName(className);factory (ForumFactory)c.newInstance();} catch (Exception e) { return null; }}}}//Now, 返回 proxy.用来限制授权对forum的访问return new ForumFactoryProxy(authorization, factory,factory.getPermissions(authorization));}//真正创建forum的方法由继承forumfactory的子类去完成.public abstract Forum createForum(String name, String description)throws UnauthorizedException, ForumAlreadyExistsException;.... }   因为现在的Jive是通过数据库系统存放论坛帖子等内容数据如果希望更改为通过文件系统实现这个工厂方法ForumFactory就提供了提供动态接口    private static String className com.jivesoftware.forum.database.DbForumFactory;你可以使用自己开发的创建forum的方法代替com.jivesoftware.forum.database.DbForumFactory就可以。在上面的一段代码中一共用了三种模式除了工厂模式外还有Singleton单态模式以及proxy模式,proxy模式主要用来授权用户对forum的访问因为访问forum有两种人一个是注册用户一个是游客guest那么那么相应的权限就不一样而且这个权限是贯穿整个系统的因此建立一个proxy类似网关的概念可以很好的达到这个效果。看看Java宠物店中的CatalogDAOFactory public class CatalogDAOFactory {/*** 本方法制定一个特别的子类来实现DAO模式。* 具体子类定义是在J2EE的部署描述器中。*/public static CatalogDAO getDAO() throws CatalogDAOSysException{CatalogDAO catDao null;try {InitialContext ic new InitialContext();//动态装入CATALOG_DAO_CLASS//可以定义自己的CATALOG_DAO_CLASS从而在无需变更太多代码//的前提下完成系统的巨大变更。String className (String) ic.lookup(JNDINames.CATALOG_DAO_CLASS);catDao (CatalogDAO) Class.forName(className).newInstance();} catch (NamingException ne) {throw new CatalogDAOSysException( CatalogDAOFactory.getDAO: NamingException while getting DAO type : \n ne.getMessage());} catch (Exception se) {throw new CatalogDAOSysException(CatalogDAOFactory.getDAO: Exception while getting DAO type : \n se.getMessage());}return catDao;} }   CatalogDAOFactory是典型的工厂方法catDao是通过动态类装入器className获得CatalogDAOFactory具体实现子类这个实现子类在Java宠物店是用来操作catalog数据库用户可以根据数据库的类型不同定制自己的具体实现子类将自己的子类名给与CATALOG_DAO_CLASS变量就可以。由此可见工厂方法确实为系统结构提供了非常灵活强大的动态扩展机制只要我们更换一下具体的工厂方法系统其他地方无需一点变换就有可能将系统功能进行改头换面的变化。 系列文章 Java设计模式1工厂模式Factory模式 Java设计模式2单态模式Singleton模式 Java设计模式3建造者模式Builder模式 Java设计模式4原型模式Prototype模式 Java设计模式5共享模式/享元模式Flyweight模式 Java设计模式6桥模式Bridge模式 Java设计模式7装饰模式Decorator模式 Java设计模式8组合模式Composite模式 Java设计模式9适配器模式Adapter模式 Java设计模式10代理模式Proxy模式 Java设计模式11外观模式Facade模式 Java设计模式12迭代模式Iterator模式 Java设计模式13模板模式Template模式 Java设计模式14责任链模式Chain of Responsibility模式 Java设计模式15备忘录模式Memento模式 Java设计模式16中介模式Mediator模式 Java设计模式17解释器模式Interpreter模式 Java设计模式18策略模式Strategy模式 Java设计模式19状态模式State模式 Java设计模式20观察者模式Observer模式 Java设计模式21访问模式Visitor者模式 Java设计模式22命令模式Command模式  转载于:https://www.cnblogs.com/Coda/p/4279688.html
http://wiki.neutronadmin.com/news/111578/

相关文章:

  • 威海哪里做网站网站seo资讯
  • 河东做网站长沙县 网站建设
  • 京东云网站建设网站建设为什么这么贵
  • 门户网站是什么意思?长沙给中小企业做网站的公司
  • 枣强网站建设公司电子杂志网站建设
  • 网站建设免费按词收费国外最开放的浏览器
  • 一小时学做网站php 打开网站
  • 织梦网站怎么做上海网页制作步骤
  • 建设工程合同有哪些种类广州企业网站seo
  • 网络站点推广的方法有哪些通州网站建设是什么
  • 网站第三方登录怎么做工商局网站实名认证怎么做
  • 定制型营销网站建设怎么做企业网站二维码扫描
  • 电商网站开发实战视频教程网站有收录没权重
  • 重庆推广网站排名公司国外做网站
  • 上海品牌网站建设整站优化和关键词优化的区别
  • 凡科 360免费建站首页html模板
  • c 网站开发项目北京工商网上登记申请平台
  • 网站设计一般多长时间静态网页模板简约
  • 域名 网址 网站名称成都网站建设 3e
  • 南昌制作网站的公司吗wordpress 调用GPS
  • 宁波企业网站搭建图片公司网站制作内容
  • 6入空间网站免费观看手机模板制作软件app
  • 怎么做二手房网站美的公司网站建设的目的
  • 遂宁商城网站建设报价专业网站制作公司招聘
  • 学校联系我们网站制作哪个网站名片做的号
  • 做ppt图片用的网站上海做网站的公
  • 网站开发自学资料上海网站建设领导品牌
  • 电子商务网站建设报价阿里巴巴企业邮箱登录入口
  • 深圳网站建设龙华1有免费建网站
  • 成都网站建设哪家好文章公众号如何开通