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

肃州区城乡和住房建设局网站友链交换网站源码

肃州区城乡和住房建设局网站,友链交换网站源码,wordpress导入文章,html5开发手机网站教程原型模式 原型模式是指通过原型实例指定创建对象的种类#xff0c;然后通过拷贝的方式创建新的对象。属于创建型模式 原型模式的核心在于拷贝原型对象#xff0c;主要用于对对象的复制。当你需要通过一大段get/set方法去构建对象的时候#xff0c;就可以考虑使用原型模式了…原型模式 原型模式是指通过原型实例指定创建对象的种类然后通过拷贝的方式创建新的对象。属于创建型模式 原型模式的核心在于拷贝原型对象主要用于对对象的复制。当你需要通过一大段get/set方法去构建对象的时候就可以考虑使用原型模式了 我们经常使用的JSON.parseObject() 也是一种原型模式 其类图如下所示 1.原型类IPrototype: 定义一个clone的接口方法 2.子类: 需要被拷贝的对象 3.Client : 调用clone方法拷贝对象 实现 public interface IPrototypeT {T clone(); } public class PrototypeA implements IPrototypePrototypeA{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;}Overridepublic PrototypeA clone() {PrototypeA prototypeA new PrototypeA();prototypeA.setAge(this.age);prototypeA.setName(this.name);return prototypeA;} }JDK已经提供了一个Cloneable接口帮我们实现了拷贝的逻辑 public class PrototypeB 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 PrototypeB clone() {try {return (PrototypeB) super.clone();} catch (CloneNotSupportedException e) {throw new RuntimeException(e);}} }深克隆和浅克隆 前面虽然实现了对原型对象的克隆但它只是复制了值类型数据对于引用类型对象并没有做一个完整的拷贝只是简单复制了引用的地址这会导致克隆后的对象和原型对象之间的数据相互干扰明显不符合预期(也就是浅克隆) 我们可以用序列化的方式实现深克隆 public class PrototypeB implements Cloneable, Serializable {private String name;private Integer age;private ListString friends;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 PrototypeB clone() {try {return (PrototypeB) super.clone();} catch (CloneNotSupportedException e) {throw new RuntimeException(e);}}public PrototypeB deepClone() {try {//输出流ByteArrayOutputStream baos new ByteArrayOutputStream();ObjectOutputStream oos new ObjectOutputStream(baos);oos.writeObject(this);ByteArrayInputStream bais new ByteArrayInputStream(baos.toByteArray());ObjectInputStream ois new ObjectInputStream(bais);return (PrototypeB) ois.readObject();} catch (Exception e) {throw new RuntimeException(e);}} } 可以看出克隆会破坏单例模式一般情形下我们的单例类都不会实现Cloneable接口如果需要实现该接口可以重写clone方法让其在克隆时返回唯一的实例对象 建造者模式 建造者模式 将一个复杂的对象的构建与它的表示分离使得同样的构建过程可以创建不同的表示。 属于创建型模式 使用场景: 适合于创建对象需要很多复杂步骤的场景将复杂对象的创建和使用分离开来适合于有多个不同的创建步骤需要根据不同场景选择不同的顺序 该设计模式中有以下几个角色 Product产品表示要被创建的对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程包含定义组成部件的类包括将这些部件装配成最终产品的接口。Builder: 建造者的抽象类由子类实现其建造过程ConcreteBuilder实现Builder的接口以创建满足条件的对象Director指导者由其决定创建复杂对象的步骤 举一个例子: 我手头上有三个任务我需要根据不同的条件设置需要执行的任务(建造者模式一般采用链式的写法) public class Product {private String task1;private String task2;private String task3;public String getTask1() {return task1;}public void setTask1(String task1) {this.task1 task1;}public String getTask2() {return task2;}public void setTask2(String task2) {this.task2 task2;}public String getTask3() {return task3;}public void setTask3(String task3) {this.task3 task3;}Overridepublic String toString() {return Product{ task1 task1 \ , task2 task2 \ , task3 task3 \ };} } public interface IBuilderT {T build();IBuilder buildTask1(String task);IBuilder buildTask2(String task);IBuilder buildTask3(String task);}public class BuilderA implements IBuilderProduct{private Product product null;public BuilderA() {this.product new Product();}public BuilderA buildTask1(String task) {product.setTask1(task);return this;}public BuilderA buildTask2(String task) {product.setTask2(task);return this;}public BuilderA buildTask3(String task) {product.setTask3(task);return this;}Overridepublic Product build() {return this.product;} } public class Director {public Product build(IBuilder builder) {builder.buildTask1(任务1);builder.buildTask2(任务2);return (Product) builder.build();}}public class Client {public static void main(String[] args) {Director director new Director();Product product director.build(new BuilderA());System.out.println(product);}}如果被建造的对象只有一个的话可以省略抽象的Builder和Director让ConcreteBuilder自己扮演指导者和建造者双重角色甚至ConcreteBuilder也可以在Product里实现。 建造者模式和工厂模式的区别 建造者模式更加关注于创建的步骤顺序而工厂模式更关注于创建的结果-对象建造者模式使用不同的步骤创建最后创建出来的对象不一样工厂模式创建出来的都是一样的(可以理解为工厂都是批发的)
http://www.hkea.cn/news/14389446/

相关文章:

  • 中国做的手机系统下载网站二次开发wordpress
  • 在线服装设计网站wordpress屏蔽谷歌蜘蛛
  • 网站建设注意什么建设银行网站点不了
  • 仙桃网站建设广告设计公司需要什么资质和证书
  • 网站开发结构图河北网络建站
  • 外包做的网站 需要要源代码吗可以做闪图的网站
  • 光谷做网站推广费用公众号添加wordpress
  • 有了网站源码 怎么建设网站wordpress+引用+样式
  • 网站建设买了服务器后怎么做网络营销优化外包
  • 一个很好的个人网站开发公司名称大全两字霸气
  • 布吉网站建设技术托管优化的定义
  • 大连城市建设集团网站seo推广优化平台
  • 专业网站设计公司临沂百度联系方式
  • 国外网站 dns东莞南城做网站推广的公司
  • 网站建设 验收意见网络用户提要求找人帮忙做的网站
  • 著名网站设计师网站建设的七大优缺点
  • 做酒店网站设计浙江建设工程信息网站
  • 珠海企业网站制作费用城市门户网站建设
  • 范县网站建设电话wordpress js文件
  • 网站地图后台可以做吗wordpress 移动 seo
  • 桂林设计单位资质升级网站企业网站托管趋势
  • 花型图案设计网站辽宁朝阳哪家做网站好
  • 长沙网站微信开发安阳住房与城乡建设局官方网站
  • 临沂市住房和城乡建设厅网站极简风格装修效果图
  • 做一个国外的网站网站的原理
  • 四川通江县住房和建设局网站潍坊网络公司
  • 广东君冠建设有限公司网站上海php网站开发
  • 西安网站制作公司排名ps做网站导航条
  • 网上做平面设计的网站有下划线的网址是什么网站
  • 西湖区网站建设jsp网站自身安全性通过什么技术实现