原型-设计模式

原型设计模式

原型模式应用场景:创建一个对象比较复杂,当前存在一个和需要创建的对象极其相似,我们就可以采用原型模式,在原来的对象上进行一个修改。

修改方案:在原来的基础上进行拷贝,在进行部分的修改。(具体采用深拷贝和浅拷贝根据具体的业务场景进行选择)就像我们写一段文本时,前面已经写过一段极其相似的文本,我们可以直接拷贝,然后进行修改。提高了写文本的效率。

java 复制代码
package com.obstar.prototype;

public class MachineStatus {
    public String stable;

    public String getStable() {
        return stable;
    }

    public MachineStatus(String stable) {
        this.stable = stable;
    }

    public void setStable(String stable) {
        this.stable = stable;
    }

    @Override
    public String toString() {
        return "MachineStatus{" +
                "stable='" + stable + '\'' +
                '}';
    }
}
package com.obstar.prototype;

public class Machine implements Cloneable{
    private String model;
    private String speed;
    private String weight;
    private String power;
    private MachineStatus status;

    public Machine(String model, String speed, String weight, String power, MachineStatus status) {
        this.model = model;
        this.speed = speed;
        this.weight = weight;
        this.power = power;
        this.status = status;
    }

    public MachineStatus getStatus() {
        return status;
    }

    public void setStatus(MachineStatus status) {
        this.status = status;
    }

    public String getModel() {
        return model;
    }

    public void setModel(String model) {
        this.model = model;
    }

    public String getSpeed() {
        return speed;
    }

    public void setSpeed(String speed) {
        this.speed = speed;
    }

    public String getWeight() {
        return weight;
    }

    public void setWeight(String weight) {
        this.weight = weight;
    }


    public String getPower() {
        return power;
    }

    public void setPower(String power) {
        this.power = power;
    }

    @Override
    public String toString() {
        return "Machine{" +
                "model='" + model + '\'' +
                ", speed='" + speed + '\'' +
                ", weight='" + weight + '\'' +
                ", power='" + power + '\'' +
                ", status='" + status + '\'' +
                '}';
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        Machine machine = (Machine)super.clone();
        MachineStatus machineStatus = new MachineStatus(this.status.stable);
        machine.setStatus(machineStatus);
        return machine;
    }
}

DEMO:

java 复制代码
public class Demo {
    public static void main(String[] args) throws CloneNotSupportedException {
        Machine machine1 = new Machine("A19", "3600", "1000KG"
            ,"5000W", new MachineStatus("稳定"));

        Machine machine2 = (Machine) machine1.clone();
        machine2.setModel("A20");

        System.out.println(machine1);
        System.out.println(machine2);
    }
}
相关推荐
予枫的编程笔记几秒前
【面试专栏|Java并发编程】从Runnable到Callable,Java4种线程创建方式
java·多线程·thread·java面试·runnable·callable·java线程
野犬寒鸦3 分钟前
SAP后端实习开发面试:操作系统与网络核心考点及Linux与Redis
java·服务器·网络·后端·面试
ServBay5 分钟前
代码减半,10分钟彻底告别 Java 开发旧习
java·后端
MegaDataFlowers16 分钟前
CRUD操作及配置解析
java·mybatis
毕设源码-邱学长21 分钟前
【开题答辩全过程】以 胡小楼行政村农用灌溉机井预约管理系统的设计与实现为例,包含答辩的问题和答案
java·eclipse
JTCC24 分钟前
Java 设计模式西游篇 - 第五回:装饰者模式添法力 悟空披挂新战袍
java·观察者模式·设计模式
xiaoye370837 分钟前
哪些因素会影响Spring Bean的线程安全?
java·spring
荔枝要好学40 分钟前
一个jar包通过java -jar 指令找不到启动类,那么我是否可以通过java -cp命令指定启动类的方式启动?
java
java1234_小锋44 分钟前
Java高频面试题:Mysql里where1=1会不会影响性能?
java·开发语言
逆境不可逃1 小时前
【从零入门23种设计模式13】行为型之责任链模式
算法·leetcode·游戏·设计模式·责任链模式