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

俄语网站建设公司桓台网站建设公司

俄语网站建设公司,桓台网站建设公司,百度推广多少钱一个月,电商网站订烟平台官网Lambda 重构面向对象的设计模式 策略模式 策略模式包含三部分内容 一个代表某个算法的接口#xff08;它是策略模式的接口#xff09;。 一个或多个该接口的具体实现#xff0c;它们代表了算法的多种实现#xff08;比如#xff0c;实体类ConcreteStrategyA或者Concrete…Lambda 重构面向对象的设计模式 策略模式 策略模式包含三部分内容 一个代表某个算法的接口它是策略模式的接口。 一个或多个该接口的具体实现它们代表了算法的多种实现比如实体类ConcreteStrategyA或者ConcreteStrategyB。 一个或多个使用策略对象的客户 public interface ValidationStrategy { boolean execute(String s); }public class IsAllLowerCase implements ValidationStrategy { public boolean execute(String s){ return s.matches([a-z]); } } public class IsNumeric implements ValidationStrategy { public boolean execute(String s){ return s.matches(\\d); } }public class Validator{ private final ValidationStrategy strategy; public Validator(ValidationStrategy v){ this.strategy v; } public boolean validate(String s){ return strategy.execute(s); } } Validator numericValidator new Validator(new IsNumeric()); boolean b1 numericValidator.validate(aaaa); Validator lowerCaseValidator new Validator(new IsAllLowerCase ()); boolean b2 lowerCaseValidator.validate(bbbb); Validator numericValidator new Validator((String s) - s.matches([a-z])); boolean b1 numericValidator.validate(aaaa); Validator lowerCaseValidator new Validator((String s) - s.matches(\\d)); boolean b2 lowerCaseValidator.validate(bbbb);Lambda表达式避免了采用策略设计模式时僵化的模板代码。如果你仔细分 析一下个中缘由可能会发现Lambda表达式实际已经对部分代码或策略进行了封装而 这就是创建策略设计模式的初衷。因此我们强烈建议对类似的问题你应该尽量使用Lambda 表达式来解决 模板方法 让我们从一个例子着手看看这个模式是如何工作的。假设你需要编写一个简单的在线银行 应用。通常用户需要输入一个用户账户之后应用才能从银行的数据库中得到用户的详细信息 最终完成一些让用户满意的操作。不同分行的在线银行应用让客户满意的方式可能还略有不同 比如给客户的账户发放红利或者仅仅是少发送一些推广文件。你可能通过下面的抽象类方式来 实现在线银行应用 abstract class OnlineBanking { public void processCustomer(int id){ Customer c Database.getCustomerWithId(id); makeCustomerHappy(c); }abstract void makeCustomerHappy(Customer c); } 使用Lambda表达式 public void processCustomer(int id, ConsumerCustomer makeCustomerHappy){ Customer c Database.getCustomerWithId(id); makeCustomerHappy.accept(c); } new OnlineBankingLambda().processCustomer(1337, (Customer c) - System.out.println(Hello c.getName()); 观察者模式 interface Observer { void notify(String tweet); }class NYTimes implements Observer{ public void notify(String tweet) { if(tweet ! null tweet.contains(money)){ System.out.println(Breaking news in NY! tweet); } } } class Guardian implements Observer{ public void notify(String tweet) { if(tweet ! null tweet.contains(queen)){ System.out.println(Yet another news in London... tweet); } } } class LeMonde implements Observer{ public void notify(String tweet) { if(tweet ! null tweet.contains(wine)){ System.out.println(Today cheese, wine and news! tweet); } } } interface Subject{ void registerObserver(Observer o); void notifyObservers(String tweet); } class Feed implements Subject{ private final ListObserver observers new ArrayList(); public void registerObserver(Observer o) { this.observers.add(o); } public void notifyObservers(String tweet) { observers.forEach(o - o.notify(tweet)); } }Feed f new Feed(); f.registerObserver(new NYTimes()); f.registerObserver(new Guardian()); f.registerObserver(new LeMonde()); f.notifyObservers(The queen said her favourite book is Java 8 in Action!); 使用Lambda表达式 f.registerObserver((String tweet) - { if(tweet ! null tweet.contains(money)){ System.out.println(Breaking news in NY! tweet); } }); f.registerObserver((String tweet) - { if(tweet ! null tweet.contains(queen)){ System.out.println(Yet another news in London... tweet); } }); 那么是否我们随时随地都可以使用Lambda表达式呢答案是否定的我们前文介绍的例 子中Lambda适配得很好那是因为需要执行的动作都很简单因此才能很方便地消除僵化代 码。但是观察者的逻辑有可能十分复杂它们可能还持有状态抑或定义了多个方法诸如此 类。在这些情形下你还是应该继续使用类的方式 责任链模式 通常这种模式是通过定义一个代表处理对象的抽象类来实现的在抽象类中会定义一个字 段来记录后续对象。一旦对象完成它的工作处理对象就会将它的工作转交给它的后继。代码中 这段逻辑看起来是下面这样 public abstract class ProcessingObjectT { protected ProcessingObjectT successor; public void setSuccessor(ProcessingObjectT successor){ this.successor successor;} public T handle(T input){ T r handleWork(input); if(successor ! null){ return successor.handle(r); } return r; } abstract protected T handleWork(T input); } public class HeaderTextProcessing extends ProcessingObjectString { public String handleWork(String text){ return From Raoul, Mario and Alan: text; } } public class SpellCheckerProcessing extends ProcessingObjectString { public String handleWork(String text){ return text.replaceAll(labda, lambda); } } ProcessingObjectString p1 new HeaderTextProcessing(); ProcessingObjectString p2 new SpellCheckerProcessing(); p1.setSuccessor(p2); String result p1.handle(Arent labdas really sexy?!!); System.out.println(result); 使用Lambda表达式 UnaryOperatorString headerProcessing (String text) - From Raoul, Mario and Alan: text; UnaryOperatorString spellCheckerProcessing (String text) - text.replaceAll(labda, lambda); FunctionString, String pipeline headerProcessing.andThen(spellCheckerProcessing); String result pipeline.apply(Arent labdas really sexy?!!)工厂模式 public class ProductFactory { public static Product createProduct(String name){ switch(name){ case loan: return new Loan(); case stock: return new Stock(); case bond: return new Bond(); default: throw new RuntimeException(No such product name); } } } Product p ProductFactory.createProduct(loan); 使用Lambda表达式 final static MapString, SupplierProduct map new HashMap(); static { map.put(loan, Loan::new); map.put(stock, Stock::new); map.put(bond, Bond::new); } public static Product createProduct(String name){ SupplierProduct p map.get(name); if(p ! null) return p.get(); throw new IllegalArgumentException(No such product name); }
http://www.hkea.cn/news/14380788/

相关文章:

  • 自己做的网站如何上传网上兰州网站建设与优化
  • 常州网站建设怎么样企业网站推广短平快
  • 成都便宜做网站的企业网络营销为什么要选择外包?
  • 做电影下载网站赚钱手机网站有哪些
  • 网站建站平台系统创意品牌网站
  • 云南省建设工作网站做棋盘游戏辅助的网站
  • 网上商城系统长春seo排名公司
  • 广州网站建设服务室内装修设计师怎么样
  • 购物商城网站建设公司微信怎样创建公众号
  • 哪家网站开发公司好沈阳网站建设哪家做得好
  • 大连网站建设方案维护seo外链网站
  • 长沙网站建设论坛全网营销推广
  • 欧美企业网站模板贵州做团队培训的网站
  • 免费新闻源发布平台seo描述是什么意思
  • 淄博网站建设 熊掌号网站推广基本方法
  • 盐亭网站建设图书馆网站制作
  • wordpress相册标签张家界有实力seo优化费用
  • 福州公交集团网站建设wordpress调用文章上级栏目名字
  • 潍坊模板建站定制做网站卖水果哪里进货
  • 在什么网站上做精帖网站怎样做301
  • 河北网站推广优化如何用云服务器搭建个人网站
  • 加热器网站怎么做的网站风格分类有哪些
  • 苏州优化网站仪征市建设局网站
  • 网站建设方面论文百度seo排名优化价格
  • 免费html网站模板沈阳曙光医院看男科怎么样
  • 惠州地区网站建设公司搜索引擎哪个好
  • 计算机网站建设及管理广州招聘网最新招聘
  • 无锡网站建设网页制作网站图怎么做
  • 怎么做查询网站吗天津 公司网站建设
  • 棉桃剥壳机做网站电商好做吗?