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

做抛物线的网站分发平台

做抛物线的网站,分发平台,网站后台制作表格,做外贸的有哪些网站有哪些策略模式 策略模式的用意是针对一组算法#xff0c;将每一个算法封装到具有共同接口的独立类中#xff0c;从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 策略模式的结构 策略模式是对算法的包装#xff0c;是把使用算法的责任和算法本…策略模式 策略模式的用意是针对一组算法将每一个算法封装到具有共同接口的独立类中从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。   策略模式的结构 策略模式是对算法的包装是把使用算法的责任和算法本身分开。策略模式通常是把一系列的算法包装到一系列的策略类里面作为一个抽象策略类的子类。 策略模式涉及到三个角色 1、环境角色 持有一个策略Strategy的引用 2、抽象策略角色 这是一个抽象角色通常由一个接口或抽象类实现此角色给出所有具体策略类所需的接口 3、具体策略角色 包装了相关算法或行为   策略模式示例 有一个抽象的策略接口 public interface Strategy {public void useStrategy(); } 实现两种具体的策略 public class StrategyA implements Strategy {public void useStrategy(){System.out.println(StrategyA.useStrategy());} } public class StrategyB implements Strategy {public void useStrategy(){System.out.println(StrategyB.useStrategy());} } 某个类持有策略的引用 public class Context {private Strategy strategy;public Context(Strategy strategy){this.strategy strategy;}public void strategyMethod(){strategy.useStrategy();} } 调用这个类的地方可以自行决定使用哪种策略 public class TestMain {public static void main(String[] args){Strategy strategyA new StrategyA();Strategy strategyB new StrategyB();Context context new Context(strategyA);context.strategyMethod();context new Context(strategyB);context.strategyMethod();} }   策略模式的使用场景 1、购物系统 举一个实际例子吧。假如有一个购物系统在用户付款的时候会产生很多场景根据用户的不同情况算出不同用户要付款的金额这时候最直观的一种做法是 在付款的里面写N多的if...else if...else判断用户的场景根据场景计算用户付款金额。 这种设计明显违反了开闭原则。开闭原则的闭指的是对修改关闭但是这里假如算法又多了几种那么必须再次修改这个付款的类。 这时候就可以使用策略模式。在付款的类里面持有一个付款接口的引用每次根据不同场景传入一个具体的策略就好了。比如A类中要使用S0算法就传入一个S0策略B类中要使用S1算法就传入一个S1算法。不需要把判断都放在付款的类中代码的可读性、可维护性也更高了。付款这个类甚至可以直接生成一个.class文件放在一个jar包里面供调用。 2、使得代码更优雅、更易维护 假如你的代码中某处有一个打分系统你为这个打分系统写了一段非常长的逻辑某天产品部门的同事找你给我换一段打分逻辑此时有两种做法 1把原有的打分逻辑删除但这么做一个缺点是是看不到以前的打分算法了另一个缺点是如果以后打分算法要换回来就找不到代码虽然SVN和GIT这种版本管理工具都有历史提交记录的功能但还是显得麻烦 2把原有的打分逻辑注释但这么做的最大缺点是代码中有大量的注释尤其在策略逻辑非常长的时候这就导致了代码的可读性非常差 此时就可以使用策略模式将打分逻辑抽象为一种策略换打分策略新增一个策略的实现类最后再让代码中传入新的策略实现类即可。   策略模式在Java中的应用及解读 策略模式在Java中的应用这个太明显了因为Comparator这个接口简直就是为策略模式而生的。Comparable和Comparator的区别一文中详细讲了Comparator的使用。比方说Collections里面有一个sort方法因为集合里面的元素有可能是复合对象复合对象并不像基本数据类型可以根据大小排序复合对象怎么排序呢基于这个问题考虑Java要求如果定义的复合对象要有排序的功能就自行实现Comparable接口或Comparator接口看一下sort带Comparator的重载方法 1 public static T void sort(ListT list, Comparator? super T c) { 2 Object[] a list.toArray(); 3 Arrays.sort(a, (Comparator)c); 4 ListIterator i list.listIterator(); 5 for (int j0; ja.length; j) { 6 i.next(); 7 i.set(a[j]); 8 } 9 } 跟一下第3行 1 public static T void sort(T[] a, Comparator? super T c) { 2 T[] aux (T[])a.clone(); 3 if (cnull) 4 mergeSort(aux, a, 0, a.length, 0); 5 else 6 mergeSort(aux, a, 0, a.length, 0, c); 7 } 传入的c不为null跟一下第6行的mergeSort 1 private static void mergeSort(Object[] src,2 Object[] dest,3 int low, int high, int off,4 Comparator c) {5 int length high - low;6 7 // Insertion sort on smallest arrays8 if (length INSERTIONSORT_THRESHOLD) {9 for (int ilow; ihigh; i) 10 for (int ji; jlow c.compare(dest[j-1], dest[j])0; j--) 11 swap(dest, j, j-1); 12 return; 13 } 14 15 // Recursively sort halves of dest into src 16 int destLow low; 17 int destHigh high; 18 low off; 19 high off; 20 int mid (low high) 1; 21 mergeSort(dest, src, low, mid, -off, c); 22 mergeSort(dest, src, mid, high, -off, c); 23 24 // If list is already sorted, just copy from src to dest. This is an 25 // optimization that results in faster sorts for nearly ordered lists. 26 if (c.compare(src[mid-1], src[mid]) 0) { 27 System.arraycopy(src, low, dest, destLow, length); 28 return; 29 } 30 31 // Merge sorted halves (now in src) into dest 32 for(int i destLow, p low, q mid; i destHigh; i) { 33 if (q high || p mid c.compare(src[p], src[q]) 0) 34 dest[i] src[p]; 35 else 36 dest[i] src[q]; 37 } 38 } 第10行根据Comparator接口实现类的compare方法的返回结果决定是否要swap交换。 这就是策略模式我们可以给Collections的sort方法传入不同的Comparator的实现类作为不同的比较策略。不同的比较策略对同一个集合可能会产生不同的排序结果。   认识策略模式 应当明白策略模式的重心不是如何实现算法就如同工厂模式的重心不是工厂中如何产生具体子类一样而是如何组织、调用这些算法从而让程序结构更灵活具有更好的维护性和扩展性。 策略模式有一个很大的特点就是各策略算法的平等性。对于一系列具体的策略算法大家的地位是完全一样的正因为这个平等性各个算法之间才可以相互替换。 运行期间每一个时刻只能使用一个具体的策略实现对象虽然可以动态地在不同的策略中实现切换。   策略模式的优缺点 优点 1、避免了多重条件if...else if...else语句多重条件语句并不容易维护 2、策略模式提供了管理相关算法簇的办法恰当使用继承可以把公共代码移到父类从而避免了代码重复 缺点 1、客户端必须知道所有的策略类并自行决定使用 哪一个策略这意味着客户端必须理解这些算法的区别以便选择恰当的算法 2、如果备选策略很多对象的数据会很多
http://www.yutouwan.com/news/500558/

相关文章:

  • c 做网站加载多个图片js修改wordpress
  • 网站底部备案图标手机 网站 系统
  • 网站 维护方案维护网站建设
  • 有深度网站四川建设厅网站入川备案文件
  • 怎样给公司申请一个网站cms网站怎么建
  • 营销型网站建设的五力原则包括网站如何与域名绑定
  • 天蓝色网站万网网站域名
  • 网站企业备案改个人备案海外网站推广方法
  • 郑州电子商务网站建设WordPress媒体库丢失
  • 珠海手机建站模板建设工程获奖查询网站
  • 网站建设工作情况cnnic可信网站
  • 合肥网站开发外包ui设计好学吗?要学多久
  • wap网站教程有没有专门做ppt的网站吗
  • 用php制作一个个人信息网站深圳vi设计平台
  • 福州最好的网站建设网络公司网站建设的问题分析
  • 企业网站建设 推广徐州网站制作方法
  • 怎么做网站的外链wordpress theid
  • 做js题目的网站知乎怎么建立网站模版
  • 自助建子站百度最怕哪个部门去投诉
  • 企业营销网站服务器1g够wordpress page内容
  • 合肥网站设计公做网站内链什么意思
  • 优质企业网站开发h5网页制作基础教程
  • 昌吉住房和城乡建设局网站女性门户网站源码
  • 三亚网站建设兼职服务质量好的外贸营销系统
  • 开个人网站怎么赚钱给您更优质的服务体验
  • 如何管理网站内容wordpress musik主题
  • 网站建设3合1什么意思做交互设计的网站
  • 分析海尔网站的建设特点和优势地名公共服务网站建设
  • 南京网站制作哪家好wordpress 锚点插件
  • 如何注册网站免费的官网网站建设