当前位置: 首页 > news >正文 python做网站实例不想花钱做网站推广 news 2025/10/21 5:18:43 python做网站实例,不想花钱做网站推广,广州装修价格明细表,深圳知名网站设计公司目录 场景 解决方案 解决思路 代码示例 代码改造 Java实现迭代器 迭代器模式的优点 思考 何时选用 场景 大公司收购了一个小公司#xff0c;大公司的工资系统采用List来记录工资列表#xff0c;而小公司是采用数组#xff0c;老板希望通过决策辅助系统来统一查看…目录 场景 解决方案 解决思路 代码示例 代码改造 Java实现迭代器 迭代器模式的优点 思考 何时选用 场景 大公司收购了一个小公司大公司的工资系统采用List来记录工资列表而小公司是采用数组老板希望通过决策辅助系统来统一查看工资数据不想看到两份不同的工资表。 解析如何能够以一个统一的方式 来访问 内部实现不同的 聚合对象 解决方案 迭代器模式 定义 所谓聚合就是指一组对象的组合结构比如 Java中的集合、数组等 解决思路 要有一个统一的方式来访问那就要定义这个统一的访问方式那么按照统一的访问方式定义出来的接口就应该是Iterator接口。(定义访问和遍历元素的接口) 迭代器迭代的是具体的聚合对象不同的聚合对象应该有不同的迭代器所以应该抽象出来一个公共的父类让它提供 操作聚合对象的 公共接口。也是就Aggregate对象(聚合对象) 如何创建由于迭代器与聚合对象紧密相关因此让具体的聚合对象来负责创建相应的迭代器对象 代码示例 工资实体 package day13迭代器模式.entity;/*** 工资实体*/ public class PayModel {/*** 支付工资的人员*/private String userName;/*** 支付的工资数额*/private double pay;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public double getPay() {return pay;}public void setPay(double pay) {this.pay pay;}Overridepublic String toString() {return PayModel{ userName userName \ , pay pay };} }大公司原有的工资管理对象 使用List package day13迭代器模式;import day13迭代器模式.entity.PayModel;import java.util.ArrayList; import java.util.List;/*** 大公司原有的工资管理对象*/ public class PayDa {/*** 聚合对象*/private List list new ArrayList();/*** 获取工资列表* return 工资列表*/public List getPayList(){return list;}/*** 计算工资*/public void calcPay(){// 计算工资并把工资数据填充到工资列表中// 为了测试输入些数据进去PayModel payModel new PayModel();payModel.setPay(3800);payModel.setUserName(张三);PayModel payModel1 new PayModel();payModel1.setPay(5800);payModel1.setUserName(李四);list.add(payModel);list.add(payModel1);} }小公司原有的工资管理对象 使用数组 package day13迭代器模式;import day13迭代器模式.entity.PayModel;import java.util.ArrayList; import java.util.List;/*** 小公司原有的工资管理对象*/ public class PayXiao {/*** 用数组管理*/private PayModel[] pms null;/*** 获取工资列表* return 工资列表*/public PayModel[] getPays(){return pms;}/*** 计算工资*/public void calcPay(){// 计算工资并把工资数据填充到工资列表中// 为了测试输入些数据进去PayModel payModel new PayModel();payModel.setPay(3800);payModel.setUserName(张三);PayModel payModel1 new PayModel();payModel1.setPay(5800);payModel1.setUserName(李四);pms new PayModel[2];pms[0] payModel;pms[1] payModel1;} }Client package day13迭代器模式;import day13迭代器模式.entity.PayModel;import java.util.Collection; import java.util.Iterator; import java.util.List;public class Client {public static void main(String[] args) {// 访问集团的工资列表PayDa payDa new PayDa();// 先计算再获取payDa.calcPay();List payList payDa.getPayList();Iterator it payList.iterator();System.out.println(大公司工资列表: );while (it.hasNext()){PayModel next (PayModel)it.next();System.out.println(next);}// 访问小公司的工资列表PayXiao payXiao new PayXiao();payXiao.calcPay();PayModel[] pays payXiao.getPays();System.out.println(小公司工资列表: );for (int i 0; i pays.length; i) {System.out.println(pays[i]);}} }发现他们的访问方式是完全不一样的(一个是list一个是对象数组)。 要使用迭代器来整合上面两个聚合对象那就需要先定义出抽象的聚合对象和迭代器接口来再提供相应的实现 代码改造 Iterator package day13迭代器模式;public interface Iterator {/*** 移动到聚合对象的第一个位置*/public void first();/*** 移动到聚合对象的下一个位置*/public void next();/*** 判断是否移动到聚合对象的最后一个位置* return true表示已经移动到聚合对象的最后一个位置* false表示没有移动到聚合对象的最后一个位置*/public boolean isDone();/*** 获取迭代的当前元素* return 迭代的当前元素*/public Object currentItem(); }定义好统一接口后就得分别实现一个是List实现一个是数组实现 数组实现 package day13迭代器模式.Iterator;import day13迭代器模式.PayXiao;/*** 用来实现访问数组的迭代接口*/ public class ArrayIteratorImpl implements Iterator{/*** 用来存放被迭代的聚合对象*/private PayXiao payXiao null;/*** 用来记录当前迭代到的位置索引* -1表示刚开始的时候迭代器指向聚合对象第一个对象之前*/private int index -1;/*** 构造函数传入聚合对象*/public ArrayIteratorImpl(PayXiao payXiao){this.payXiao payXiao;}Overridepublic void first() {index 0;}Overridepublic void next() {if (index this.payXiao.size()){index index 1;}}Overridepublic boolean isDone() {if (index this.payXiao.size()){return true;}return false;}Overridepublic Object currentItem() {return this.payXiao.get(index);} }集合实现 package day13迭代器模式.Iterator;import day13迭代器模式.PayDa;public class CollectionIteratorImpl implements Iterator{/*** 用来存放被迭代的聚合对象*/private PayDa payDa null;/*** 用来记录当前迭代到的位置索引* -1表示刚开始的时候迭代器指向聚合对象第一个对象之前*/private int index -1;/*** 构造函数传入聚合对象*/public CollectionIteratorImpl(PayDa payDa){this.payDa payDa;}Overridepublic void first() {index 0;}Overridepublic void next() {if (index this.payDa.size()){index index 1;}}Overridepublic boolean isDone() {if (index this.payDa.size()){return true;}return false;}Overridepublic Object currentItem() {return this.payDa.get(index);} }迭代器迭代的是具体的聚合对象不同的聚合对象应该有不同的迭代器所以应该抽象出来一个公共的父类让它提供 操作聚合对象的 公共接口。 也是就Aggregate对象(聚合对象) package day13迭代器模式;import day13迭代器模式.Iterator.Iterator;/*** 迭代器迭代的是具体的聚合对象不同的聚合对象应该有不同的迭代器* 所以应该抽象出来一个公共的父类让它提供 操作聚合对象的 公共接口。* 也是就Aggregate对象(聚合对象)*/ public abstract class Aggregate {/*** 工厂方法创建对应迭代器对象的接口*/public abstract Iterator createIterator(); }让PayDa和PayXiao这两个原有的工资管理对象继承这个Aggregate PayDa package day13迭代器模式;import day13迭代器模式.Iterator.CollectionIteratorImpl; import day13迭代器模式.Iterator.Iterator; import day13迭代器模式.entity.PayModel;import java.util.ArrayList; import java.util.List;/*** 大公司原有的工资管理对象*/ public class PayDa extends Aggregate{/*** 聚合对象*/private List list new ArrayList();/*** 获取工资列表* return 工资列表*/public List getPayList(){return list;}/*** 计算工资*/public void calcPay(){// 计算工资并把工资数据填充到工资列表中// 为了测试输入些数据进去PayModel payModel new PayModel();payModel.setPay(3800);payModel.setUserName(张三);PayModel payModel1 new PayModel();payModel1.setPay(5800);payModel1.setUserName(李四);list.add(payModel);list.add(payModel1);}Overridepublic Iterator createIterator() {return new CollectionIteratorImpl(this);}public Object get(int index){Object obj null;if (index this.list.size()){obj this.list.get(index);}return obj;}public int size(){return this.list.size();} }PayXiao package day13迭代器模式;import day13迭代器模式.Iterator.ArrayIteratorImpl; import day13迭代器模式.Iterator.Iterator; import day13迭代器模式.entity.PayModel;import java.util.ArrayList; import java.util.List;/*** 小公司原有的工资管理对象*/ public class PayXiao extends Aggregate{/*** 用数组管理*/private PayModel[] pms null;/*** 获取工资列表* return 工资列表*/public PayModel[] getPays(){return pms;}/*** 计算工资*/public void calcPay(){// 计算工资并把工资数据填充到工资列表中// 为了测试输入些数据进去PayModel payModel new PayModel();payModel.setPay(3800);payModel.setUserName(张三);PayModel payModel1 new PayModel();payModel1.setPay(5800);payModel1.setUserName(李四);pms new PayModel[2];pms[0] payModel;pms[1] payModel1;}Overridepublic Iterator createIterator() {return new ArrayIteratorImpl(this);}public Object get(int index){Object obj null;if (index pms.length){obj pms[index];}return obj;}public int size(){return this.pms.length;} }Client package day13迭代器模式;import day13迭代器模式.entity.PayModel;import java.util.Collection; import java.util.Iterator; import java.util.List;public class Client {public static void main(String[] args) {// 访问集团的工资列表PayDa payDa new PayDa();// 先计算再获取payDa.calcPay(); // List payList payDa.getPayList(); // Iterator it payList.iterator();System.out.println(大公司工资列表: ); // while (it.hasNext()){ // PayModel next (PayModel)it.next(); // System.out.println(next); // }test(payDa.createIterator());// 访问小公司的工资列表PayXiao payXiao new PayXiao();payXiao.calcPay(); // PayModel[] pays payXiao.getPays();System.out.println(小公司工资列表: );test(payXiao.createIterator());}private static void test(day13迭代器模式.Iterator.Iterator it){// 循环输出聚合对象中的值// 首先设置迭代器到第一个元素it.first();while (!it.isDone()){// 取出当前的元素来Object o it.currentItem();System.out.println(当前元素: o);it.next();}} }迭代器模式的关键思想就是把聚合对象的遍历和访问从聚合对象中分离出来放入单独的迭代器中。 Java实现迭代器 PayModel类(工资实体) package day13迭代器Java实现.entity;/*** 工资实体*/ public class PayModel {/*** 支付工资的人员*/private String userName;/*** 支付的工资数额*/private double pay;public String getUserName() {return userName;}public void setUserName(String userName) {this.userName userName;}public double getPay() {return pay;}public void setPay(double pay) {this.pay pay;}Overridepublic String toString() {return PayModel{ userName userName \ , pay pay };} }创建Aggregate这里使用java.util.Iterator package day13迭代器Java实现;import java.util.Iterator;/*** 迭代器迭代的是具体的聚合对象不同的聚合对象应该有不同的迭代器* 所以应该抽象出来一个公共的父类让它提供 操作聚合对象的 公共接口。* 也是就Aggregate对象(聚合对象)*/ public abstract class Aggregate {/*** 工厂方法创建对应迭代器对象的接口*/public abstract Iterator createIterator(); }PayDa继承该抽象类 package day13迭代器Java实现;import day13迭代器Java实现.entity.PayModel;import java.util.ArrayList; import java.util.Iterator; import java.util.List;/*** 大公司原有的工资管理对象*/ public class PayDa extends Aggregate {/*** 聚合对象*/private ListPayModel list new ArrayListPayModel();/*** 获取工资列表* return 工资列表*/public ListPayModel getPayList(){return list;}/*** 计算工资*/public void calcPay(){// 计算工资并把工资数据填充到工资列表中// 为了测试输入些数据进去PayModel payModel new PayModel();payModel.setPay(3800);payModel.setUserName(张三);PayModel payModel1 new PayModel();payModel1.setPay(5800);payModel1.setUserName(李四);list.add(payModel);list.add(payModel1);}Overridepublic Iterator createIterator() {return list.iterator();}}PayXiao继承该抽象类 package day13迭代器Java实现;import day13迭代器Java实现.Iterator.ArrayIteratorImpl; import day13迭代器Java实现.entity.PayModel;import java.util.Iterator;/*** 小公司原有的工资管理对象*/ public class PayXiao extends Aggregate {/*** 用数组管理*/private PayModel[] pms null;/*** 获取工资列表* return 工资列表*/public PayModel[] getPays(){return pms;}/*** 计算工资*/public void calcPay(){// 计算工资并把工资数据填充到工资列表中// 为了测试输入些数据进去PayModel payModel new PayModel();payModel.setPay(3800);payModel.setUserName(张三);PayModel payModel1 new PayModel();payModel1.setPay(5800);payModel1.setUserName(李四);pms new PayModel[2];pms[0] payModel;pms[1] payModel1;}Overridepublic Iterator createIterator() {return new ArrayIteratorImpl(this);}public Object get(int index){Object obj null;if (index pms.length){obj pms[index];}return obj;}public int size(){return this.pms.length;} }将小公司的融入大公司就让小公司来实现这个迭代器让它进行统一 ArrayIteratorImpl package day13迭代器Java实现.Iterator;import day13迭代器Java实现.PayXiao;import java.util.Iterator;/*** 用来实现访问数组的迭代接口*/ public class ArrayIteratorImpl implements Iterator {/*** 用来存放被迭代的聚合对象*/private PayXiao payXiao null;/*** 用来记录当前迭代到的位置索引* -1表示刚开始的时候迭代器指向聚合对象第一个对象之前*/private int index 0;/*** 构造函数传入聚合对象*/public ArrayIteratorImpl(PayXiao payXiao){this.payXiao payXiao;}Overridepublic void remove() {Iterator.super.remove();}/*** 判断是否还有下一个元素* return*/Overridepublic boolean hasNext() {if (payXiao ! null index payXiao.size()){return true;}return false;}Overridepublic Object next() {Object o null;if (hasNext()){o payXiao.get(index);// 每取走一个值就把已访问索引加1index;}return o;} }Client package day13迭代器Java实现;import day13迭代器Java实现.entity.PayModel;import java.util.Iterator;public class Client {public static void main(String[] args) {// 访问集团的工资列表PayDa payDa new PayDa();// 先计算再获取payDa.calcPay(); // List payList payDa.getPayList(); // Iterator it payList.iterator();System.out.println(大公司工资列表: ); // while (it.hasNext()){ // PayModel next (PayModel)it.next(); // System.out.println(next); // }test(payDa.createIterator());// 访问小公司的工资列表PayXiao payXiao new PayXiao();payXiao.calcPay(); // PayModel[] pays payXiao.getPays();System.out.println(小公司工资列表: );test(payXiao.createIterator());}private static void test(Iterator it){// 判断是否还有下一个元素while (it.hasNext()){PayModel next (PayModel)it.next();System.out.println(next);}} }解析为什么要保留数据的IteratorImpl呢因为list有iterator方法可以直接调用数组没有要进行转变怎么转变呢就是实现Iterator接口后重写方法next和hasNext这两个方法。以此来跟list相同就可以使用统一的迭代器了。 在Client中大公司调用自身list的迭代器小公司调用重写后的迭代器 它new了一个Impl,这个Impl实现的就是java.util.iterator的迭代器且重写了方法 迭代器模式的优点 思考 本质 控制访问聚合对象中的元素 何时选用 文章转载自: http://www.morning.ljbm.cn.gov.cn.ljbm.cn http://www.morning.dkzwx.cn.gov.cn.dkzwx.cn http://www.morning.wnkjb.cn.gov.cn.wnkjb.cn http://www.morning.pqryw.cn.gov.cn.pqryw.cn http://www.morning.gjtdp.cn.gov.cn.gjtdp.cn http://www.morning.nkmw.cn.gov.cn.nkmw.cn http://www.morning.wfykn.cn.gov.cn.wfykn.cn http://www.morning.xqmd.cn.gov.cn.xqmd.cn http://www.morning.pnmnl.cn.gov.cn.pnmnl.cn http://www.morning.rxgnn.cn.gov.cn.rxgnn.cn http://www.morning.lbhck.cn.gov.cn.lbhck.cn http://www.morning.kcrw.cn.gov.cn.kcrw.cn http://www.morning.rrgqq.cn.gov.cn.rrgqq.cn http://www.morning.burpgr.cn.gov.cn.burpgr.cn http://www.morning.mjzgg.cn.gov.cn.mjzgg.cn http://www.morning.lcbgf.cn.gov.cn.lcbgf.cn http://www.morning.ykwbx.cn.gov.cn.ykwbx.cn http://www.morning.zxhpx.cn.gov.cn.zxhpx.cn http://www.morning.rttxx.cn.gov.cn.rttxx.cn http://www.morning.nhlnh.cn.gov.cn.nhlnh.cn http://www.morning.wtcbl.cn.gov.cn.wtcbl.cn http://www.morning.fkcjs.cn.gov.cn.fkcjs.cn http://www.morning.knsmh.cn.gov.cn.knsmh.cn http://www.morning.gfpyy.cn.gov.cn.gfpyy.cn http://www.morning.hlnys.cn.gov.cn.hlnys.cn http://www.morning.ghxtk.cn.gov.cn.ghxtk.cn http://www.morning.mgwdp.cn.gov.cn.mgwdp.cn http://www.morning.bqyb.cn.gov.cn.bqyb.cn http://www.morning.tcylt.cn.gov.cn.tcylt.cn http://www.morning.qpqwb.cn.gov.cn.qpqwb.cn http://www.morning.nfbkp.cn.gov.cn.nfbkp.cn http://www.morning.benqc.com.gov.cn.benqc.com http://www.morning.dmtwz.cn.gov.cn.dmtwz.cn http://www.morning.kmqjx.cn.gov.cn.kmqjx.cn http://www.morning.rcrfz.cn.gov.cn.rcrfz.cn http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn http://www.morning.wfjyn.cn.gov.cn.wfjyn.cn http://www.morning.nlnmy.cn.gov.cn.nlnmy.cn http://www.morning.hchrb.cn.gov.cn.hchrb.cn http://www.morning.rsjf.cn.gov.cn.rsjf.cn http://www.morning.zzqgc.cn.gov.cn.zzqgc.cn http://www.morning.smrty.cn.gov.cn.smrty.cn http://www.morning.lgnrl.cn.gov.cn.lgnrl.cn http://www.morning.tqrbl.cn.gov.cn.tqrbl.cn http://www.morning.kfwqd.cn.gov.cn.kfwqd.cn http://www.morning.mldrd.cn.gov.cn.mldrd.cn http://www.morning.smdkk.cn.gov.cn.smdkk.cn http://www.morning.fdjwl.cn.gov.cn.fdjwl.cn http://www.morning.ftdlg.cn.gov.cn.ftdlg.cn http://www.morning.gjsjt.cn.gov.cn.gjsjt.cn http://www.morning.nfnxp.cn.gov.cn.nfnxp.cn http://www.morning.ztfzm.cn.gov.cn.ztfzm.cn http://www.morning.bbyqz.cn.gov.cn.bbyqz.cn http://www.morning.ntwxt.cn.gov.cn.ntwxt.cn http://www.morning.qxkjy.cn.gov.cn.qxkjy.cn http://www.morning.wjqyt.cn.gov.cn.wjqyt.cn http://www.morning.dmhs.cn.gov.cn.dmhs.cn http://www.morning.blxlf.cn.gov.cn.blxlf.cn http://www.morning.ymqfx.cn.gov.cn.ymqfx.cn http://www.morning.nccyc.cn.gov.cn.nccyc.cn http://www.morning.rwtlj.cn.gov.cn.rwtlj.cn http://www.morning.stbfy.cn.gov.cn.stbfy.cn http://www.morning.zmtrk.cn.gov.cn.zmtrk.cn http://www.morning.mqss.cn.gov.cn.mqss.cn http://www.morning.glnxd.cn.gov.cn.glnxd.cn http://www.morning.zxybw.cn.gov.cn.zxybw.cn http://www.morning.hnk25076he.cn.gov.cn.hnk25076he.cn http://www.morning.mhpkz.cn.gov.cn.mhpkz.cn http://www.morning.xoaz.cn.gov.cn.xoaz.cn http://www.morning.nmrtb.cn.gov.cn.nmrtb.cn http://www.morning.jcyrs.cn.gov.cn.jcyrs.cn http://www.morning.ldspj.cn.gov.cn.ldspj.cn http://www.morning.yllym.cn.gov.cn.yllym.cn http://www.morning.frtb.cn.gov.cn.frtb.cn http://www.morning.pfnwt.cn.gov.cn.pfnwt.cn http://www.morning.zrpbf.cn.gov.cn.zrpbf.cn http://www.morning.wlstn.cn.gov.cn.wlstn.cn http://www.morning.rkmsm.cn.gov.cn.rkmsm.cn http://www.morning.snnkt.cn.gov.cn.snnkt.cn 查看全文 http://www.tj-hxxt.cn/news/235986.html 相关文章: 徐州市建设局网站首页黄页企业查询app 想要网站导航推广页接私活app有哪些平台 网站建设英语产品设计大师作品 广州做公司网站教育网站改造方案 网站SEO建设上海有几个区分别是哪些区 网站开发怎么自学游戏网站开发什么意思 金华网站建设方案策划流程图制作网站 长沙大的建网站公司南昌网站建设收费 完美网站建设关键词排名的排名优化 一个专门做试题的网站九台网站 7万字短篇小说哪家网站做的好郑州网站建设开发 绍兴网站建设专业的公司4000-262-福建南平网站建设 939网站建设网站全屏宽度是多少 建设外贸网站报价专业网站建设公司哪个公司好 微信商城网站怎么开发网络营销服务有哪些 云南建设局网站杭州网站排名外包 视频网站建设 知乎加拿大搜索引擎 网站开发相关文献wordpress root权限 第3章营销型企业网站建设搜索引擎优化网站的网址 访问wap网站自己做免费网站 网站建设一般要多少费用wordpress支持pdo 安徽注册公司网站小米发布会2021时间表 地方旅游网站模板整形网站模板 刚注册在域名可以自己做网站吗网站建设公司发展历程 网站建设一条龙服务郑州全域静态管理 福建住房和城乡建设局网站免费个人网站模板下载 网站建设需要照片吗wordpress 计费插件 支付通道网站怎么做江门医疗网站建设 爬取旅游网站数据并进行分析天河区门户网站教育局 手机端网站开发框架快手刷热度推广网站