学会设计模式,你就可以像拥有魔法一样,在开发过程中解决一些复杂的问题。设计模式是由经验丰富的开发者们(GoF)凝聚出来的最佳实践,可以提高代码的可读性、可维护性和可重用性,从而让我们的开发效率更高。通过不断的练习和实践,掌握其中的奥妙,选择合适的设计模式,能为我们的项目增加一丝神奇的魔力。
文章目录
- 概念:
- 实例:
- 目的:
- 适用场景:
- 优点:
- 弊端:
- 类图:
- 框架用到的地方:
- Coding:
- 测试:
- 测试结果:
概念:
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
实例:
克隆原本的五菱宏光对象
目的:
原本的五菱宏光修改配置后,克隆对象配置不变
适用场景:
需要复制一些对象,同时又希望代码独立于这些对象所属的具体类
优点:
1、使用原型模式创建实例对象比直接new一个对象性能好,尤其创建大对象,性能的差别非常明显。
2、简化创建对象的过程,可以直接修改现有的对象实例的值,达到复用的目的
弊端:
1、每个对象内部都要覆盖Object的clone方法才能被拷贝,当对类进行改造时,需要修改代码,违背了“开闭原则”。
2、如果克隆引用数据类型,需要递归克隆
类图:
框架用到的地方:
Java 中,Object 的 clone() 方法
Coding:
Car:
public class Car {private String name;private Integer box;private String power;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getBox() {return box;}public void setBox(Integer box) {this.box = box;}public String getPower() {return power;}public void setPower(String power) {this.power = power;}public Car() {}public Car(Car car) {this.name = car.getName();this.box = car.getBox();this.power = car.getPower();}public Car clone() {return new Car(this);}public void show() {System.out.println("一辆" + this.getPower() + this.getBox() + "厢" + this.getName());}
}
测试:
public class Test {public static void main(String[] args) {Car wuLing = new Car();wuLing.setName("五菱宏光");wuLing.setBox(2);wuLing.setPower("汽油");System.out.println("----------原始配置----------");wuLing.show();//通过clone方法创建的新对象Car clone = wuLing.clone();wuLing.setBox(3);//地址引用Car wuLing2 = wuLing;System.out.println("----------修改配置后wuLing----------");wuLing.show();System.out.println("----------原始配置后wuLing2----------");wuLing2.show();System.out.println("----------原始配置后clone----------");clone.show();}
}
我们可以看到wuLing2是直接将wuLing复制给自己,因为Java的赋值只是传递地址,所以wuLing2会随着wuLing的配置修改而改变。
但是调用clone的方法并没有因为wuLing的配置修改而修改,这是因为clone是一个被克隆出来的全新对象(java自带的clone方法是浅拷贝)。
如果您想了解更多关于Java深拷贝和浅拷贝的信息,可以到小名的另一篇文章:Java对象浅拷贝与深拷贝进行详细了解😊
测试结果:
----------原始配置----------
一辆汽油2厢五菱宏光
----------修改配置后wuLing----------
一辆汽油3厢五菱宏光
----------原始配置后wuLing2----------
一辆汽油3厢五菱宏光
----------原始配置后clone----------
一辆汽油2厢五菱宏光
文章后期会持续优化,如果觉得小名的文章帮助到了您,请关注小名,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
编码魔法师系列文章,会收录在小名的【设计模式】专栏中,希望大家可以持续关注🎉