原型模式详解(作用角色及应用实例)

原型模式详解(作用角色及应用实例)-mikechen

原型模式定义

原型模式,英文名为Prototype Pattern,指将一个对象作为原型,通过对其进行复制,而克隆出多个和原型类似的新实例。

 

原型模式作用

针对类实例对象开销大的情况,使用原型模式复用的方式创建实例对象 , 比使用构造函数重新创建对象性能要高;

针对构造函数繁琐的情况,原型模式可以简化创建的过程 , 可以直接修改现有的对象实例的值 , 达到复用的目的。

 

原型模式角色

原型模式一般包含如下3大角色:

原型模式详解(作用角色及应用实例)-mikechen

1.客户(Client)角色

客户类提出创建对象的请求。

 

2.抽象(Prototype)原型角色

这是一个抽象角色,通常由一个Java接口或Java抽象类实现,此角色给出所有的具体原型类所需的接口。

 

3.具体原型(Concrete Prototype)角色

被复制的对象,此角色需要实现抽象的原型角色所要求的接口。

 

原型模式案例

用原型模式模拟“孙悟空”复制自己,比如:孙悟空拔下猴毛轻轻一吹就变出很多孙悟空,这实际上是用到了原型模式。

UML类图如下:

原型模式详解(作用角色及应用实例)-mikechen

代码示例如下:

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

 

 

原型模式应用

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法