中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

15 企業(yè)網(wǎng)站優(yōu)化方案有哪些內(nèi)容sem什么意思

15 企業(yè)網(wǎng)站優(yōu)化方案有哪些內(nèi)容,sem什么意思,從用戶旅程角度做網(wǎng)站分析,手機(jī)網(wǎng)站跟PC端網(wǎng)站有啥區(qū)別文章目錄 前言一、策略模式是什么?二、策略模式應(yīng)用場景三、策略模式優(yōu)點(diǎn)四、策略模式缺點(diǎn)五、場景案例:類型統(tǒng)計(jì)1.項(xiàng)目結(jié)構(gòu)2.UML圖解3.代碼實(shí)現(xiàn)3.1 指標(biāo)枚舉3.2 請求體3.3 響應(yīng)體3.4.分析統(tǒng)計(jì)指標(biāo)策略3.5.接口3.6.擴(kuò)展接口3.7.接口實(shí)現(xiàn)3.8.控制層 六、P…

文章目錄

  • 前言
  • 一、策略模式是什么?
  • 二、策略模式應(yīng)用場景
  • 三、策略模式優(yōu)點(diǎn)
  • 四、策略模式缺點(diǎn)
  • 五、場景案例:類型統(tǒng)計(jì)
    • 1.項(xiàng)目結(jié)構(gòu)
    • 2.UML圖解
    • 3.代碼實(shí)現(xiàn)
      • 3.1 指標(biāo)枚舉
      • 3.2 請求體
      • 3.3 響應(yīng)體
      • 3.4.分析統(tǒng)計(jì)指標(biāo)策略
      • 3.5.接口
      • 3.6.擴(kuò)展接口
      • 3.7.接口實(shí)現(xiàn)
      • 3.8.控制層
  • 六、PostMan測試
    • 1.測試getListData()接口
    • 2.測試getChartData()接口
    • 3.getObtainInventory()擴(kuò)展接口
  • 總結(jié)


前言

在做統(tǒng)計(jì)的業(yè)務(wù)開發(fā)中,常常伴隨著用戶選擇不同類型的統(tǒng)計(jì)而動(dòng)態(tài)的加載數(shù)據(jù),返回的數(shù)據(jù)也會(huì)動(dòng)態(tài)的改變,比如說一張商超里面可能有販賣肉蛋禽、蔬菜、飲料、水果等,我們需要根據(jù)這幾種類型指標(biāo)(算法不同)去生成各自的統(tǒng)計(jì)數(shù)據(jù),如果根據(jù)不同的類型寫不同的接口,可以實(shí)簡單現(xiàn)該功能,但帶來的問題是接口定義太多,重復(fù)方法定義過多,如果統(tǒng)一一個(gè)接口、內(nèi)容使用if去走分支,也可以實(shí)現(xiàn)相同的效果,但還是不夠理想化,理想的是不需要手動(dòng)的添加if分支,而是做到自動(dòng)匹配到對應(yīng)算法執(zhí)行指定的流程,那么這時(shí)候就需要策略模式來幫我們實(shí)現(xiàn)這一步操作了


一、策略模式是什么?

  • 策略模式是一種行為型設(shè)計(jì)模式,它定義了一系列算法或策略,并將它們封裝起來,使它們可以互相替換。在使用策略模式時(shí),可以通過改變不同的算法或策略來改變對象的行為。
  • 策略模式通常包含兩部分:策略接口和策略實(shí)現(xiàn)類。策略接口定義了對某種行為的抽象,而策略實(shí)現(xiàn)類則提供了具體的算法或策略實(shí)現(xiàn)。

二、策略模式應(yīng)用場景

  1. 針對同一類型問題的多種處理方式,僅僅是具體行為有差別時(shí)。
  2. 需要?jiǎng)討B(tài)選擇算法和策略時(shí)。
  3. 當(dāng)一個(gè)對象需要通過多種行為方式中的一種進(jìn)行某種操作時(shí)。
  4. 在不希望客戶端知道具體實(shí)現(xiàn)細(xì)節(jié)的情況下,可采用策略模式對外提供接口。
  5. 多個(gè)類只有在算法或行為上稍有不同的場景。
  6. 假設(shè)有一個(gè)系統(tǒng)需要根據(jù)用戶的不同操作系統(tǒng)顯示不同的界面風(fēng)格??梢允褂貌呗阅J?#xff0c;將不同操作系統(tǒng)的界面風(fēng)格作為不同的策略實(shí)現(xiàn)類,并通過定義一個(gè)策略接口來對外暴露相應(yīng)的方法。
  7. 策略模式還可以用于設(shè)計(jì)游戲中的戰(zhàn)斗系統(tǒng),根據(jù)不同角色的屬性和職業(yè)特點(diǎn),選取最優(yōu)的戰(zhàn)斗策略進(jìn)行戰(zhàn)斗。
    總之,策略模式適用于多個(gè)類只有在算法或行為上稍有不同的場景,并且在運(yùn)行時(shí)需要?jiǎng)討B(tài)地選擇不同的算法或策略的情況下。

三、策略模式優(yōu)點(diǎn)

  1. 策略模式可以讓算法或策略獨(dú)立于使用它們的客戶端而變化,從而實(shí)現(xiàn)代碼復(fù)用。
  2. 策略模式可以讓算法或策略在不影響代碼結(jié)構(gòu)的情況下靈活地變化,降低了代碼維護(hù)的成本。
  3. 策略模式可以避免使用大量的 if-else 語句或者 switch 語句來進(jìn)行分支處理,增強(qiáng)了代碼的可讀性和可維護(hù)性。
  4. 策略模式可以在運(yùn)行時(shí)動(dòng)態(tài)地改變算法或策略,因此可以根據(jù)需要進(jìn)行適當(dāng)?shù)倪x擇和組合。

四、策略模式缺點(diǎn)

  1. 策略模式會(huì)增加系統(tǒng)需要的類的數(shù)量,可能會(huì)導(dǎo)致代碼變得更加復(fù)雜和難以理解。
  2. 策略模式需要客戶端了解不同的策略之間的差異,增加了客戶端的編碼難度。
  3. 策略模式可能會(huì)導(dǎo)致不必要的運(yùn)行時(shí)開銷,因?yàn)樾枰獎(jiǎng)討B(tài)地選擇和組合算法或策略。

五、場景案例:類型統(tǒng)計(jì)

1.項(xiàng)目結(jié)構(gòu)

在這里插入圖片描述


2.UML圖解

在這里插入圖片描述


3.代碼實(shí)現(xiàn)

3.1 指標(biāo)枚舉

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Getter;@Getter
@AllArgsConstructor
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum StatisticalIndicatorsEnum {/*** 肉*/MEAT(1, "肉", "meatAnalysisTableService"),/*** 水果*/FRUIT(2, "水果", "fruitAnalysisTableService"),/*** 蔬菜*/VEGETABLE(3, "蔬菜", "vegetableAnalysisTableService"),/*** 飲料*/BEVERAGE(4, "飲料", "beverageAnalysisTableService");/*** 編碼*/private final Integer code;/*** 注釋*/private final String desc;/*** 對應(yīng)策略*/private final String strategyName;
}

3.2 請求體

import com.fasterxml.jackson.annotation.JsonFormat;
import com.mxf.code.strategy_factory.enums.StatisticalIndicatorsEnum;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import org.springframework.web.bind.annotation.ModelAttribute;import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
import java.util.Date;/*** 統(tǒng)計(jì)圖Request*/
@Data
@ApiModel(value = "統(tǒng)計(jì)圖Request")
public class StatisticsRequest implements Serializable {private static final long serialVersionUID = 1L;@NotBlank(message = "統(tǒng)計(jì)指標(biāo)不能為空")@ApiModelProperty(value = "統(tǒng)計(jì)指標(biāo)")private StatisticalIndicatorsEnum statisticalIndicatorsEnum;@NotNull(message = "統(tǒng)計(jì)起始時(shí)間不能為空")@ApiModelProperty(value = "開始時(shí)間,格式:yyyy-MM-dd")@JsonFormat(pattern = "yyyy-MM-dd")private Date startDate;@NotNull(message = "統(tǒng)計(jì)截止時(shí)間不能為空")@ApiModelProperty(value = "結(jié)束時(shí)間(格式:yyyy-MM-dd)")@JsonFormat(pattern = "yyyy-MM-dd")private Date endDate;@ModelAttribute("statisticalIndicators")public void setStatisticalIndicatorsEnum(StatisticalIndicatorsEnum statisticalIndicatorsEnum) {this.statisticalIndicatorsEnum = statisticalIndicatorsEnum;}
}

3.3 響應(yīng)體

import lombok.Data;/*** @author mxf* @version 1.0* @description: 響應(yīng)體Base* @date 2023/5/26*/
@Data
public abstract class BaseResponse {
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;
import java.math.BigDecimal;/*** @author 28382*/
@Data
@ApiModel(value = "蔬菜")
@EqualsAndHashCode(callSuper = true)
public class BeverageAvailabilityListResponse extends BaseResponse implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "統(tǒng)計(jì)時(shí)間")private String xDate;@ApiModelProperty(value = "飲料類型名稱")private String beverageTypeName;@ApiModelProperty(value = "銷售件數(shù)")private Double salesQuantity;@ApiModelProperty(value = "銷售金額")private BigDecimal salesAmount;
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;
import java.math.BigDecimal;/*** @author 28382*/
@Data
@ApiModel(value = "水果圖表響應(yīng)體")
@EqualsAndHashCode(callSuper = true)
public class FruitAvailabilityChartResponse extends BaseResponse implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "統(tǒng)計(jì)時(shí)間")private String xDate;@ApiModelProperty(value = "本年銷售總額")private BigDecimal currentYearSalesAmount;@ApiModelProperty(value = "去年銷售金額")private BigDecimal previousYearSalesAmount;
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;
import java.math.BigDecimal;/*** @author 28382*/
@Data
@ApiModel(value = "水果")
@EqualsAndHashCode(callSuper = true)
public class FruitAvailabilityListResponse extends BaseResponse implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "統(tǒng)計(jì)時(shí)間")private String xDate;@ApiModelProperty(value = "肉類名")private String fruitTypeName;@ApiModelProperty(value = "銷售量kg")private Double salesVolume;@ApiModelProperty(value = "銷售金額")private BigDecimal salesAmount;
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;
import java.math.BigDecimal;/*** @author 28382*/
@Data
@ApiModel(value = "肉")
@EqualsAndHashCode(callSuper = true)
public class MeatAvailabilityListResponse extends BaseResponse implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "統(tǒng)計(jì)時(shí)間")private String xDate;@ApiModelProperty(value = "肉類名")private String meatTypeName;@ApiModelProperty(value = "銷售量kg")private Double salesVolume;@ApiModelProperty(value = "銷售金額")private BigDecimal salesAmount;
}
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;import java.io.Serializable;
import java.math.BigDecimal;/*** @author 28382*/
@Data
@ApiModel(value = "蔬菜")
@EqualsAndHashCode(callSuper = true)
public class VegetableAvailabilityListResponse extends BaseResponse implements Serializable {private static final long serialVersionUID = 1L;@ApiModelProperty(value = "統(tǒng)計(jì)時(shí)間")private String xDate;@ApiModelProperty(value = "肉類名")private String vegetableName;@ApiModelProperty(value = "銷售量kg")private Double salesVolume;@ApiModelProperty(value = "銷售金額")private BigDecimal salesAmount;
}

3.4.分析統(tǒng)計(jì)指標(biāo)策略

管理策略bean

import com.mxf.code.strategy_factory.enums.StatisticalIndicatorsEnum;
import org.springframework.stereotype.Service;import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;/*** 分析統(tǒng)計(jì)指標(biāo)策略** @author 28382*/
@Service
public class AnalysisTableStrategyContext {private final Map<String, AnalysisTableService> analysisTableMap = new ConcurrentHashMap<>();public AnalysisTableStrategyContext(Map<String, AnalysisTableService> strategyMap) {this.analysisTableMap.putAll(strategyMap);}/*** @param statisticalIndicatorsEnum 指標(biāo)枚舉* @return com.mxf.code.strategy_factory.service.AnalysisTableService* @author mxf* @description 獲取實(shí)際統(tǒng)計(jì)策略* @createTime 2023/5/26 14:08* @paramType [com.mxf.code.strategy_factory.enums.StatisticalIndicatorsEnum]*/public AnalysisTableService getResource(StatisticalIndicatorsEnum statisticalIndicatorsEnum) {return analysisTableMap.get(statisticalIndicatorsEnum.getStrategyName());}
}

3.5.接口

import com.mxf.code.strategy_factory.request.StatisticsRequest;
import com.mxf.code.strategy_factory.response.BaseResponse;import java.util.List;/*** 統(tǒng)計(jì)分析*/
public interface AnalysisTableService {/*** 獲取統(tǒng)計(jì)圖數(shù)據(jù)** @param requestParams 入?yún)? @return*/List<BaseResponse> getChartData(StatisticsRequest statisticsRequest);/*** 獲取列表數(shù)據(jù)** @param requestParams 入?yún)? @return*/List<BaseResponse> getListData(StatisticsRequest statisticsRequest);
}

3.6.擴(kuò)展接口

import com.mxf.code.strategy_factory.request.StatisticsRequest;/*** @author mxf* @version 1.0* @description: 水果(自定義接口)* @date 2023/5/26*/
public interface FruitAnalysisTableService {/*** 獲取水果庫存** @param statisticsRequest 入?yún)? @return*/Double getObtainInventory(StatisticsRequest statisticsRequest);
}

3.7.接口實(shí)現(xiàn)

import com.mxf.code.strategy_factory.request.StatisticsRequest;
import com.mxf.code.strategy_factory.response.BaseResponse;
import com.mxf.code.strategy_factory.response.BeverageAvailabilityListResponse;
import com.mxf.code.strategy_factory.service.AnalysisTableService;
import org.springframework.stereotype.Service;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/*** @author mxf* @version 1.0* @description: 飲料* @date 2023/5/26*/
@Service("beverageAnalysisTableService")
public class BeverageAnalysisTableServiceImpl implements AnalysisTableService {@Overridepublic List<BaseResponse> getChartData(StatisticsRequest requestParams) {return null;}@Overridepublic List<BaseResponse> getListData(StatisticsRequest statisticsRequest) {List<BeverageAvailabilityListResponse> resultList = new ArrayList<>();BeverageAvailabilityListResponse beverageAvailabilityListResponse = new BeverageAvailabilityListResponse();beverageAvailabilityListResponse.setXDate("");beverageAvailabilityListResponse.setBeverageTypeName("");beverageAvailabilityListResponse.setSalesQuantity(0.0D);beverageAvailabilityListResponse.setSalesAmount(new BigDecimal("0"));resultList.add(beverageAvailabilityListResponse);return new ArrayList<>(resultList);}
}
import com.mxf.code.strategy_factory.request.StatisticsRequest;
import com.mxf.code.strategy_factory.response.BaseResponse;
import com.mxf.code.strategy_factory.response.FruitAvailabilityChartResponse;
import com.mxf.code.strategy_factory.response.FruitAvailabilityListResponse;
import com.mxf.code.strategy_factory.service.AnalysisTableService;
import com.mxf.code.strategy_factory.service.FruitAnalysisTableService;
import org.springframework.stereotype.Service;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/*** @author mxf* @version 1.0* @description: 水果* @date 2023/5/26*/
@Service("fruitAnalysisTableService")
public class FruitAnalysisTableServiceImpl implements AnalysisTableService, FruitAnalysisTableService {@Overridepublic List<BaseResponse> getChartData(StatisticsRequest requestParams) {List<FruitAvailabilityChartResponse> resultList = new ArrayList<>();FruitAvailabilityChartResponse fruitAvailabilityChartResponse = new FruitAvailabilityChartResponse();fruitAvailabilityChartResponse.setXDate("2022-05-25");fruitAvailabilityChartResponse.setCurrentYearSalesAmount(new BigDecimal("4"));fruitAvailabilityChartResponse.setPreviousYearSalesAmount(new BigDecimal("5"));FruitAvailabilityChartResponse fruitAvailabilityChartResponse2 = new FruitAvailabilityChartResponse();fruitAvailabilityChartResponse2.setXDate("2022-05-26");fruitAvailabilityChartResponse2.setCurrentYearSalesAmount(new BigDecimal("1"));fruitAvailabilityChartResponse2.setPreviousYearSalesAmount(new BigDecimal("2"));resultList.add(fruitAvailabilityChartResponse);resultList.add(fruitAvailabilityChartResponse2);return new ArrayList<>(resultList);}@Overridepublic List<BaseResponse> getListData(StatisticsRequest statisticsRequest) {List<FruitAvailabilityListResponse> resultList = new ArrayList<>();FruitAvailabilityListResponse fruitAvailabilityListResponse = new FruitAvailabilityListResponse();fruitAvailabilityListResponse.setXDate("");fruitAvailabilityListResponse.setFruitTypeName("");fruitAvailabilityListResponse.setSalesVolume(0.0D);fruitAvailabilityListResponse.setSalesAmount(new BigDecimal("0"));resultList.add(fruitAvailabilityListResponse);return new ArrayList<>(resultList);}@Overridepublic Double getObtainInventory(StatisticsRequest statisticsRequest) {return 334423423.44;}
}
import com.mxf.code.strategy_factory.request.StatisticsRequest;
import com.mxf.code.strategy_factory.response.BaseResponse;
import com.mxf.code.strategy_factory.response.MeatAvailabilityListResponse;
import com.mxf.code.strategy_factory.service.AnalysisTableService;
import org.springframework.stereotype.Service;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/*** @author mxf* @version 1.0* @description: 肉* @date 2023/5/26*/
@Service("meatAnalysisTableService")
public class MeatAnalysisTableServiceImpl implements AnalysisTableService {@Overridepublic List<BaseResponse> getChartData(StatisticsRequest requestParams) {return null;}@Overridepublic List<BaseResponse> getListData(StatisticsRequest statisticsRequest) {List<MeatAvailabilityListResponse> resultList = new ArrayList<>();MeatAvailabilityListResponse meatAvailabilityListResponse = new MeatAvailabilityListResponse();meatAvailabilityListResponse.setXDate("");meatAvailabilityListResponse.setMeatTypeName("");meatAvailabilityListResponse.setSalesVolume(0.0D);meatAvailabilityListResponse.setSalesAmount(new BigDecimal("0"));resultList.add(meatAvailabilityListResponse);return new ArrayList<>(resultList);}
}
import com.mxf.code.strategy_factory.request.StatisticsRequest;
import com.mxf.code.strategy_factory.response.BaseResponse;
import com.mxf.code.strategy_factory.response.VegetableAvailabilityListResponse;
import com.mxf.code.strategy_factory.service.AnalysisTableService;
import org.springframework.stereotype.Service;import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;/*** @author mxf* @version 1.0* @description: 蔬菜* @date 2023/5/26*/
@Service("vegetableAnalysisTableService")
public class VegetableAnalysisTableServiceImpl implements AnalysisTableService {@Overridepublic List<BaseResponse> getChartData(StatisticsRequest requestParams) {return null;}@Overridepublic List<BaseResponse> getListData(StatisticsRequest statisticsRequest) {List<VegetableAvailabilityListResponse> resultList = new ArrayList<>();VegetableAvailabilityListResponse vegetableAvailabilityListResponse = new VegetableAvailabilityListResponse();vegetableAvailabilityListResponse.setXDate("");vegetableAvailabilityListResponse.setVegetableName("");vegetableAvailabilityListResponse.setSalesVolume(0.0D);vegetableAvailabilityListResponse.setSalesAmount(new BigDecimal("0"));resultList.add(vegetableAvailabilityListResponse);return new ArrayList<>(resultList);}
}

3.8.控制層

import com.mxf.code.strategy_factory.request.StatisticsRequest;
import com.mxf.code.strategy_factory.response.BaseResponse;
import com.mxf.code.strategy_factory.service.AnalysisTableService;
import com.mxf.code.strategy_factory.service.AnalysisTableStrategyContext;
import com.mxf.code.strategy_factory.service.FruitAnalysisTableService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.Assert;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import java.util.List;/*** @author mxf* @version 1.0* @description: 統(tǒng)計(jì)分析* @date 2023/5/26*/
@RestController
@RequestMapping("statistical/indicators")
public class StatisticalIndicatorsController {@Autowiredprivate AnalysisTableStrategyContext analysisTableStrategyContext;@Autowiredprivate FruitAnalysisTableService fruitAnalysisTableService;@GetMapping("listData")public List<BaseResponse> getListData(StatisticsRequest statisticsRequest) {AnalysisTableService resource = analysisTableStrategyContext.getResource(statisticsRequest.getStatisticalIndicatorsEnum());Assert.notNull(resource, "未知策略");return resource.getListData(statisticsRequest);}@GetMapping("chartData")public List<BaseResponse> getchartData(StatisticsRequest statisticsRequest) {AnalysisTableService resource = analysisTableStrategyContext.getResource(statisticsRequest.getStatisticalIndicatorsEnum());Assert.notNull(resource, "未知策略");return resource.getChartData(statisticsRequest);}@GetMapping("getFruitObtainInventory")public Double getFruitObtainInventory(StatisticsRequest statisticsRequest) {return fruitAnalysisTableService.getObtainInventory(statisticsRequest);}
}

六、PostMan測試

1.測試getListData()接口

@GetMapping("listData")
public List<BaseResponse> getListData(StatisticsRequest statisticsRequest) {AnalysisTableService resource = analysisTableStrategyContext.getResource(statisticsRequest.getStatisticalIndicatorsEnum());Assert.notNull(resource, "未知策略");return resource.getListData(statisticsRequest);
}

在這里插入圖片描述


2.測試getChartData()接口

@GetMapping("chartData")
public List<BaseResponse> getchartData(StatisticsRequest statisticsRequest) {AnalysisTableService resource = analysisTableStrategyContext.getResource(statisticsRequest.getStatisticalIndicatorsEnum());Assert.notNull(resource, "未知策略");return resource.getChartData(statisticsRequest);
}

在這里插入圖片描述


3.getObtainInventory()擴(kuò)展接口

@GetMapping("getFruitObtainInventory")public Double getFruitObtainInventory(StatisticsRequest statisticsRequest) {return fruitAnalysisTableService.getObtainInventory(statisticsRequest);}

在這里插入圖片描述


總結(jié)

上述案例實(shí)現(xiàn)策略模式同時(shí),針對入?yún)ⅰ⒊鰠ⅰ⒔涌跀U(kuò)展做了更好的兼容。

http://www.risenshineclean.com/news/34622.html

相關(guān)文章:

  • 做食品那些網(wǎng)站百度提交入口網(wǎng)站
  • 閱文集團(tuán)旗下哪個(gè)網(wǎng)站做的最好seo培訓(xùn)一對一
  • 企業(yè)網(wǎng)盤怎么下載文件seo是什么服
  • 網(wǎng)站設(shè)計(jì) 重慶seoul是啥意思
  • 嵐山網(wǎng)站建設(shè)報(bào)價(jià)老鐵外鏈
  • 微網(wǎng)站建設(shè)使用程序西安關(guān)鍵詞排名首頁
  • 門戶網(wǎng)站概念網(wǎng)絡(luò)營銷推廣服務(wù)
  • 怎樣做類似淘寶網(wǎng)的網(wǎng)站汕頭網(wǎng)站優(yōu)化
  • 用html編寫淘寶網(wǎng)站怎么做seo友情鏈接
  • 漢子由來 外國人做的網(wǎng)站網(wǎng)站建設(shè)公司服務(wù)
  • 南和網(wǎng)站建設(shè)公司網(wǎng)絡(luò)推廣費(fèi)用計(jì)入什么科目
  • 程序開源網(wǎng)站關(guān)鍵詞列表
  • 新手學(xué)易語言多久可以做網(wǎng)站中國優(yōu)秀網(wǎng)頁設(shè)計(jì)案例
  • 本地旅游網(wǎng)站模版網(wǎng)絡(luò)營銷網(wǎng)站推廣方法
  • 做公司網(wǎng)站多少錢站長工具在線查詢
  • 網(wǎng)站背景色最新天氣預(yù)報(bào)最新消息
  • 如何做網(wǎng)站刷題西安網(wǎng)站建設(shè)
  • 做企業(yè)網(wǎng)站的架構(gòu)圖廣州王牌seo
  • 公司做網(wǎng)站流程關(guān)鍵詞挖掘工具愛網(wǎng)
  • 菲律賓有做網(wǎng)站的嗎seo優(yōu)化是做什么的
  • 安卓手機(jī) 做網(wǎng)站湘潭seo優(yōu)化
  • 有哪些做留學(xué)資訊的網(wǎng)站搜全網(wǎng)的瀏覽器
  • 豬八戒做網(wǎng)站怎么樣打開百度一下的網(wǎng)址
  • 服務(wù)器安全設(shè)置河南網(wǎng)站seo費(fèi)用
  • 網(wǎng)站域名不合法新聞最新消息
  • 建設(shè)單位企業(yè)鎖登陸網(wǎng)站seo沈陽
  • 做中英文游戲門戶網(wǎng)站關(guān)鍵詞怎么弄百度一下的網(wǎng)址
  • 500人在線網(wǎng)站建設(shè)配置國家市場監(jiān)管總局官網(wǎng)
  • 武漢武昌做網(wǎng)站推廣百度推廣需要什么條件
  • 長沙做網(wǎng)站好的公司有哪些跨境電商平臺哪個(gè)最好最可靠