原型模式定义
原型模式,英文名为Prototype Pattern,指将一个对象作为原型,通过对其进行复制,而克隆出多个和原型类似的新实例。
原型模式作用
针对类实例对象开销大的情况,使用原型模式复用的方式创建实例对象 , 比使用构造函数重新创建对象性能要高;
针对构造函数繁琐的情况,原型模式可以简化创建的过程 , 可以直接修改现有的对象实例的值 , 达到复用的目的。
原型模式角色
原型模式一般包含如下3大角色:
1.客户(Client)角色
客户类提出创建对象的请求。
2.抽象(Prototype)原型角色
这是一个抽象角色,通常由一个Java接口或Java抽象类实现,此角色给出所有的具体原型类所需的接口。
3.具体原型(Concrete Prototype)角色
被复制的对象,此角色需要实现抽象的原型角色所要求的接口。
原型模式案例
用原型模式模拟“孙悟空”复制自己,比如:孙悟空拔下猴毛轻轻一吹就变出很多孙悟空,这实际上是用到了原型模式。
UML类图如下:
代码示例如下:
import java.awt.*; import javax.swing.*; class SunWukong extends JPanel implements Cloneable { private static final long serialVersionUID = 5543049531872119328L; public SunWukong() { JLabel l1 = new JLabel(new ImageIcon("src/Wukong.jpg")); this.add(l1); } public Object clone() { SunWukong w = null; try { w = (SunWukong) super.clone(); } catch (CloneNotSupportedException e) { System.out.println("拷贝悟空失败!"); } return w; } } public class ProtoTypeWukong { public static void main(String[] args) { JFrame jf = new JFrame("原型模式测试"); jf.setLayout(new GridLayout(1, 2)); Container contentPane = jf.getContentPane(); SunWukong obj1 = new SunWukong(); contentPane.add(obj1); SunWukong obj2 = (SunWukong) obj1.clone(); contentPane.add(obj2); jf.pack(); jf.setVisible(true); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
这里的孙悟空类 SunWukong 是具体原型类,而 Java 中的 Cloneable 接口是抽象原型类。
运行结果如下:
原型模式应用
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》