原型模式-化妆的烦恼

原型模式-prototype

故事:

美女:“每天化妆都要花一两个小时,好麻烦啊。”

帅哥:“如果可以复制就可以节省很多时间了。”

类图:

在这里插入图片描述

思考:

原型模式我认为是最容易理解与记忆的模式,使用频率还挺高的。其实就是实现Cloneable接口,这就相当于“标记了”我们可以使用clone方法。值得注意的是,克隆分为深克隆和浅克隆的,当一个类中只存在基本数据类型和String的时候,我们用浅克隆就可以了;如果属性里面包含了引用类型的对象、集合或者数组,我们就需要重写克隆方法。

伪代码:
/**
*化妆实现Cloneable
*/
public interface MakeUp extends Cloneable {

    void style(String s);

}


/**
 *Lip口红实现化妆MakeUp接口
 * @author 康康的远方
 * @date 2021/4/5
 */
public class Lip implements MakeUp {

    private String lip;

    @Override
    public Lip clone() throws CloneNotSupportedException {
      return (Lip) super.clone();
    }

    @Override
    public void style(String style) {
        this.lip = style;
    }
}




/**
 * 美女克隆化妆
 * @author 康康的远方
 * @date 2021/4/5
 */
public class Beauty {

    public static void main(String[] args) {
        Lip lightMakeUp = new Lip();
        lightMakeUp.style("red");
        try {
            Lip clone = lightMakeUp.clone();
            clone.style("pink");
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}
总结:

应用场景:当构造行数里面有很多参数的时候,我们不想重新new一个对象,可以在原来的对象clone,并修改需要变动的属性。

使用clone方法是不调用构造函数的,所以原型模式和单例模式是对立的。原型模式会破坏单例模式,因此二者只能存在一个。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

康康的远方

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值