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

一个小型网站开发成本网站建设 图书管理网站

一个小型网站开发成本,网站建设 图书管理网站,网页设计代码放图片,wordpress面包屑代码一、概述 1.1简介 在java中#xff0c;万物皆对象#xff0c;这些对象都需要创建#xff0c;如果创建的时候直接new该对象#xff0c;就会对该对象耦合严重#xff0c;假如我们要更换对象#xff0c;所有new对象的地方都需要修改一遍#xff0c;这显然违背了软件设计的…一、概述 1.1简介 在java中万物皆对象这些对象都需要创建如果创建的时候直接new该对象就会对该对象耦合严重假如我们要更换对象所有new对象的地方都需要修改一遍这显然违背了软件设计的开闭原则。如果我们使用工厂来生产对象我们就只和工厂打交道就可以了彻底和对象解耦如果要更换对象直接在工厂里更换该对象即可达到了与对象解耦的目的所以说工厂模式最大的优点就是解耦。 在本教程中会介绍三种工厂的使用 简单工厂模式不属于GOF的23种经典设计模式工厂方法模式抽象工厂模式 1.2简单工厂模式 概述 简单工厂不是一种设计模式反而比较像是一种编程习惯。 简单工厂模式Simple Factory Pattern是一种创建型设计模式它提供了一个工厂类该类专门用于创建其他对象。简单工厂模式属于静态工厂模式即在工厂类中提供静态方法根据传入的参数不同返回不同的对象实例。 结构 简单工厂模式包含三个角色 工厂类Creator提供了创建产品的方法调用者通过该方法来获取产品。抽象产品类Product定义了产品的规范描述了产品的主要特性和功能。具体产品类Concrete Product定义具体的产品实现类实现抽象产品类中的抽象方法。 实现 原先逻辑  SimpleCoffeeFactory.java package com.yanyu.SimpleFactory;public class SimpleCoffeeFactory {public Coffee createCoffee(String type) {Coffee coffee null;if(americano.equals(type)) {coffee new AmericanoCoffee();} else if(latte.equals(type)) {coffee new LatteCoffee();}return coffee;} }Coffeestore.java package com.yanyu.SimpleFactory;public class Coffeestore {public Coffee orderCoffee(String type) {Coffee coffee null;if (american.equals(type)) {coffee new AmericanoCoffee();} else if (latte.equals(type)) {coffee new LatteCoffee();} else {throw new RuntimeException(对不起您所点的咖啡没有);}// 加配料coffee.addMilk();coffee.addSugar();return coffee;} } Coffee.java package com.yanyu.SimpleFactory;public abstract class Coffee {public abstract String getName();// 加糖public void addSugar() {System.out.println(加糖);}// 加奶public void addMilk() {System.out.println(加奶);} } AmericanoCoffee.java package com.yanyu.SimpleFactory;public class AmericanoCoffee extends Coffee{public String getName(){return美式咖啡;} } LatteCoffee.java package com.yanyu.SimpleFactory;public class LatteCoffee extends Coffee{public String getName(){return拿铁咖啡;} } test package com.yanyu.SimpleFactory;public class Client {public static void main(String[] args) {// 创建咖啡店类对象Coffeestore store new Coffeestore();Coffee coffee store.orderCoffee(latte);System.out.println(coffee.getName());} }SimpleCoffeeFactory是工厂类负责生产不同类型的咖啡Coffeestore是客户端通过调用工厂类的方法来获取咖啡。简单工厂模式属于创建型模式通过将对象的创建工作交给工厂类来实现客户端与具体产品类的解耦可以方便地扩展新的产品类型同时也便于管理和维护。在这个例子中Coffeestore只需要调用工厂类的createCoffee方法即可获取不同类型的咖啡而不需要关心具体如何创建。 工厂factory处理创建对象的细节一旦有了SimpleCoffeeFactoryCoffeeStore类中的orderCoffee()就变成此对象的客户后期如果需要Coffee对象直接从工厂中获取即可。这样也就解除了和Coffee实现类的耦合同时又产生了新的耦合CoffeeStore对象和SimpleCoffeeFactory工厂对象的耦合工厂对象和商品对象的耦合。 后期如果再加新品种的咖啡我们势必要需求修改SimpleCoffeeFactory的代码违反了开闭原则。工厂类的客户端可能有很多比如创建美团外卖等这样只需要修改工厂类的代码省去其他的修改操作。 扩展静态工厂 静态工厂是一种创建对象的方式它通过一个静态方法来获取对象有时也被称为静态工厂方法。静态工厂方法通常不需要创建对象所以可以在不创建对象的情况下直接返回对象。 通过扩展静态工厂我们可以让工厂方法更加灵活以便能够生产不同类型的对象。它也不是23种设计模式中的 public class SimpleCoffeeFactory { ​public static Coffee createCoffee(String type) {Coffee coffee null;if(americano.equals(type)) {coffee new AmericanoCoffee();} else if(latte.equals(type)) {coffee new LatteCoffee();}return coffe;} } 优缺点 优点 封装了创建对象的过程可以通过参数直接获取对象。把对象的创建和业务逻辑层分开这样以后就避免了修改客户代码如果要实现新产品直接修改工厂类而不需要在原代码中修改这样就降低了客户代码修改的可能性更加容易扩展。 缺点 增加新产品时还是需要修改工厂类的代码违背了“开闭原则”。 1.3工厂方法模式 针对上例中的缺点使用工厂方法模式就可以完美的解决完全遵循开闭原则。 概述 工厂方法模式Factory Method Pattern又称为工厂模式是一种创建型设计模式。在工厂方法模式中定义一个用于创建对象的接口但让子类决定将哪一个类实例化。工厂方法把类的实例化推迟到子类中进行从而实现了解耦。 结构 工厂方法模式的主要角色 抽象工厂Abstract Factory提供了创建产品的接口调用者通过它访问具体工厂的工厂方法来创建产品。具体工厂ConcreteFactory主要是实现抽象工厂中的抽象方法完成具体产品的创建。抽象产品Product定义了产品的规范描述了产品的主要特性和功能。具体产品ConcreteProduct实现了抽象产品角色所定义的接口由具体工厂来创建它同具体工厂之间一一对应。 实现 抽象工厂 package com.yanyu.FactoryMethod;public interface CoffeeFactory {Coffee createCoffee(); }具体工厂 public class LatteCoffeeFactory implements CoffeeFactory { ​public Coffee createCoffee() {return new LatteCoffee();} } ​ public class AmericanCoffeeFactory implements CoffeeFactory { ​public Coffee createCoffee() {return new AmericanoCoffee();} } 咖啡店类 package com.yanyu.FactoryMethod;public class CoffeeStore {private CoffeeFactory factory;public void SetFactory(CoffeeFactory factory) {this.factory factory;}public Coffee orderCoffee() {Coffee coffee factory.createCoffee();coffee.addMilk();coffee.addSugar();return coffee;} } 测试 package com.yanyu.FactoryMethod;public class client {public static void main(String[] args) {// 创建咖啡店对象CoffeeStore store new CoffeeStore();//创建工厂对象CoffeeFactory factory new AmericanCoffeeFactory();store.SetFactory(factory);// 点咖啡Coffee coffee store.orderCoffee();System.out.println(coffee.getName());} }这就是实现开闭原则的核心一旦转换成功我们拓展功能就只需要增加相应类的or接口即可不需要再动原来的代码 工厂方法模式是简单工厂模式的进一步抽象。由于使用了多态性工厂方法模式保持了简单工厂模式的优点而且克服了它的缺点。 优缺点  优点 用户只需要知道具体工厂的名称就可得到所要的产品无须知道产品的具体创建过程在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类无须对原工厂进行任何修改满足开闭原则 缺点 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类这增加了系统的复杂度。 工厂方法模式增加了系统抽象性和理解难度需要对工厂类和具体产品类进行抽象和设计。 常见应用 常见的使用场景包括 数据库连接池的实现。 日志处理器的实现。 图形界面控件库的开发。 任何需要创建对象的场景特别是对象创建过程复杂或需要隐藏细节的场景。 1.4抽象工厂模式 产品族和同一级别产品 产品族是指一组具有相似特征和用途的产品它们通常共享相同的品牌名称、市场定位和推广策略。比如苹果公司的iPhone产品族包括iPhone 12、iPhone 11、iPhone SE 等它们都是苹果公司的智能手机产品具有相似的功能和设计。 同一级别产品是指在市场上竞争的具有相似功能和特点的产品。这些产品可能来自不同的品牌但是它们都是在同一细分市场上竞争的产品。举例来说苹果公司的iPhone和三星公司的Galaxy手机都是智能手机它们在市场上是同一级别的产品。 概述 在抽象工厂模式中我们定义一个抽象工厂接口该接口具有多个工厂方法每个工厂方法负责创建一个产品族中的一种产品。然后我们创建一个具体的工厂类来实现抽象工厂接口并在其中实现工厂方法以便能够创建具体的产品。 抽象工厂模式是工厂方法模式的升级版本工厂方法模式只生产一个等级的产品而抽象工厂模式可生产多个等级的产品。 结构 抽象工厂Abstract Factory提供了创建产品的接口它包含多个创建产品的方法可以创建多个不同等级的产品。具体工厂Concrete Factory主要是实现抽象工厂中的多个抽象方法完成具体产品的创建。抽象产品Product定义了产品的规范描述了产品的主要特性和功能抽象工厂模式有多个抽象产品。具体产品ConcreteProduct实现了抽象产品角色所定义的接口由具体工厂来创建它 同具体工厂之间是多对一的关系。 实现 抽象工厂 package com.yanyu.AbstractFactory;public interface DessertFactory {Coffee createCoffee();Dessert createDessert(); }抽象类 package com.yanyu.AbstractFactory;public abstract class Dessert {public abstract void show(); } 具体工厂 //美式甜点工厂 public class AmericanDessertFactory implements DessertFactory { ​public Coffee createCoffee() {return new AmericanCoffee();} ​public Dessert createDessert() {return new MatchaMousse();} } //意大利风味甜点工厂 public class ItalyDessertFactory implements DessertFactory { ​public Coffee createCoffee() {return new LatteCoffee();} ​public Dessert createDessert() {return new Tiramisu();} } 具体类 package com.yanyu.AbstractFactory;public class Trimisu extends Dessert {public void show() {System.out.println(提拉米苏);} }package com.yanyu.AbstractFactory;public class MatchaMousse extends Dessert {public void show() {System.out.println(抹茶慕斯);} } test package com.yanyu.AbstractFactory;public class Client {public static void main(String[] args) {// 创建的是意大利风味甜品工厂对象// ItalyDessertFactory factory new ItalyDessertFactory();AmericanDessertFactory factory new AmericanDessertFactory();// 获取拿铁咖啡和提拉米苏甜品Coffee coffee factory.createCoffee();Dessert dessert factory.createDessert();System.out.println(coffee.getName()); dessert.show(); } } 如果要加同一个产品族的话只需要再加一个对应的工厂类即可不需要修改其他的类。 优缺点  优点 当一个产品族中的多个对象被设计成一起工作时它能保证客户端始终只使用同一个产品族中的对象。 缺点 由于抽象工厂只能创建某个产品族中的全部产品所以加入新产品时需要修改所有的具体工厂类增加了维护成本 常见应用 抽象工厂模式常见应用包括以下几个方面 1. 操作系统的UI界面设计操作系统常常提供多种不同的UI界面风格如Windows提供的经典风格、XP风格、Win7风格等可以使用抽象工厂模式来实现对不同风格的UI界面进行定制和管理。 2. 游戏开发游戏中的物品、角色、道具等都可以使用抽象工厂模式来进行设计不同的游戏可以使用不同的抽象工厂来创建不同的游戏元素。 3. 数据库连接数据库连接器可以使用抽象工厂模式来设计通过使用不同的工厂来创建不同类型的数据库连接器从而支持多种不同的数据库类型。 4. 跨平台开发不同的操作系统和不同的硬件架构需要不同的代码实现使用抽象工厂模式可以通过实现不同的工厂来创建适配不同平台的代码。 5. GUI开发GUI框架常常需要支持多种不同的控件和主题使用抽象工厂模式可以通过不同的工厂来创建不同的控件和主题。 1.5JDK源码解析-Collection.iterator方法 public class Demo {public static void main(String[] args) {ListString list new ArrayList();list.add(令狐冲);list.add(风清扬);list.add(任我行); ​//获取迭代器对象IteratorString it list.iterator();//使用迭代器遍历while(it.hasNext()) {String ele it.next();System.out.println(ele);}} } Collection接口是抽象工厂类ArrayList是具体的工厂类Iterator接口是抽象商品类ArrayList类中的Iter内部类是具体的商品类。在具体的工厂类中iterator()方法创建具体的商品类的对象。 二、实验 2.1简单工厂模式 任务描述 本关任务某电视机厂专为各知名电视机品牌代工生产各类电视机当需要海尔牌电视机时只需要在调用该工厂的工厂方法时传入参数“Haier”需要海信电视机时只需要传入参数“Hisense”工厂可以根据传入的不同参数返回不同品牌的电视机。现使用简单工厂模式来模拟程序将会自动从配置文件中读取参数请根据以下类图来补全代码。 相关知识 为了完成本关任务你需要掌握 简单工厂模式包含的角色简单工厂模式缺点。 简单工厂模式包含的角色 Factory工厂角色Product抽象产品角色ConcreteProduct具体产品角色 简单工厂模式缺点 工厂类集中了所有产品的创建逻辑职责过重一旦不能正常工作整个系统都要受到影响增加系统中类的个数引入了新的工厂类增加了系统的复杂度和理解难度系统扩展困难一旦添加新产品不得不修改工厂逻辑由于使用了静态工厂方法造成工厂角色无法形成基于继承的等级结构工厂类不能得到很好地扩展。 编程要求 根据提示给“HaierTV.javaHisenseTV.javaTVFactory.java”三个代码文件内注释需要填空地方补充代码。 Product抽象产品角色 package step1;public interface TV {void play(); }ConcreteProduct具体产品角色 package step1;public class HaierTV implements TV/**填空——————————**/{Overridepublic void play() {System.out.println(海尔电视机播放中......);} }package step1;public class HisenseTV implements TV/**填空——————————**/{Overridepublic void play() {System.out.println(海信电视机播放中......);} }Factory工厂角色 package step1;public class TVFactory {public static TV produceTV(String brand) throws Exception{if(brand.equalsIgnoreCase(Haier)){System.out.println(电视机工厂生产海尔电视机);/******填空******/return new HaierTV();/************/}else if(brand.equalsIgnoreCase(Hisense)){System.out.println(电视机工厂生产海信电视机);/******填空******/return new HisenseTV();/************/}else{throw new Exception(对不起暂不能生产该品牌电视机);}} }顾客类 package step1;import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File;public class XMLUtilTV {public static String getBrandName(){try{//创建文档对象DocumentBuilderFactory dFactory DocumentBuilderFactory.newInstance();DocumentBuilder builder dFactory.newDocumentBuilder();Document doc;doc builder.parse(new File(/data/workspace/myshixun/src/SimpleFactoryconfigTV.xml));//获取包含品牌名称的文本节点NodeList nl doc.getElementsByTagName(brandName);Node classNodenl.item(0).getFirstChild();String brandNameclassNode.getNodeValue().trim();return brandName;}catch(Exception e){e.printStackTrace();return null;}} }这段代码实现了从指定的XML配置文件中获取电视品牌名称的方法。具体步骤如下 1. 导入所需要的Java类库包括org.w3c.dom、javax.xml.parsers和java.io.File。 2. 创建XMLUtilTV类并定义静态的getBrandName方法返回类型为String用于获取配置文件中的品牌名称。 3. 在getBrandName方法中使用DocumentBuilderFactory类和DocumentBuilder类来创建文档对象即读取XML配置文件。 4. 获取文档对象中的品牌名称节点通过doc.getElementsByTagName(brandName)获取节点列表然后使用nl.item(0)获取第一个节点再使用getFirstChild()获取节点的第一个子节点。 5. 最后通过classNode.getNodeValue().trim()获取节点的文本值并去掉开头结尾的空格。 6. 如果有异常发生打印堆栈信息并返回null。 package step1; public class Client {public static void main(String args[]){try{TV tv;String brandName XMLUtilTV.getBrandName();tv TVFactory.produceTV(brandName);tv.play();}catch(Exception e){System.out.println(e.getMessage());}} }2.2工厂方法模式 任务描述 本关任务将原有的电视机工厂进行分割为每种品牌的电视机提供一个子工厂海尔工厂专门负责生产海尔电视机海信工厂专门负责生产海信电视机如果需要生产 TCL 电视机或创维电视机只需要对应增加一个新的 TCL 工厂或创维工厂即可原有的工厂无须做任何修改使得整个系统具有更加的灵活性和可扩展性。 现使用工厂方法模式来模拟程序将会自动从配置文件中读取参数请根据以下类图来修补代码。 相关知识 为了完成本关任务你需要掌握 工厂方法模式包含的角色实现要点工厂方法模式缺点。 工厂方法模式包含的角色 Product抽象产品ConcreteProduct具体产品Factory抽象工厂ConcreteFactory具体工厂 实现要点 让所有产品都遵循同一接口。 该接口必须声明对所有产品都有意义的方法。在创建类中添加一个空的工厂方法。 该方法的返回类型必须遵循通用的产品接口。在创建者代码中找到对于产品构造函数的所有引用。 将它们依次替换为对于工厂方法的调用 同时将创建产品的代码移入工厂方法。你可能需要在工厂方法中添加临时参数来控制返回的产品类型。工厂方法的代码看上去可能非常糟糕。 其中可能会有复杂的 switch 分支运算符 用于选择各种需要实例化的产品类。 但是不要担心 我们很快就会修复这个问题。为工厂方法中的每种产品编写一个创建者子类 然后在子类中重写工厂方法 并将基本方法中的相关创建代码移动到工厂方法中。如果应用中的产品类型太多 那么为每个产品创建子类并无太大必要 这时你也可以在子类中复用基类中的控制参数。如果代码经过上述移动后 基础工厂方法中已经没有任何代码 你可以将其转变为抽象类。 如果基础工厂方法中还有其他语句 你可以将其设置为该方法的默认行为。 工厂方法模式缺点 系统中类的个数将成对增加在一定程度上增加了系统的复杂度会给系统带来一些额外的开销增加了系统的抽象性和理解难度。 编程要求 根据提示给“HaierTVFactory.javaHisenseTVFactory.java”两个代码文件内注释需要填空地方补充代码。 Product抽象产品 package step3;public interface TV {void play(); }ConcreteProduct具体产品、 package step3;public class HaierTV implements TV{Overridepublic void play() {System.out.println(海尔电视机播放中......);} }package step3;public class HisenseTV implements TV{Overridepublic void play() {System.out.println(海信电视机播放中......);} }Factory抽象工厂 package step3;public interface TVFactory {TV produceTV(); }ConcreteFactory具体工厂 package step3;public class HaierTVFactory implements TVFactory{Overridepublic TV produceTV() {/*填空*/return new HaierTV();} }package step3;public class HisenseTVFactory implements TVFactory{Overridepublic TV produceTV() {/*填空*/return new HisenseTV();} }顾客 package step3;public class Client {public static void main(String args[]){try{TV tv;TVFactory factory;factory(TVFactory)XMLUtil.getBean();tvfactory.produceTV();tv.play();}catch(Exception e){System.out.println(e.getMessage());}} }package step3;import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import java.io.File;public class XMLUtil {public static Object getBean(){try{//创建文档对象DocumentBuilderFactory dFactory DocumentBuilderFactory.newInstance();DocumentBuilder builder dFactory.newDocumentBuilder();Document doc;doc builder.parse(new File(./src/FactoryMethodconfig.xml));//获取包含类名的文本节点NodeList nl doc.getElementsByTagName(className);Node classNodenl.item(0).getFirstChild();String cNameclassNode.getNodeValue();//通过类名生成实例对象并将其返回Class cClass.forName(cName);Object objc.newInstance();return obj;}catch(Exception e){e.printStackTrace();return null;}} }2.3抽象工厂模式 任务描述 本关任务一个智慧蔬菜大棚需要光照、土壤和空气传感器来搭建物联网联网方式有 zigbee 或蓝牙 mesh 两种之一。相同联网方式的传感器构成一个产品族而相同类型的传感器构成了一个产品等级结构现使用抽象工厂模式模拟该场景程序将会自动从配置文件中读取联网方式系统能全套生成不需要考虑兼容性问题请根据以下类图来修补文件中的代码。 相关知识 为了完成本关任务你需要掌握 抽象工厂模式包含的角色实现方法抽象工厂模式缺点。 抽象工厂模式包含的角色 AbstractFactory抽象工厂ConcreteFactory具体工厂AbstractProduct抽象产品ConcreteProduct具体产品 实现方法 以不同的产品类型与产品变体为维度绘制矩阵。为所有产品声明抽象产品接口。 然后让所有具体产品类实现这些接口。声明抽象工厂接口 并且在接口中为所有抽象产品提供一组构建方法。为每种产品变体实现一个具体工厂类。在应用程序中开发初始化代码。 该代码根据应用程序配置或当前环境 对特定具体工厂类进行初始化。 然后将该工厂对象传递给所有需要创建产品的类。找出代码中所有对产品构造函数的直接调用 将其替换为对工厂对象中相应构建方法的调用。 抽象工厂模式缺点 增加新的产品等级结构麻烦需要对原有系统进行较大的修改甚至需要修改抽象层代码这显然会带来较大的不便违背了开闭原则。 编程要求 除“Client”文件中代码不需要修改其它文件请在右侧编辑器 Begin-End 内补充代码来设计实现。 Airsensor.java package step2;/********** Begin *********/ public interface Airsensor {public abstract void Work();} /********** End *********/ IOTFactory.java package step2;/********** Begin *********/public interface IOTFactory {Airsensor produceAirsensor();Lightsensor produceLightsensor();Soilsensor produceSoilsensor(); }/********** End *********/ Lightsensor.java package step2;/********** Begin *********/public interface Lightsensor {public abstract void Work();}/**** End *********/ MeshAir.java package step2;/********** Begin *********/public class MeshAir implements Airsensor {public void Work(){System.out.println(mesh空气传感器正常工作中);} }/********** End *********/ MeshFactory.java package step2;/********** Begin *********/public class MeshFactory implements IOTFactory {public Airsensor produceAirsensor() {return new MeshAir();}public Lightsensor produceLightsensor() {return new MeshLight();}public Soilsensor produceSoilsensor() {return new MeshSoil();} }/********** End *********/ MeshLight.java package step2;/********** Begin *********/public class MeshLight implements Lightsensor {public void Work() {System.out.println(mesh光照传感器正常工作中);} }/********** End *********/ MeshSoil.java package step2;/********** Begin *********/public class MeshSoil implements Soilsensor {public void Work() {System.out.println(mesh土壤传感器正常工作中);} }/********** End *********/ Soilsensor.java package step2;/********** Begin *********/ public interface Soilsensor {public abstract void Work() ; }/********** End *********/ ZigbeeAir.java package step2;/********** Begin *********/public class ZigbeeAir implements Airsensor {public void Work() {System.out.println(zigbee空气传感器正常工作中);} }/********** End *********/ZigbeeFactory.java package step2;/********** Begin *********/public class ZigbeeFactory implements IOTFactory {public Airsensor produceAirsensor() {return new ZigbeeAir();}public Lightsensor produceLightsensor() {return new ZigbeeLight();}public Soilsensor produceSoilsensor (){return new ZigbeeSoil();} }/********** End *********/ ZigbeeLight.java package step2;/********** Begin *********/public class ZigbeeLight implements Lightsensor {public void Work() {System.out.println(zigbee光照传感器正常工作中);} }/********** End *********/ ZigbeeSoil.java package step2;/********** Begin *********/public class ZigbeeSoil implements Soilsensor {public void Work() {System.out.println(zigbee土壤传感器正常工作中);} }/********** End *********/ Client.java package step3;public class Client {public static void main(String args[]){try{TV tv;TVFactory factory;factory(TVFactory)XMLUtil.getBean();tvfactory.produceTV();tv.play();}catch(Exception e){System.out.println(e.getMessage());}} }
文章转载自:
http://www.morning.atoinfo.com.gov.cn.atoinfo.com
http://www.morning.xkzr.cn.gov.cn.xkzr.cn
http://www.morning.bylzr.cn.gov.cn.bylzr.cn
http://www.morning.qyllw.cn.gov.cn.qyllw.cn
http://www.morning.qkzdc.cn.gov.cn.qkzdc.cn
http://www.morning.qykxj.cn.gov.cn.qykxj.cn
http://www.morning.rzsxb.cn.gov.cn.rzsxb.cn
http://www.morning.jqzns.cn.gov.cn.jqzns.cn
http://www.morning.gzttoyp.com.gov.cn.gzttoyp.com
http://www.morning.lptjt.cn.gov.cn.lptjt.cn
http://www.morning.hqgxz.cn.gov.cn.hqgxz.cn
http://www.morning.lwcgh.cn.gov.cn.lwcgh.cn
http://www.morning.ssqwr.cn.gov.cn.ssqwr.cn
http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn
http://www.morning.rxfgh.cn.gov.cn.rxfgh.cn
http://www.morning.xdwcg.cn.gov.cn.xdwcg.cn
http://www.morning.spwm.cn.gov.cn.spwm.cn
http://www.morning.jqzns.cn.gov.cn.jqzns.cn
http://www.morning.uytae.cn.gov.cn.uytae.cn
http://www.morning.wwkdh.cn.gov.cn.wwkdh.cn
http://www.morning.rmyqj.cn.gov.cn.rmyqj.cn
http://www.morning.sbrpz.cn.gov.cn.sbrpz.cn
http://www.morning.kzrbd.cn.gov.cn.kzrbd.cn
http://www.morning.fjgwg.cn.gov.cn.fjgwg.cn
http://www.morning.phjyb.cn.gov.cn.phjyb.cn
http://www.morning.tqjks.cn.gov.cn.tqjks.cn
http://www.morning.xywfz.cn.gov.cn.xywfz.cn
http://www.morning.swbhq.cn.gov.cn.swbhq.cn
http://www.morning.homayy.com.gov.cn.homayy.com
http://www.morning.xyrss.cn.gov.cn.xyrss.cn
http://www.morning.qswws.cn.gov.cn.qswws.cn
http://www.morning.wkqrp.cn.gov.cn.wkqrp.cn
http://www.morning.ztcxx.com.gov.cn.ztcxx.com
http://www.morning.yxbdl.cn.gov.cn.yxbdl.cn
http://www.morning.ptwzy.cn.gov.cn.ptwzy.cn
http://www.morning.pkdng.cn.gov.cn.pkdng.cn
http://www.morning.sknbb.cn.gov.cn.sknbb.cn
http://www.morning.gpnwq.cn.gov.cn.gpnwq.cn
http://www.morning.nktgj.cn.gov.cn.nktgj.cn
http://www.morning.qnzpg.cn.gov.cn.qnzpg.cn
http://www.morning.qmxsx.cn.gov.cn.qmxsx.cn
http://www.morning.zcckq.cn.gov.cn.zcckq.cn
http://www.morning.mcjxq.cn.gov.cn.mcjxq.cn
http://www.morning.rgwrl.cn.gov.cn.rgwrl.cn
http://www.morning.jxhlx.cn.gov.cn.jxhlx.cn
http://www.morning.mwwnz.cn.gov.cn.mwwnz.cn
http://www.morning.lthtp.cn.gov.cn.lthtp.cn
http://www.morning.qhrsy.cn.gov.cn.qhrsy.cn
http://www.morning.llfwg.cn.gov.cn.llfwg.cn
http://www.morning.mywnk.cn.gov.cn.mywnk.cn
http://www.morning.yfpnl.cn.gov.cn.yfpnl.cn
http://www.morning.qzxb.cn.gov.cn.qzxb.cn
http://www.morning.ysybx.cn.gov.cn.ysybx.cn
http://www.morning.ndfwh.cn.gov.cn.ndfwh.cn
http://www.morning.fmdvbsa.cn.gov.cn.fmdvbsa.cn
http://www.morning.qrcsb.cn.gov.cn.qrcsb.cn
http://www.morning.kgxrq.cn.gov.cn.kgxrq.cn
http://www.morning.klzdy.cn.gov.cn.klzdy.cn
http://www.morning.xywfz.cn.gov.cn.xywfz.cn
http://www.morning.qyhcm.cn.gov.cn.qyhcm.cn
http://www.morning.knzdt.cn.gov.cn.knzdt.cn
http://www.morning.cspwj.cn.gov.cn.cspwj.cn
http://www.morning.rqxtb.cn.gov.cn.rqxtb.cn
http://www.morning.cpktd.cn.gov.cn.cpktd.cn
http://www.morning.dgng.cn.gov.cn.dgng.cn
http://www.morning.wlgpz.cn.gov.cn.wlgpz.cn
http://www.morning.rswtz.cn.gov.cn.rswtz.cn
http://www.morning.cwznh.cn.gov.cn.cwznh.cn
http://www.morning.ljdhj.cn.gov.cn.ljdhj.cn
http://www.morning.rtsx.cn.gov.cn.rtsx.cn
http://www.morning.srltq.cn.gov.cn.srltq.cn
http://www.morning.hzqjgas.com.gov.cn.hzqjgas.com
http://www.morning.brwei.com.gov.cn.brwei.com
http://www.morning.cylbs.cn.gov.cn.cylbs.cn
http://www.morning.nssjy.cn.gov.cn.nssjy.cn
http://www.morning.ycnqk.cn.gov.cn.ycnqk.cn
http://www.morning.kghss.cn.gov.cn.kghss.cn
http://www.morning.xkjqg.cn.gov.cn.xkjqg.cn
http://www.morning.ywrt.cn.gov.cn.ywrt.cn
http://www.morning.pdynk.cn.gov.cn.pdynk.cn
http://www.tj-hxxt.cn/news/258239.html

相关文章:

  • 山东专业网站建设哪家便宜免费的seo
  • iis 网站无法访问关于我们网站设计
  • 购物网站建设哪家好电子商务网站建设 下载
  • 服装网站 欣赏视频怎么转成网址
  • 做兼职编辑的网站看手表网站
  • 住房和城乡建设部网站施工员证网站建设方案情况汇报
  • 做网站搞流量一个域名可以做两个网站吗
  • 网站建设和成本网站开发公司开发过程
  • 网站源码大全网站模板如何编辑软件
  • 中小企业网站建设与推广分析wordpress thegem
  • 视频网站怎么做排名软件毕设代做网站
  • 河北建设厅网站怎么搜索文件淄博网站建设讲解透彻
  • 三端网站如何做wordpress 主题管理
  • 云服务器做网站一般配置管理系统网站模板
  • 网站开发设计思想免费邮箱163登录入口
  • 潍坊市网站建设公司江苏越润建设有限公司网站
  • 成都外贸网站建设费用免费模板简历在哪下
  • 珠海做网站设计wordpress制作企业网站
  • 帝国cms制作网站地图企业推广软文范文
  • 百度自助建站官网网站建设精准精细快速
  • 湖南省建设厅政务中心网站厦门掘金网站建设
  • 顺的品牌网站设计信息wordpress和数据库名
  • 中国海外旅游营销网站做牛仔的时尚网站
  • 网站开发公司有哪些江苏网站建设
  • 用asp做网站视频网站标题字体设计
  • 公司网站建设的要点wordpress图片如何存储
  • 网站建设添加汉语网站备案可以自己备案吗
  • dedecms改WordPress百色seo外包
  • 成都住房和城乡建设部网站网站建设添加背景命令
  • 公司网站建设与维护方案证书查询入口官网