设计模式篇之原型模式

原型模式是一种用于创建重复对象的设计模式,可以避免通过传统方式初始化对象的复杂性。在Java中,通过实现Cloneable接口和重写clone方法,可以方便地复制复杂对象,减少类之间的耦合。文章通过一个例子展示了如何创建一个People抽象类及其两个子类Student和Driver,实现了对象的复制功能。
摘要由CSDN通过智能技术生成

案例引入

在平常我们要复制一个对象会怎么做,直接赋值肯定不行,这只是将相同的对象的地址赋值给它,要真正拷贝一份副本只能老老实实地遍历对象属性,而且无法直接复制对象的私有属性,除非对象开放了数据接口,到了这一步就走到了死胡同。

但如果我们这么做,为我们需要对外提供复制的对象提供整个对象直接复制的方法,需要复制就可以请求该方法,返回一个对象,问题不就迎刃而解了吗。另外一面,直接返回对象,可以避免对象之间过多的耦合,便于维护。而这种思想就是原型模式。

原型模式优缺点

原型模式可以快速便捷地生产复杂对象,优缺点如下:

优点

  1. 可以方便快捷拷贝复杂对象

  1. 避免对象代码的反复初始化

  1. 使用继承下,可以自定义复杂对象的处理逻辑

  1. 直接拷贝对象,避免与对象所属类的耦合

缺点

  1. 如果拷贝的对象中存在对象的循环引用,实现较为麻烦

案例

自定义一个people作为父类,创建student和driver两个子类,使用一个getObject的方法直接返回拷贝的对象

package 原型对象;

public abstract class People {
    String name;
    String sex;

    public People() {
    }

    @Override
    public String toString() {
        return "People{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    public People(People people){
        if(people!=null){
            this.name=people.name;
            this.sex = people.sex;
        }
    }
    public abstract People cloneObject();



}

package 原型对象;

public  class Driver extends People{
    String job;

    public Driver() {

    }

    public Driver(Driver people) {
        super(people);
        if(people!=null){
           this.job = people.job;
        }

    }

    @Override
    public People cloneObject() {
        return new Driver(this);
    }

    public String getJob() {
        return job;
    }

    @Override
    public String toString() {

        return "Driver{" +
                "job='" + job + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    public void setJob(String job) {
        this.job = job;
    }


}
package 原型对象;

public  class Student  extends People{
    String schoolName;

    public Student(Student people) {
        super(people);
        if(people!=null){
            this.schoolName = people.schoolName;
        }
    }

    public String getSchoolName() {
        return schoolName;
    }

    public void setSchoolName(String schoolName) {
        this.schoolName = schoolName;
    }


    @Override
    public String toString() {
        return "Student{" +
                "schoolName='" + schoolName + '\'' +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    @Override
    public People cloneObject() {

        return new Student(this);
    }
}
public class Application {
    public static void main(String[] args) {
        Driver driver= new Driver();
        driver.setJob("司机");
        driver.name="lin";
        driver.sex="男";

        People driver1 = driver.cloneObject();
        System.out.println(driver1.toString());
    }
}

总结

原型模式的本质是通过提供一个目标对象所属类的对象返回方法,一般通过抽象类的继承的来实现,目的在于便于对象的复制,同时降低类的耦合度的目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值