首页 > 其他分享 >5) Prototype Pattern

5) Prototype Pattern

时间:2023-06-06 13:37:05浏览次数:29  
标签:name Pattern clone Movie movie Prototype public String

类别:

 Creational Pattern

问题:

 不想修改原对象状态,但需要依据当前数据进行计算

方案:

 

 

 

示例:

 

public class PrototypePattern {
    public static void main(String[] args) {
        Movie movie = new Movie();
        movie.setName("xxxxxx");
        Movie clone = movie.clone();
        System.out.println(clone.getName());
        System.out.println(clone == movie);
    }
}

class Movie implements Cloneable {
    public String name = null;

    public String getName() {
        return name;
    }

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

    @Override
    public Movie clone() {
        System.out.println("Cloning Movie object..");
        try {
            return (Movie) super.clone();
        } catch (CloneNotSupportedException e) {
            // never happen , the class has implements Cloneable
            throw new RuntimeException();
        }
    }

    @Override
    public String toString() {
        return "Movie";
    }
}

 

应用:

分析:

1. 需实现 java.lang.Cloneable 接口 (如果不继承Cloneable 会报 CloneNotSupportedException)

2. 子类的clone方法需要调用super的clone() 不然调用自己的会递归栈溢出

Note that this interface does not contain the clone method. Therefore, it is not possible to clone an object merely by virtue of the fact that it implements this interface. Even if the clone method is invoked reflectively, there is no guarantee that it will succeed.

 

不足:(

 

优化:)

 

标签:name,Pattern,clone,Movie,movie,Prototype,public,String
From: https://www.cnblogs.com/zno2/p/6694811.html

相关文章

  • 4) Builder Pattern
    类别: Creationalpattern问题: 构造函数入参超长易变方案: 示例:publicclassBuilderPatternDemo{publicstaticvoidmain(String[]args){Car.Builderbuilder=newCar.Builder("Benz");Carcar=builder.build();System.out.pri......
  • 3) Singleton pattern
    类别:creationalPattern问题/动机:反复创建对象开销巨大耗时长消耗内存/重复使用方案:  示例: //1classDemo1{publicfinalstaticDemo1INSTANCE=newDemo1();privateDemo1(){if(INSTANCE!=null)thrownewRuntimeExcept......
  • 2) Abstract Factory Pattern
    类别: CreationalPattern问题/动机:如何创建一套父类的问题情形一:混淆,且不能察觉//下面这个方法本来是要建造一辆宝马汽车,但是因为零部件太多,粗心大意误用了奔驰的零件。publicCarcreateBMWCar(){Part1p1=newcom.bmw.Part1();[...]......
  • 1) Factory method pattern
    类别: CreationalPattern问题/动机如何创建一套子类的问题(父类引用指向子类实例)情形1:一个方法返回一个具体的子类极端情况:1万个子类需要一万个方法吗极端情况:如过再扩展一万个子类,还需要再增加一万个方法吗极端情况:虽然有一万个子类,但只需要用到其中一个,其他9999个干陪着......
  • 9) Composite Pattern
    类别: StructualPattern问题: 方案:   示例: importjava.util.ArrayList;importjava.util.List;publicclassCompositePatternDemo{publicstaticvoidmain(String[]args){Bodysun=newBody("太阳","恒星",1392000000);......
  • 8) Filter/Criteria Pattern
    类别: StructualPattern问题: 方案:   示例: importjava.util.ArrayList;importjava.util.HashSet;importjava.util.List;importjava.util.Set;publicclassCriteriaPatternDemo{publicstaticvoidmain(String[]args){List<Person>p......
  • 7) Bridge Pattern
    类别: StructuralPatterns问题:连连看的问题 不使用桥接,要写81个类,使用桥接,只需要18个类方案: 示例: publicclassBridgePatternDemo{publicstaticvoidmain(String[]args){Somebodysb=newXiaohong(newBanana());sb.eat();......
  • 6) Adapter Pattern
    类别: StructuralPattern问题:什么是接口?按照标准提供服务,其他想要使用该接口的要按照该标准接入服务什么是依赖?持有目标对象,拥有使用权(AuseB)数据线?数据线按USB标准接入充电宝,通过lightning提供充电服务手机?通过lightning标准接入数据线  客户端因种种限制只能接入......
  • 10) Decorator Pattern
    类别: StructuralPattern问题: 在不改变接口的前提下增加额外的服务方案:   示例:publicclassDecoratorPatternDemo{publicstaticvoidmain(String[]args){Shapecircle=newCircle();ShaperedCircle=newRedShapeDecorator(newC......
  • 详解JavaScript中的__proto__和prototype
    目录一、JS的对象创建方法二、双对象法则三、__proto__和prototypeprototype是什么?__proto__又是什么?对于JS来说,__proto__和prototype的区别是个绕不开的话题。本文就试图从它们的根本上说清楚它们是什么,又有什么区别,所以本文会从JS的对象开始说起,以其期待把本文的主题......