大话设计模式-原型模式(大鸟和小菜java版)

原型模式:原型模式是一种创建型设计模式,Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。

本文的例子依旧是大鸟和小菜的例子,只是把书上的c++版本换成了Java版

创建一个工作类:

package 设计模式.原型模式;
//这个是工作类
public class Work implements Cloneable{
//    定义两个私有变量
    private String workDate;
    private String company;

//    为这两个变量添加set和get方法
    public String getWorkDate() {
        return workDate;
    }

    public void setWorkDate(String workDate) {
        this.workDate = workDate;
    }

    public String getCompany() {
        return company;
    }

    public void setCompany(String company) {
        this.company = company;
    }

//    重写clone方法,注意需要处理异常
    public Work clone(){
        try {
            return (Work) super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return null;
    }
}

创建求职简历类

package 设计模式.原型模式;
//这个是简历类
public class Resume implements Cloneable{
//    定义几个私有变量
    private String name;
    private String age;
    private String sex;
//    为工作类创建一个对象,这个private可加可不加
    private Work w = new Work();

//    书写一个构造方法
    public Resume(String name) {
        this.name = name;
    }

//    定义一个方法填充对象的年龄和性别
    public void setPersonInfo(String age,String sex){
        this.age = age;
        this.sex = sex;

    }

//    这个方法是用来更改对象的工作经历的,包括workDate和company
    public void setWork(String workDate,String company){
        w.setWorkDate(workDate);
        w.setCompany(company);
    }

//    继续重写clone方法
    protected Resume clone() {
        Resume resume = new Resume(name);
        resume.sex = this.sex;
        resume.age = this.age;
        resume.w = w.clone();

        return resume;
    }

//    这个方法是用来展示的,把想输出的格式给展示出来
    public void display(){
        System.out.println("姓名:" + name + "  "+age);

        System.out.println("工作经历"+w.getWorkDate()+",公司:"+w.getCompany());
    }


}

最后创建一个测试主类

package 设计模式.原型模式;
//测试主类
public class Test {
    public static void main(String[] args) {
//        创建一个对象,为该对象填充一个名字
        Resume a = new Resume("香风智乃");
//        为该对象填充基本信息
        a.setPersonInfo("18","女");
        a.setWork("2015-2021","bilibili有限公司");

//        创建一个新的对象,这个对象用来复制a对象的信息,但有不满意的地方,可以进行修改
        Resume b = a.clone();
        b.setWork("1998-2021","小破站");

//        c对象也是同理
        Resume c = a.clone();
        c.setWork("2010-2019","呀嘞呀嘞daze有限公司");

//        把这三个对象的信息展示出来
        a.display();
        b.display();
        c.display();

    }
}

附上运行结果:
在这里插入图片描述
以上就是原型模式

最后,附上参考的大佬的文章:
https://blog.csdn.net/monkey_d_meng/article/details/5695479

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值