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

网站开发使用哪种工具好网页制作软件属于应用软件吗

网站开发使用哪种工具好,网页制作软件属于应用软件吗,wordpress 目录,互联网项目推广方案说明#xff1a;本文介绍设计模式中#xff0c;创建型中的原型模式#xff1b; 飞机大战 创建型设计模式关注于对象的创建#xff0c;原型模式也不例外。如简单工厂和工厂模式中提到过的飞机大战这个例子#xff0c;游戏中飞机、坦克对象会创建许许多多的实例#xff0…说明本文介绍设计模式中创建型中的原型模式 飞机大战 创建型设计模式关注于对象的创建原型模式也不例外。如简单工厂和工厂模式中提到过的飞机大战这个例子游戏中飞机、坦克对象会创建许许多多的实例每个实例除了坐标是一模一样的如果每次都用关键字new去创建是非常消耗时间的。 Enemy敌人抽象类 /*** 敌人抽象类*/ public abstract class Enemy {/*** 敌人的坐标*/protected int x;/*** 敌人的坐标*/protected int y;/*** 抽象方法*/public Enemy(int x, int y) {this.x x;this.y y;}/*** 绘制方法*/public abstract void show(); }AirPlane飞机类 /*** 飞机*/ public class AirPlane extends Enemy {public AirPlane(int x, int y) {super(x, y);}Overridepublic void show() {System.out.println(飞机出现了坐标是 x , y);} }Client客户端类循环创建对象浪费资源影响效率 import java.util.ArrayList; import java.util.List; import java.util.Random;/*** 客户端*/ public class Client {public static void main(String[] args) {// 屏幕宽度int screenLength 100;// 定义飞机集合ListAirPlane airPlanes new ArrayList();// 创建飞机for (int i 0; i 100000; i) {airPlanes.add(new AirPlane(new Random().nextInt(screenLength), 0));}} }原型模式 原型模式是使用了Object类里面的clone()方法对原型对象也就是创建的第一个对象进行了克隆避免重复创建对象。如下 AirPlane飞机类实现Cloneable接口 /*** 飞机*/ public class AirPlane extends Enemy implements Cloneable {public AirPlane(int x, int y) {super(x, y);}Overridepublic void show() {System.out.println(飞机出现了坐标是 x , y);}/*** clone方法调用父类的clone方法*/public AirPlane clone() {Object obj null;try {obj super.clone();return (AirPlane) obj;} catch (CloneNotSupportedException e) {System.out.println(克隆失败);return null;}} }AirPlaneFactory飞机工厂类调用飞机的克隆方法 /*** 飞机工厂*/ public class AirPlaneFactory {/*** 加载一个原型对象*/private static AirPlane airPlane new AirPlane(0, 0);/*** 获取飞机* param x* return*/public static AirPlane getAirPlane(int x) {AirPlane clone airPlane.clone();clone.setX(x);return clone;} }客户端类创建飞机实例对象 import java.util.ArrayList; import java.util.List; import java.util.Random;/*** 客户端*/ public class Client {public static void main(String[] args) {// 屏幕宽度int screenLength 100;// 定义飞机集合ListAirPlane airPlanes new ArrayList();// 创建飞机for (int i 0; i 100000; i) {airPlanes.add(AirPlaneFactory.getAirPlane(new Random().nextInt(screenLength)));}// 比较两个飞机是否相等System.out.println(airPlanes.get(0) airPlanes.get(1));} }克隆的实例是不相等的 以上就是通过原型模式实例化对象的过程可以节约内存空间。 浅拷贝和深拷贝 在使用了clone()方法时我们需要知道浅拷贝和深拷贝的概念。在Java中有基本数据类型和引用数据类型其中基本数据类型有8种分别是byte、short、int、long、float、double、char、boolean除此之外的都是引用数据类型。 对于基本数据类型浅拷贝和深拷贝都是创建一个新对象而对于引用数据类型浅拷贝是拷贝一个对象的指针深拷贝是拷贝一个一模一样的对象。 例如在上面的基础上我创建一个机长类在飞机类里面注入一个机长类对象克隆之后对飞机里面的机长对象进行判断如下 机长类 /*** 机长*/ public class Captain implements Cloneable{/*** 姓名*/private String name;/*** 年龄*/private Integer age;public String getName() {return name;}public void setName(String name) {this.name name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;} }注入一个机长类对象 /*** 飞机*/ public class AirPlane extends Enemy implements Cloneable {/*** 机长*/private Captain captain;public AirPlane(int x, int y, Captain captain) {super(x, y);this.captain captain;}Overridepublic void show() {System.out.println(飞机出现了坐标是 x , y);}/*** clone方法调用父类的clone方法*/public AirPlane clone() {Object obj null;try {obj super.clone();return (AirPlane) obj;} catch (CloneNotSupportedException e) {System.out.println(克隆失败);return null;}}public Captain getCaptain() {return captain;} }克隆对象后对飞机对象和飞机对象里面的机长对象进行判断 // 比较两个飞机是否相等System.out.println(airPlanes.get(0) airPlanes.get(1));// 比较两个飞机的机长是否相等System.out.println(airPlanes.get(0).getCaptain() airPlanes.get(1).getCaptain());结果是飞机对象是互不相同的但是飞机对象中的引用数据类型是相同的是浅拷贝 这肯定是不行的每个实例的数据应该是封装独有的不能“克隆了但没完全克隆”。我们可以采用字节流的方式实现“深拷贝”如下 敌人抽象类 /*** 敌人抽象类*/ public abstract class Enemy {/*** 敌人的坐标*/protected int x;/*** 敌人的坐标*/protected int y;public int getX() {return x;}public void setX(int x) {this.x x;}public int getY() {return y;}/*** 绘制方法*/public abstract void show(); }飞机类使用IO流的方式来实现深拷贝 import java.io.*;/*** 飞机*/ public class AirPlane extends Enemy implements Serializable {/*** 机长*/private Captain captain;public Captain getCaptain() {return captain;}public void setCaptain(Captain captain) {this.captain captain;}Overridepublic void show() {System.out.println(飞机出现了坐标是 x , y);}/*** 获取飞机* param x* return*/public AirPlane getAirPlane(int x) throws IOException, ClassNotFoundException {this.setX(x);// 创建对象输出流ByteArrayOutputStream bao new ByteArrayOutputStream();ObjectOutputStream oos new ObjectOutputStream(bao);oos.writeObject(this);// 返回克隆对象ByteArrayInputStream bis new ByteArrayInputStream(bao.toByteArray());ObjectInputStream ois new ObjectInputStream(bis);return (AirPlane) ois.readObject();} }机长类 import java.io.Serializable;/*** 机长*/ public class Captain implements Serializable {/*** 姓名*/private String name;/*** 年龄*/private Integer age;public String getName() {return name;}public void setName(String name) {this.name name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age age;} }创建对象调用“克隆”方法比较两个对象的地址和对象内的引用类型数据的地址 import java.io.IOException; import java.util.Random;/*** 客户端*/ public class Client {public static void main(String[] args) throws IOException, ClassNotFoundException {// 屏幕宽度int screenLength 100;AirPlane airPlane new AirPlane();airPlane.setCaptain(new Captain());AirPlane airPlaneNew airPlane.getAirPlane(new Random().nextInt(screenLength));// 比较两个飞机是否相等System.out.println(airPlane airPlaneNew);// 比较两个飞机的机长是否相等System.out.println(airPlane.getCaptain() airPlaneNew.getCaptain());} }都为false说明“深拷贝”已经实现。 深克隆的实现并未用到Object的clone方法而是使用了IO流中的Object流的方式对对象进行序列化来实现的。 原型管理器 原型管理器的构想是创建一个管理器类包含了所有需要克隆的对象需要的时候可以直接调用管理器中的方法取一个克隆的对象出来。代码如下 定义一个敌人接口一个克隆方法一个展示方法 /*** 敌人接口*/ public interface Enemy extends Cloneable{/*** 克隆方法* return*/Enemy clone();/*** 显示方法*/void show(); }分别定义敌人飞机、敌人坦克对象 /*** 敌人飞机*/ public class AirPlane implements Enemy{Overridepublic Enemy clone() {AirPlane airPlane null;try {airPlane (AirPlane) super.clone();} catch (CloneNotSupportedException e) {System.out.println(克隆失败);}return airPlane;}Overridepublic void show() {System.out.println(敌人飞机);} }/*** 敌人坦克*/ public class Tank implements Enemy{Overridepublic Enemy clone() {Tank tank null;try {tank (Tank) super.clone();} catch (CloneNotSupportedException e) {System.out.println(克隆失败);}return tank;}Overridepublic void show() {System.out.println(敌人坦克);} }定义原型管理器通过getKey()的方式获取到对应对象的克隆实例 import java.util.Hashtable;/*** 原型管理类*/ public class PrototypeManagement {private Hashtable ht new Hashtable();private static PrototypeManagement pm new PrototypeManagement();/*** 添加敌人* param key* param enemy*/public void addEnemy(String key, Enemy enemy) {ht.put(key, enemy);}/*** 获取敌人* param key* return*/public Enemy getEnemy(String key) {Enemy enemy (Enemy) ht.get(key);return enemy.clone();}public static PrototypeManagement getPrototypeManagement() {return pm;} }客户端测试 /*** 原型管理器客户端*/ public class Client {public static void main(String[] args) {PrototypeManagement pm PrototypeManagement.getPrototypeManagement();// 添加敌人pm.addEnemy(airplane, new AirPlane());pm.addEnemy(tank, new Tank());AirPlane airplane (AirPlane) pm.getEnemy(airplane);airplane.show();AirPlane airplaneNew (AirPlane) pm.getEnemy(airplane);airplaneNew.show();System.out.println(airplane airplaneNew);System.out.println();Tank tank (Tank) pm.getEnemy(tank);tank.show();Tank tankNew (Tank) pm.getEnemy(tank);tankNew.show();System.out.println(tank tankNew);} }通过克隆获取实例地址不相等 此时如果需要增加一个Boss非常简单只需要新增一个类实现Enemy接口即可 总结 本文参考《设计模式的艺术》、《秒懂设计模式》两书
http://www.hkea.cn/news/14552256/

相关文章:

  • 开源系统网站自己0基础怎么创业
  • 网站开发专利asp网站发邮件
  • 最好记得网站域名哪个兄弟来个直接看的网站
  • 邢台专业网站建设价格唐山建网站的公司
  • wap门户网站厦门市翔安建设局网站
  • 网站qq弹窗代码公司介绍ppt内容
  • 网站建设工单系统护语商务网站建设与运营
  • 怎么做快递网站的分点阿里巴巴1688采购平台官网
  • 网站建设策划书选题用phpcms建站的网站
  • 家装网站做商标设计网免费
  • 免费flash素材网站免费浏览网站推广
  • 如何做好一个网站运营容城县网站开发
  • 全国设计师网站网站开发运营成本
  • 高端电商网站开发wordpress音乐自动播放
  • 网站模板 知乎南京百度小程序开发
  • 电视剧怎么做原创视频网站东莞石排做企业网站
  • 网站单页制作教程著名平面设计师及作品欣赏
  • 快手流量推广免费网站网站降权怎么处理
  • 企业管理网站的来历wordpress 课程系统
  • 长沙设备建站按效果付费深圳迈瑞医疗器械有限公司官网
  • 招聘网站开发源码安平网站建设找盛千
  • 宜宾移动网站建设延庆网站建设
  • 网站开发工程师好不好江苏昆山网站建设
  • 景安怎么把网站做别名wordpress 多站点配置
  • 做网站最低服务器配置贵州高端网站开发
  • 湖南公司响应式网站建设价位兰州最新情况
  • 中企动力销售一个月能挣多少张家界百度seo
  • 工业互联网平台首先要提高数据的挖掘能力福州网站排名优化
  • 苏州网络营销及网站推广和萝莉做的电影网站
  • 蘑菇街的网站建设seo排名优化软件价格