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

网站生成系统源码网络科技有限公司 网站建设

网站生成系统源码,网络科技有限公司 网站建设,做网站的收获及感想,外贸平台是什么访问者模式是用于访问复杂数据结构的元素#xff0c;对不同的元素执行不同的操作。策略模式是对于具有多种实现的算法#xff0c;在运行过程中可动态选择使用哪种具体的实现。状态模式是用于具有不同状态的对象#xff0c;状态之间可以转换#xff0c;且不同状态下对象的行… 访问者模式是用于访问复杂数据结构的元素对不同的元素执行不同的操作。策略模式是对于具有多种实现的算法在运行过程中可动态选择使用哪种具体的实现。状态模式是用于具有不同状态的对象状态之间可以转换且不同状态下对象的行为不同客户端可以不必考虑其状态及转换对所有的状态都可以执行同一的操作。 1 访问者模式 需求需要对一个复杂数据结构进行操作根据其不同的元素类型执行不同的操作。 1.1 访问者模式介绍 将数据结构与数据操作分离通过定义一个访问者对象来实现对数据结构中各个元素的访问和处理从而达到解耦和灵活操作的目的。 图 访问者模式 UML 1.1.1 双分派 Java 是一种支持双分派的单分派语言。 单分派 调用哪个对象多态的方法在运行期确定调用对象的哪个方法在编译期确定。 双分派 调用哪个对象多态的方法在运行期确定调用对象的哪个方法在运行期确定。 图 单分派与双分派 访问者模式中的元素对象中的accept方法就是双分派。 public class VisitorPattern {public static void main(String[] args) {Element[] elements {new MobilePhone(),new Ipad(),new Computer()};Visitor[] visitors {new Student(),new Programmer()};for (Visitor visitor : visitors) {for (Element element : elements) {element.accept(visitor);}}}private interface Element {void accept(Visitor visitor);}private static class MobilePhone implements Element{Overridepublic void accept(Visitor visitor) {visitor.visit(this);}public void makeCall() {System.out.println(打电话);}public void wechat() {System.out.println(微信聊天);}public void playGame() {System.out.println(玩王者荣耀);}}private static class Ipad implements Element {Overridepublic void accept(Visitor visitor) {visitor.visit(this);}public void watchTv() {System.out.println(刷剧);}public void playGame() {System.out.println(玩王者荣耀,大屏更爽);}}private static class Computer implements Element {Overridepublic void accept(Visitor visitor) {visitor.visit(this);}public void playGame() {System.out.println(玩电脑游戏使命召唤);}public void work() {System.out.println(用于工作);}}private interface Visitor {void visit(MobilePhone mobilePhone);void visit(Ipad ipad);void visit(Computer computer);}private static class Programmer implements Visitor {Overridepublic void visit(MobilePhone mobilePhone) {mobilePhone.makeCall();}Overridepublic void visit(Ipad ipad) {ipad.playGame();}Overridepublic void visit(Computer computer) {computer.work();}}private static class Student implements Visitor {Overridepublic void visit(MobilePhone mobilePhone) {mobilePhone.wechat();}Overridepublic void visit(Ipad ipad) {ipad.watchTv();}Overridepublic void visit(Computer computer) {computer.playGame();}}} 1.2 优缺点 优点 将数据结构与数据操作分离当需要添加新的操作时只添加新的子类即可符合开闭原则。将对元素的操作集中到一个类中而不是分散在元素的子类中使得职责更加明确代码更加清晰符合单一职责原则。 缺点 不适合结构不稳定的数据结构当新增或删除元素时需要修改访问者类不符合开闭原则。如果访问者需要访问元素的内部信息可能会破坏封装性。 2 策略模式 需求一个算法有多种实现方式或一个对象有很多的行为这些行为需要使用多重条件选择语句来实现。期望把这些行为转移到具体的策略类中避免使用难以维护的多重语句。 2.1 策略模式介绍 定义一个算法接口然后将其不同的实现封装到具体的策略类中并让它们可以相互替换。 图 策略模式 UML public class StrategyPattern {public static void main(String[] args) {SortAlgorithm[] sortAlgorithms {new BubbleSortAlgorithm(),new SelectionSortAlgorithm()};Integer[][] array {{34,23,2,4,6,44,11,53,221,123},{3,66,27,212,45,565,11,44,33,12,465,55,22,14,56}};for (SortAlgorithm sortAlgorithm : sortAlgorithms) {for (Integer[] arr : array) {sortAlgorithm.sort(arr);}System.out.println();}}private static abstract class SortAlgorithm {public void sort(Integer[] array) { // 升序if (array ! null array.length 1) {array Arrays.copyOf(array,array.length);opera(array);System.out.println(Arrays.asList(array));}}protected abstract void opera(Integer[] array);}/*** 冒泡排序*/private static class BubbleSortAlgorithm extends SortAlgorithm{Overrideprotected void opera(Integer[] array) {for (int i 0; i array.length; i) {for (int j i 1; j array.length; j) {if (array[i] array[j]) {int temp array[j];array[j] array[i];array[i] temp;}}}}}/*** 选择排序*/private static class SelectionSortAlgorithm extends SortAlgorithm {Overrideprotected void opera(Integer[] array) {for (int i 0; i array.length; i) {int minPos i;for (int j i1; j array.length; j) {if (array[minPos] array[j]) {minPos j;}}int temp array[i];array[i] array[minPos];array[minPos] temp;}}}} 2.2 优缺点 优点 符合开闭原则增加新的算法或行为时只需要添加子类即可。避免了多重条件选择语句。 缺点 客户端必须知道所有的策略类并自行决定使用哪个策略类。会增加类的数量。 3 状态模式 需求系统中某个对象存在多个状态这些状态之间可以进行转换且对象在不同状态下的行为不同。 3.1 状态模式介绍 将一个对象的状态从该对象中分离出来封装到专门的状态类中。对于客户端而言无须关心对象的状态及转换无论对象处于哪种状态客户端都可以一致性地处理。 图 状态模式 UML public class StatePattern {public static void main(String[] args) {BackCard backCard new BackCard();backCard.save(100);backCard.withdraw(1000);backCard.withdraw(600);backCard.withdraw(400);backCard.withdraw(100);}private static class BackCard {private final static State[] stateList {new NormalState(),new Overdraft(),new LimitState()};private State state stateList[0];private double balance 0;public double getBalance() {return balance;}public void setBalance(double balance) {this.balance balance;}public void save(double money) {System.out.println(存钱操作: money);this.balance money;changeState();}public void withdraw(double money) {System.out.println(取钱操作: money);try {state.withdraw(this,money);} catch (RuntimeException e) {System.out.println(取钱失败: e.getMessage());}changeState();}private void changeState() {System.out.println(-----余额 balance -----);if (balance 0) state stateList[0];else if (balance -1000) state stateList[1];else state stateList[2];}}private interface State {void withdraw(BackCard backCard,double money);}private static class NormalState implements State {Overridepublic void withdraw(BackCard backCard,double money) {backCard.setBalance(backCard.getBalance() - money);}}private static class Overdraft implements State {Overridepublic void withdraw(BackCard backCard,double money) {if (money 500) {throw new RuntimeException(卡被透支取钱不能超过500元);}backCard.setBalance(backCard.getBalance() - money);}}private static class LimitState implements State {Overridepublic void withdraw(BackCard backCard,double money) {throw new RuntimeException(卡被限制不能取钱);}}} 3.2 优缺点 优点 客户端可以不必关心对象的状态及转换对所有状态都可进行同一操作。将与具体状态相关的行为都封装在一个类中符合单一职责原则更容易扩展及维护。 缺点 状态转换无论是在环境类还是状态类中当增加新的状态或修改转换逻辑时都需要修改转换代码不符合开闭原则。增加了类的个数。
http://www.w-s-a.com/news/716574/

相关文章:

  • 58同城有做网站wordpress怎么改标题和meta
  • 安通建设有限公司网站东莞地铁app
  • 群晖nas做网站滨州教育平台 网站建设
  • 住房城市乡建设部网站装修平台有哪些
  • 小米网站 用什么做的深圳广告公司前十强
  • 勤哲网站开发视频瑞安 网站建设培训
  • 有个蓝色章鱼做标志的网站高端的网站建设怎么做
  • 建站网址导航hao123html网页设计实验总结
  • 西宁市网站建设价格丽水集团网站建设
  • 长宁怎么做网站优化好本机怎么放自己做的网站
  • 诚信网站备案中心网站字体怎么设置
  • 企业网站建设费是无形资产吗佛山网站建设哪个好点
  • 网站建设就业方向国开行网站毕业申请怎么做
  • 创建一个网站的费用wordpress 4.0 安装
  • 会员登录系统网站建设dw软件是做什么用的
  • 手机网站被做跳转长沙网上购物超市
  • 网站建设中网站需求分析设计网站推荐html代码
  • 容易收录的网站台州汇客网站建设
  • 企业网站源码百度网盘下载网站备案号如何查询密码
  • 个人网站建设课程宣传栏制作效果图
  • 自己做的网站能上传吗网上做彩票网站排名
  • 教育培训网站模板下载自己做商务网站有什么利弊
  • 平面设计公司网站兰州室内设计公司排名
  • 个人工作室注册条件温州seo结算
  • 360免费建站系统中国建设银行官网站黄金部王毅
  • 罗源福州网站建设个体户可以网站备案吗
  • 网站开发 专有名词pc网站建设和推广
  • 上海部道网站 建设conoha wordpress
  • 手机测评做视频网站宝塔可以做二级域名网站么
  • 代理公司注册济南重庆seo优化效果好