建设官方网站企业网银登录,怎么用ftp修改网站,wordpress画册,网站后台怎么管理个人公众号原文#xff1a;创建型模式#xff1a;原型模式 五大创建型模式之五#xff1a;原型模式。 简介 姓名 #xff1a;原型模式 英文名 #xff1a;Prototype Pattern 价值观 #xff1a;效率第一 个人介绍 #xff1a; Specify the kinds of objects to create u…个人公众号原文创建型模式原型模式 五大创建型模式之五原型模式。 简介 姓名 原型模式 英文名 Prototype Pattern 价值观 效率第一 个人介绍 Specify the kinds of objects to create using a prototypical instance,and create new objects by copying this prototype. 用原型实例指定创建对象的种类并且通过拷贝这些原型创建新的对象。 来自《设计模式之禅》 又到了一个系列的最后一篇文章了今天是创建型模式的最后一篇。什么是创建型模式呢创建型模式是对类的实例化过程进行抽象使对象的创建和使用分离从而使代码更加灵活。 我们平时使用最多的一种创建对象方式就是 new ABC()直接通过构造方法来创建一个对象。通过原型模式来创建对象则不用调用构造方法就可以创建一个对象。下面来揭开它的面纱。 你要的故事 前几天有出版社的老师邀请写书鉴于深知自己水平还不足以出书所以没有合作还在努力学习以后有能力有机会再考虑这方面的事情。 今天的故事就从出书讲起。我们知道一本新书发版的时候会复印很多册如果销售得好会有很多个印刷版本。我们来了解复印一批书籍这个过程是怎么实现的。小明写下了下面这段代码。 public class NoPrototypeTest {public static void main(String[] args) {for (int i 1; i 10; i ) {Book book new Book(娱乐至死, 尼尔波兹曼, 社会科学, XXXX);System.out.println(复印书籍 book.getName() 第 i 本);}}}class Book {private String name;private String author;private String type;private String content;public Book(String name, String author, String type, String content) {this.name name;this.author author;this.type type;this.content content;System.out.println(实例化书籍 this.name);}public String getName() {return name;}public void setName(String name) {this.name name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author author;}public String getType() {return type;}public void setType(String type) {this.type type;}public String getContent() {return content;}public void setContent(String content) {this.content content;}
}// 打印结果
实例化书籍娱乐至死
复印书籍娱乐至死第 1 本
实例化书籍娱乐至死
复印书籍娱乐至死第 2 本
实例化书籍娱乐至死
复印书籍娱乐至死第 3 本
实例化书籍娱乐至死
复印书籍娱乐至死第 4 本
实例化书籍娱乐至死
复印书籍娱乐至死第 5 本
实例化书籍娱乐至死
复印书籍娱乐至死第 6 本
实例化书籍娱乐至死
复印书籍娱乐至死第 7 本
实例化书籍娱乐至死
复印书籍娱乐至死第 8 本
实例化书籍娱乐至死
复印书籍娱乐至死第 9 本
实例化书籍娱乐至死
复印书籍娱乐至死第 10 本上面小明的代码复印了 10 本《娱乐至死》代码逻辑没有问题有个问题就是复印一本就实例化一次书籍这个实例化可以减少么使用原型模式可以实现。小明根据这些提示重新修改了代码。 public class PrototypeTest {public static void main(String[] args) {Book2 book1 new ConcreteBook(娱乐至死, 尼尔波兹曼, 社会科学, XXXX);System.out.println(复印书籍 book1.getName() 第 1 本);for (int i 2; i 10; i ) {Book2 book2 (Book2) book1.clone();System.out.println(复印书籍 book2.getName() 第 i 本);}}}/*** 抽象类*/
abstract class Book2 implements Cloneable {private String name;private String author;private String type;private String content;public Book2(String name, String author, String type, String content) {this.name name;this.author author;this.type type;this.content content;System.out.println(实例化书籍 this.name);}public String getName() {return name;}public void setName(String name) {this.name name;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author author;}public String getType() {return type;}public void setType(String type) {this.type type;}public String getContent() {return content;}public void setContent(String content) {this.content content;}Overrideprotected Object clone() {try {return super.clone();} catch (CloneNotSupportedException e) {e.printStackTrace();}return null;}
}/*** 具体类*/
class ConcreteBook extends Book2 {public ConcreteBook(String name, String author, String type, String content) {super(name, author, type, content);}
}打印结果
实例化书籍娱乐至死
复印书籍娱乐至死第 1 本
复印书籍娱乐至死第 2 本
复印书籍娱乐至死第 3 本
复印书籍娱乐至死第 4 本
复印书籍娱乐至死第 5 本
复印书籍娱乐至死第 6 本
复印书籍娱乐至死第 7 本
复印书籍娱乐至死第 8 本
复印书籍娱乐至死第 9 本
复印书籍娱乐至死第 10 本 看打印结果和第一次实现的结果完全不一样这一次只实例化了一次后面复印的书籍都没有实例化。我们看看代码的变化代码中最最主要的就是 Book2 实现了 Cloneable 接口这个接口有个 clone() 方法通过实现这个方法可以实现对象的拷贝就是不用调用构造方法直接通过对内存的拷贝来创建一个新的对象。这就是原型模式的实现方式通过原型模式可以提高创建对象的效率。 代码Prototype Pattern 总结 通过原型模式绕过构造方法创建对象利用内存直接拷贝对象提高对象的创建性效率。在有大量的对象创建或者类初始化消耗多资源的场景下可以利用原型模式来优化。当然在实现的过程中要注意浅拷贝与深拷贝的问题防止写出 bug文章主要介绍原型模式就不详细说这个问题了留给大家去扩展了解。 参考资料《大话设计模式》、《Java设计模式》、《设计模式之禅》、《研磨设计模式》、《Head First 设计模式》 推荐阅读创建型模式单例模式创建型模式工厂方法创建型模式抽象工厂创建型模式原型模式公众号之设计模式系列文章 希望文章对您有所帮助设计模式系列会持续更新感兴趣的同学可以关注公众号LieBrother第一时间获取文章推送阅读也可以一起交流交个朋友。 转载于:https://www.cnblogs.com/liebrother/p/10328436.html