Java-23个设计模式 Prototype 原型模式

Prototype 

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象

① 从工厂模式中的例子过来,将工厂基类创建对象的抽象类移到系统抽象类,用Java克隆代替

/**
 * 抽象类
 */
public abstract class ComputerSystem implements Cloneable {
    abstract void run();
    public Object clone(){
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }
}

② 创建两个系统子类(Windows和Linux),实现父类的基本方法(系统都有的方法)

// Linux系统
public class Linux extends ComputerSystem {
    @Override
    void run() {
        System.out.println("Linux");
    }
}

// Windows系统
public class Windows extends ComputerSystem {
    @Override
    void run() {
        System.out.println("Windows");
    }
}

③ 使用原型模式

public class Main {
    private ComputerSystem prototype; // 原型对象
    // 1 根据传入的对象,prototype
    public Main(ComputerSystem prototype){
        this.prototype = prototype;
    }
    /**
     * prototype原型对象这是供克隆创建新对象,而不是来使用的
     */
    public void run(){
        System.out.println(prototype);
        // 2 克隆自己
        ComputerSystem system = (ComputerSystem) prototype.clone();
        system.run();
    }
}

④ 测试

public class Test {
    public static void main(String[] args) {
        Linux linux1 = new Linux();
        System.out.println(linux1);
        Main main = new Main(linux1);
        main.run();
    }
}

场景:如果需要考虑对象很复杂的中间状态,而且又希望保存那个状态,用Prototype(深克隆)。如果几步骤就能创建,FactoryMethod。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值