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

自助建网站信息发布企业seo算法优化

自助建网站信息发布企业,seo算法优化,分析某个网站建设,360免费建站域名工厂方法模式(Factory Method Pattern),又称工厂模式,也叫虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Pactory Pattern),属于类创建型模式。 我们知道…

工厂方法模式(Factory Method Pattern),又称工厂模式,也叫虚拟构造器模式(Virtual Constructor Pattern)或多态工厂模式(Polymorphic Pactory Pattern),属于类创建型模式。

        我们知道简单工厂模式最大的缺点就是当有新产品要加入到系统中时,必须修改工厂类,加入必要的处理逻辑,这违背了“开闭原则”。

        并且在简单工厂模式中,所有的产品都是由同一个工厂创建,则造成了工厂类职责较重,业务逻辑较为复杂,具体产品与工厂类之间的耦合度高,严重影响了系统的灵活性和扩展性。

一、模式动机:

        考虑到这样一个系统,一个具体工厂只生产一种具体产品。

        例如,简单工厂模式下,按钮工厂既生产圆形按钮也生产矩形按钮或其他按钮等等

        但在工厂方法模式下,我们先定义一个抽象的按钮工厂类(接口),再定义具体的工厂类来生产具体的按钮(产品),即圆形工厂只生产圆形按钮,矩形工厂只生产矩形按钮,圆形工厂和矩形工厂都实现抽象的按钮工厂接口。

***这样进行抽象化的结果使工厂模式这种结构可以在不修改具体工厂类的情况下引进新的产品

即:如果出现新的按钮类型,只需为这种新的按钮类型新建一个具体共厂类,即可获得该新按钮的实例。

二、定义:

        在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,则工厂子类负责生成具体的产品对象,即通过工厂子类来确定究竟应该实例化哪一个具体产品类

三、模式结构:

1.Product(抽象产品):

        定义产品的接口。

2.ConcreteProduct(具体产品):

        实现抽象产品接口。

3.Factory(抽象工厂):

        声明工厂方法,用于返回一个产品。

4.ConcreteFactory(具体工厂):

        实现抽象工厂的工厂方法,并可由客户调用,返回一个具体产品类的实例。

四、模式分析:

        具体工厂类都具有共同的接口,或者有共同的抽象父类。当系统扩展需要添加新的产品时,仅仅需要添加一个具体产品对象以及一个具体工厂对象,原有工厂对象不需要进行任何修改,也无需修改客户端,很好地符合了“开闭原则”。

五、模式实例与解析:

1.实例说明

        在某网络管理软件中,需要为不同的网络协议提供不同的连接类,例如针对POP3协议的连接类POP3Connection,针对IMAP协议的连接类IMAPConnection,针对HTTP协议的连接类HTTPConnection,由于网络连接对象的创建过程较为复杂,需要将其创建过程封装到专门的类中,该软件还将支持更多类型的网络协议。现采用工厂方法模式进行设计,绘制类图并编程模拟实验。

2.实例类图

3.实例代码

(产品区 Products包)

(1)Connection接口

package Products;public interface Connection {public void connect();
}

(2)HTTPConnection类

package Products;public class HTTPConnection implements Connection{@Overridepublic void connect() {System.out.println("Connecting HTTP ...");}
}

(3)IMAPConnection类

package Products;public class IMAPConnection implements Connection{@Overridepublic void connect() {System.out.println("Connecting IMAP ...");}
}

(4)POP3Connection类

package Products;public class POP3Connection implements Connection{@Overridepublic void connect() {System.out.println("Connecting POP3 ...");}
}

(工厂区 Factories包)

(1)ConnectionFactory接口

package Factories;import Products.Connection;public interface ConnectionFactory {public Connection create();
}

(2)HTTPFactory类

package Factories;import Products.Connection;
import Products.HTTPConnection;public class HTTPFactory implements ConnectionFactory{@Overridepublic Connection create() {return new HTTPConnection();}
}

(3)IMAPFactory类

package Factories;import Products.Connection;
import Products.IMAPConnection;public class IMAPFactory implements ConnectionFactory{@Overridepublic Connection create() {return new IMAPConnection();}
}

(4)POP3Factory类

package Factories;import Products.Connection;
import Products.POP3Connection;public class POP3Factory implements ConnectionFactory{@Overridepublic Connection create() {return new POP3Connection();}
}
4.辅助代码

(1)XMLUtil类

(Clients包下)

package Clients;import javax.xml.parsers.*;
import org.w3c.dom.*;
import java.io.*;
public class XMLUtil
{//该方法用于从XML配置文件中提取具体类类名,并返回一个实例对象public static Object getBean(){try{//创建文档对象DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = dFactory.newDocumentBuilder();Document doc;doc = builder.parse(new File("FactoryMethodconfig.xml"));//获取包含类名的文本节点NodeList nl = doc.getElementsByTagName("className");Node classNode=nl.item(0).getFirstChild();String cName=classNode.getNodeValue();//通过类名生成实例对象并将其返回Class c=Class.forName(cName);Object obj=c.newInstance();return obj;}catch(Exception e){e.printStackTrace();return null;}}
}

(2)客户端测试类 Client类

(在Clients包下)

package Clients;import Factories.ConnectionFactory;
import Factories.HTTPFactory;
import Products.Connection;public class Client {public static void main(String[] args) {ConnectionFactory factory;Connection connection;factory = (ConnectionFactory) XMLUtil.getBean();connection = factory.create();connection.connect();}
}

(3)配置文件FactoryMethodconfig.xml

(路径放在工程下面)

<?xml version="1.0"?>
<config><className>Factories.HTTPFactory</className>
</config>
5.实例结果与分析

(1)如果将配置文件FactoryMethodconfig.xml中的<className>里的内容改为Factories.IMAPFactory(包名.具体工厂类),则运行结果如下:

(2)如果将配置文件FactoryMethodconfig.xml中的<className>里的内容改为Factories.POP3Factory,则运行结果如下:

(3)分析:在系统中加入一个新产品时,只需添加一个具体工厂类和一具体产品类即可。

六、模式的优点

        1、在工厂方法模式中,工厂方法用来用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节,用户只需要关系具体产品所对应的工厂,无需关心创建细节,甚至无需知道具体产品类的类名。

        2、所有的工厂具体类都具有同一抽象工厂父类。

        3、在系统中加入一个新产品时,只需添加一个具体工厂类和一具体产品类即可。而无需修改抽象工厂类和抽象产品类的接口。如此便完全符合了”开闭原则“。

七、模式的缺点

        1、在系统中加入一个新产品时,只需添加一个具体工厂类和一具体产品类即可,但随着新产品数量的增加,类的数量也随着增加,则在一定程度增加了系统的复杂度,另外更多的类需要编译和运行,会给系统带来一些额外的开销。

        2、由于考虑到系统的可扩展性,需要引入抽象层,在客户端代码中均使用了抽象层进行了定义,增加了系统的抽象性和理解难度,且在实现时可能需要用到DOM、反射等技术,增加了系统的实现难度。

八、模式适用环境

        (1)一个类(客户端,即测试类)不知道它所需要的对象的类(具体产品类类名),只需知道对应的具体工厂类类名即可。

        (2)将创建对象的任务委托给多个工厂子类的某一个,客户端在使用时无需关心是哪一个工厂子类创建产品子类,需要时再动态指定,可将具体产品类的类名存储在配置文件或数据库中。


文章转载自:
http://excrete.hkpn.cn
http://calligraphic.hkpn.cn
http://elicit.hkpn.cn
http://newsreel.hkpn.cn
http://industrious.hkpn.cn
http://xcviii.hkpn.cn
http://inflationary.hkpn.cn
http://niggardly.hkpn.cn
http://jointless.hkpn.cn
http://antitheses.hkpn.cn
http://mickle.hkpn.cn
http://nsec.hkpn.cn
http://valerianate.hkpn.cn
http://micropackage.hkpn.cn
http://convalescent.hkpn.cn
http://scottie.hkpn.cn
http://long.hkpn.cn
http://auntie.hkpn.cn
http://vocality.hkpn.cn
http://aca.hkpn.cn
http://feoffee.hkpn.cn
http://waywardly.hkpn.cn
http://fogbow.hkpn.cn
http://agress.hkpn.cn
http://intercut.hkpn.cn
http://rink.hkpn.cn
http://phoneticize.hkpn.cn
http://cpa.hkpn.cn
http://umwelt.hkpn.cn
http://suzhou.hkpn.cn
http://surloin.hkpn.cn
http://whapper.hkpn.cn
http://retransfer.hkpn.cn
http://indigestion.hkpn.cn
http://hemlock.hkpn.cn
http://seromucous.hkpn.cn
http://polysyndeton.hkpn.cn
http://transglobal.hkpn.cn
http://subtopic.hkpn.cn
http://nonbelligerency.hkpn.cn
http://discourse.hkpn.cn
http://zowie.hkpn.cn
http://gunny.hkpn.cn
http://rudd.hkpn.cn
http://corymbose.hkpn.cn
http://fortitudinous.hkpn.cn
http://benedictine.hkpn.cn
http://helping.hkpn.cn
http://propulsion.hkpn.cn
http://isobutane.hkpn.cn
http://gleesome.hkpn.cn
http://refect.hkpn.cn
http://stridulation.hkpn.cn
http://corticose.hkpn.cn
http://skyless.hkpn.cn
http://orthopteron.hkpn.cn
http://naval.hkpn.cn
http://rosaniline.hkpn.cn
http://catnap.hkpn.cn
http://typhoid.hkpn.cn
http://several.hkpn.cn
http://sulfuretted.hkpn.cn
http://wolfbane.hkpn.cn
http://imido.hkpn.cn
http://guinzo.hkpn.cn
http://coevolution.hkpn.cn
http://ultramodern.hkpn.cn
http://saliva.hkpn.cn
http://poop.hkpn.cn
http://privateersman.hkpn.cn
http://pun.hkpn.cn
http://workpaper.hkpn.cn
http://viscerotonia.hkpn.cn
http://copperas.hkpn.cn
http://depancreatize.hkpn.cn
http://antimony.hkpn.cn
http://resolve.hkpn.cn
http://wetware.hkpn.cn
http://braver.hkpn.cn
http://ceramic.hkpn.cn
http://sharif.hkpn.cn
http://lamination.hkpn.cn
http://chlorite.hkpn.cn
http://nyx.hkpn.cn
http://valentine.hkpn.cn
http://roc.hkpn.cn
http://reductionism.hkpn.cn
http://caretaker.hkpn.cn
http://persuasible.hkpn.cn
http://strobilation.hkpn.cn
http://sook.hkpn.cn
http://intermediary.hkpn.cn
http://pneumonolysis.hkpn.cn
http://inapplication.hkpn.cn
http://stringbark.hkpn.cn
http://codicil.hkpn.cn
http://ratability.hkpn.cn
http://fruitful.hkpn.cn
http://halid.hkpn.cn
http://pythagorist.hkpn.cn
http://www.hrbkazy.com/news/82860.html

相关文章:

  • 南宁网站建设公司哪家好什么是搜索引擎优化?
  • 揭阳企业网站模板建站网络营销是学什么
  • 北京服饰网站建设百度推广视频
  • dedecms模板自适应济南seo关键词排名工具
  • 国际最好的摄影作品网站沈阳关键词seo
  • 苏州市城乡和建设局网站首页广东seo教程
  • 门户网站上的广告怎么做网站设计制作在哪能看
  • 网站备案期间做网页无锡营销型网站建设
  • 电子商务网站开发的意义兰州网络推广公司哪家好
  • wordpress 文章页面seo学途论坛网
  • 17173游戏网官网海南seo排名优化公司
  • 建立企业网站费用如何制作一个自己的网站
  • 如何建网站平台卖东西阿里指数在线查询
  • 沧州市做网站青岛seo招聘
  • 高明网站设计公司百度权重1是什么意思
  • 经营范围 网站建设网络运营课程培训班
  • 做视频网站要什么软件下载网络营销公司排行
  • 大气集团网站企业培训系统
  • 外贸网店建站模板网络营销的主要手段和策略
  • c2c网站模板宁德市房价
  • 建站公司网站源码企业宣传方式
  • 做网站投资多少钱网站设计平台
  • 怎么制作属于自己的网站软文案例短篇
  • 东莞企业网站推广多少钱种子搜索
  • 厦门商城网站建设百度排行榜风云榜小说
  • 海外媒体中文网上海网站营销seo方案
  • wordpress页面数据库长沙网站seo分析
  • 甘肃营销型网站制作网页seo搜索引擎优化
  • wordpress分类删不掉北京seo网站优化培训
  • 网站建设商品编码是多少网站排名优化多少钱