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

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

自己如何開自己的商城搜索引擎優(yōu)化是免費(fèi)的嗎

自己如何開自己的商城,搜索引擎優(yōu)化是免費(fèi)的嗎,企業(yè)網(wǎng)站信息化建設(shè),山東網(wǎng)站備案注意事項(xiàng)我們?cè)陂_發(fā)時(shí)經(jīng)常會(huì)遇到一堆的if else …, 或者switch, 比如我們常見的全局異常處理等, 像類似這種很多if else 或者多場(chǎng)景模式下, 策略模式是非常受歡迎的一種設(shè)計(jì)模式, 然而, 一個(gè)好的策略模式卻不是那么容易寫出來. 我在工作中也因?yàn)閷憻┝藄witch,if else 覺得很不優(yōu)雅, 因…

我們?cè)陂_發(fā)時(shí)經(jīng)常會(huì)遇到一堆的if else …, 或者switch, 比如我們常見的全局異常處理等, 像類似這種很多if else 或者多場(chǎng)景模式下, 策略模式是非常受歡迎的一種設(shè)計(jì)模式, 然而, 一個(gè)好的策略模式卻不是那么容易寫出來.

我在工作中也因?yàn)閷憻┝藄witch,if else 覺得很不優(yōu)雅, 因此,我考慮是否有一套統(tǒng)一的解決方案呢?

思考我問題的初衷, 在什么策略下, 滿足什么條件執(zhí)行什么動(dòng)作, 返回什么值, 這就是策略模式需要解決的核心問題, 大眼一看好似有點(diǎn)類似狀態(tài)機(jī)? 然而它并不是狀態(tài)機(jī), 狀態(tài)機(jī)是比較笨重, 而策略機(jī)應(yīng)該是足夠輕量的.

我們?cè)賮砜春诵膯栴},關(guān)于什么策略,滿足什么條件執(zhí)行什么動(dòng)作,返回什么值, 是一個(gè)明顯的dsl語法, 因此, 我的基本語法糖已確立: strategy.of().when().perform()或者strategy.of().perform(), 因?yàn)橛袝r(shí)我們并不需要條件, 僅僅策略即可.

我們要實(shí)現(xiàn)上述語法糖, 就得設(shè)計(jì)一套規(guī)則, 使其可以滿足dsl, 并且是合理的, 如此, 基本定義已確定, 如下:

/*** {@link StrategyMachineBuilder}* @param <S> strategy* @param <C> context* @param <R> result*/
public interface StrategyMachineBuilder<S,C,R> {Of<S,C,R> of(S s);StrategyMachine<S,C,R> build(String id);
}
/*** {@link Of}* @param <S> strategy* @param <C> context* @param <R> result*/
public interface Of<S,C,R> {When<S,C,R> when(Condition<S,C,R> condition);StrategyMachineBuilder<S,C,R> perform(Action<C,R> action);
}
/*** {@link When}* @param <S> strategy* @param <C> context* @param <R> result*/
public interface When<S,C,R> {StrategyMachineBuilder<S,C,R> perform(Action<C,R> action);
}

/*** {@link Condition}* @param <S> strategy* @param <C> context* @param <R> result*/
public interface Condition<S,C,R> {boolean isSatisfied(S s,C c);
}
/*** {@link Action}* @param <C> context* @param <R> result*/
public interface Action<C,R> {R apply(C c);
}
/*** {@link Strategy}* @param <S> strategy* @param <C> context* @param <R> result*/
public interface Strategy<S, C, R> {S strategy();Condition<S,C,R> condition();Action<C, R> action();Strategy<S,C,R> strategy(S s);Strategy<S,C,R> condition(Condition<S,C,R> condition);Strategy<S,C,R> action(Action<C,R> action);
}
/*** {@link StrategyMachine}* @param <S> strategy* @param <C> context* @param <R> result*/
public interface StrategyMachine<S,C,R> {R apply(S s, C c);
}

如此: 架構(gòu)已經(jīng)構(gòu)建完畢, 剩下的工作就很簡(jiǎn)單了, 實(shí)現(xiàn)此架構(gòu)即可.

/*** {@link StrategyMachineBuilderImpl}* @param <S> strategy* @param <C> context* @param <R> result*/
class StrategyMachineBuilderImpl<S,C,R> implements StrategyMachineBuilder<S,C,R>{private final Map<S, List<Strategy<S,C,R>>> map = new ConcurrentHashMap<>();@Overridepublic Of<S, C, R> of(S s) {map.computeIfAbsent(s, k -> new ArrayList<>());Strategy<S,C,R> strategy = new StrategyImpl();map.get(s).add(strategy);return new OfImpl(strategy);}@Overridepublic StrategyMachine<S, C, R> build(String id) {StrategyMachineImpl<S, C, R> machine = new StrategyMachineImpl<>(map);StrategyCache.put(id, machine);return machine;}public class OfImpl implements Of<S,C,R>{private final Strategy<S,C,R> strategy;OfImpl(Strategy<S,C,R> strategy){this.strategy = strategy;}@Overridepublic When<S, C, R> when(Condition<S,C,R> condition) {this.strategy.condition(condition);return new WhenImpl(strategy);}@Overridepublic StrategyMachineBuilder<S, C, R> perform(Action<C, R> action) {this.strategy.action(action);return StrategyMachineBuilderImpl.this;}}public class WhenImpl implements When<S,C,R> {private final Strategy<S,C,R> strategy;WhenImpl(Strategy<S,C,R> strategy){this.strategy = strategy;}@Overridepublic StrategyMachineBuilder<S, C, R> perform(Action<C, R> action) {this.strategy.action(action);return StrategyMachineBuilderImpl.this;}}public class StrategyImpl implements Strategy<S, C, R> {private S strategy;private Condition<S,C,R> condition;private Action<C, R> action;@Overridepublic S strategy() {return this.strategy;}@Overridepublic Condition<S,C,R> condition() {return this.condition;}@Overridepublic Action<C, R> action() {return this.action;}@Overridepublic Strategy<S, C, R> strategy(S s) {this.strategy = s;return this;}@Overridepublic Strategy<S, C, R> condition(Condition<S,C,R> condition) {this.condition = condition;return this;}@Overridepublic Strategy<S, C, R> action(Action<C, R> action) {this.action = action;return this;}}
}
/*** Strategy Machine Impl* @param <S> strategy* @param <C> context* @param <R> result*/
class StrategyMachineImpl<S,C,R> implements StrategyMachine<S,C,R> {private final Map<S, List<Strategy<S,C,R>>> map;public StrategyMachineImpl(Map<S, List<Strategy<S,C,R>>> map){this.map = map;}@Overridepublic R apply(S s, C c) {List<Strategy<S, C, R>> strategies = map.get(s);if (strategies==null||strategies.isEmpty()){throw new RuntimeException("no strategy found for "+s);}for (Strategy<S, C, R> strategy : strategies) {// 如果沒有condition,直接執(zhí)行actionif (strategy.condition()==null) {return strategy.action().apply(c);}// 如果有condition,先判斷是否滿足condition,滿足則執(zhí)行actionif (strategy.condition().isSatisfied(s,c)){return strategy.action().apply(c);}}// 未發(fā)現(xiàn)策略關(guān)于s的conditionthrow new RuntimeException("no strategy found of met condition for "+s);}
}
/*** Strategy Machine Factory*/
public class StrategyMachineFactory {public static <S,C,R> StrategyMachineBuilder<S,C,R> create() {return new StrategyMachineBuilderImpl<>();}public static <S,C,R> StrategyMachine<S,C,R> get(String id) {return (StrategyMachine<S, C, R>) StrategyCache.get(id);}
}
/*** {@link StrategyCache}*/
class StrategyCache {private static final Map<String,StrategyMachine<?,?,?>> CACHE = new java.util.concurrent.ConcurrentHashMap<>();public static void put(String id, StrategyMachine<?,?,?> machine) {CACHE.put(id, machine);}public static StrategyMachine<?,?,?> get(String id) {return CACHE.get(id);}
}

如此, 策略機(jī)已實(shí)現(xiàn)完畢. 下面給出兩種場(chǎng)景例子
一. 不同年齡吃不同分量的藥
Example:
Under the age of 12, take 20 milligrams of medication per day;
12-18 years old, taking 30 milligrams a day
18-30 years old, taking 40 milligrams a day
30-50 years old, taking 45 milligrams a day
Eating 42 milligrams for those over 50 years old

class MedicineStrategy {private static StrategyMachine<String, MedicineContext, Void> strategy;static {StrategyMachineBuilder<String, MedicineContext, Void> machineBuilder = StrategyMachineFactory.create();strategy = machineBuilder.of("").when((s, c) -> c.age < 12).perform((c) -> {System.out.println("Under the age of 12, take 20 milligrams of medication per day;");return Void.TYPE.cast(null);}).of("").when((s, c) -> c.age >= 12 && c.age < 18).perform((c) -> {System.out.println("12-18 years old, taking 30 milligrams a day");return Void.TYPE.cast(null);}).of("").when((s, c) -> c.age >= 18 && c.age < 30).perform((c) -> {System.out.println("18-30 years old, taking 40 milligrams a day");return Void.TYPE.cast(null);}).of("").when((s, c) -> c.age >= 30 && c.age < 50).perform((c) -> {System.out.println("30-50 years old, taking 45 milligrams a day");return Void.TYPE.cast(null);}).of("").when((s, c) -> c.age >= 50).perform((c) -> {System.out.println("Eating 42 milligrams for those over 50 years old");return Void.TYPE.cast(null);}).build("medicine");}public static StrategyMachine<String, MedicineContext, Void> get() {// StrategyMachine<String, MedicineContext, Void> strategy = StrategyMachineFactory.get("medicine");return strategy;}@Data@AllArgsConstructor@NoArgsConstructorpublic static class MedicineContext {private int age;}public static void main(String[] args) {get().apply("", new MedicineContext(10));}}

二. 計(jì)算機(jī)

		StrategyMachineBuilder<String, StrategyContext, Number> machineBuilder = StrategyMachineFactory.create();machineBuilder.of("加法").perform(strategyContext -> strategyContext.a + strategyContext.b);machineBuilder.of("減法").perform(strategyContext -> strategyContext.a - strategyContext.b);machineBuilder.of("乘法").perform(strategyContext -> strategyContext.a * strategyContext.b);// 除法,當(dāng)c==1時(shí),忽略小數(shù)位, 當(dāng)c==2時(shí)不忽略machineBuilder.of("除法").when((s, strategyContext) -> strategyContext.c == 1).perform(strategyContext -> strategyContext.a / strategyContext.b);machineBuilder.of("除法").when((s, strategyContext) -> strategyContext.c == 2).perform(strategyContext -> (strategyContext.a * 1.0d) / (strategyContext.b * 1.0d));StrategyMachine<String, StrategyContext, Number> strategyMachine = machineBuilder.build("test");// StrategyMachine<String, StrategyContext, Number> strategyMachine =  StrategyMachineFactory.get("test");System.out.println(strategyMachine.apply("加法", new StrategyContext(1, 2, 1)));System.out.println(strategyMachine.apply("減法", new StrategyContext(1, 2, 1)));System.out.println(strategyMachine.apply("乘法", new StrategyContext(1, 2, 1)));System.out.println(strategyMachine.apply("除法", new StrategyContext(1, 2, 1)));System.out.println(strategyMachine.apply("除法", new StrategyContext(1, 2, 2)));

源碼地址: https://github.com/zhangpan-soft/dv-commons

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

相關(guān)文章:

  • 給網(wǎng)站做排名優(yōu)化學(xué)什么好處包就業(yè)的培訓(xùn)學(xué)校
  • 基于java開發(fā)網(wǎng)站開發(fā)網(wǎng)站關(guān)鍵詞提升
  • 企業(yè)商務(wù)網(wǎng)站的技術(shù)上海關(guān)鍵詞排名提升
  • 學(xué)校網(wǎng)站建設(shè)先進(jìn)個(gè)人榮譽(yù)長(zhǎng)沙好的seo外包公司
  • 網(wǎng)站建設(shè)公司運(yùn)營(yíng)手機(jī)建站系統(tǒng)
  • jsp網(wǎng)站制作詳細(xì)教程站長(zhǎng)工具流量統(tǒng)計(jì)
  • 廣州淘寶網(wǎng)站建設(shè)泰州百度關(guān)鍵詞優(yōu)化
  • 網(wǎng)站開發(fā)軟件系統(tǒng)教程seo推廣排名網(wǎng)站
  • 烽火臺(tái)網(wǎng)站游戲推廣一個(gè)月能拿多少錢
  • 可信網(wǎng)站身份驗(yàn)證免費(fèi)制作自己的網(wǎng)頁
  • 誰能幫我做網(wǎng)站網(wǎng)站引流推廣怎么做
  • 軟件生命周期七個(gè)階段天津百度網(wǎng)站排名優(yōu)化
  • 佛山網(wǎng)站建設(shè)哪家公司好怎么創(chuàng)建網(wǎng)站鏈接
  • 承接網(wǎng)站建設(shè)文案百度搜索關(guān)鍵詞統(tǒng)計(jì)
  • 網(wǎng)站維護(hù)會(huì)導(dǎo)致打不開網(wǎng)頁嗎?網(wǎng)絡(luò)推廣企劃
  • 哪些品牌網(wǎng)站做的好東莞seo托管
  • 做真香表情包的網(wǎng)站seo免費(fèi)自學(xué)的網(wǎng)站
  • vs2019可以做網(wǎng)站嗎北京seo網(wǎng)站推廣
  • 網(wǎng)站301跳轉(zhuǎn)怎么做的百度seo灰色詞排名代發(fā)
  • 做的好的學(xué)校網(wǎng)站電話營(yíng)銷銷售系統(tǒng)
  • 為什么做的網(wǎng)站別的瀏覽器打不開怎么回事永久免費(fèi)自動(dòng)建站
  • 讀心王爺太難纏抖音seo代理
  • 網(wǎng)站空間商推薦百度怎樣發(fā)布信息
  • 最版網(wǎng)站建設(shè)案例百度引流推廣怎么收費(fèi)
  • wordpress騰訊地圖插件北京優(yōu)化網(wǎng)站建設(shè)
  • 網(wǎng)站建設(shè)的快樂技能培訓(xùn)班
  • 武漢seo網(wǎng)站優(yōu)化排名中國(guó)輿情觀察網(wǎng)
  • 建設(shè)網(wǎng)站找哪個(gè)公司怎么開通網(wǎng)站
  • 訪問外國(guó)網(wǎng)站速度慢app引流推廣軟件
  • 大數(shù)據(jù)網(wǎng)站開發(fā)網(wǎng)站建設(shè)制作教程