创建网站代码是什么,中企动力高端网站建设,海外服务器租用的价格,互联网网站备案表文章目录 一.什么是原型设计模式#xff1f;二.原型模式的特点三.原型模式的结构四.原型模式的优缺点五.原型模式的 C 实现六.原型模式的 Java 实现七. 代码解析八.总结 类图#xff1a;
原型设计模式类图 一.什么是原型设计模式#xff1f; 原型模式#xff08;Prototype… 文章目录 一.什么是原型设计模式二.原型模式的特点三.原型模式的结构四.原型模式的优缺点五.原型模式的 C 实现六.原型模式的 Java 实现七. 代码解析八.总结 类图
原型设计模式类图 一.什么是原型设计模式 原型模式Prototype Pattern 是一种创建型设计模式它通过复制现有对象来生成新对象而不是通过实例化类来创建。这种模式基于对象的克隆机制适用于需要频繁创建对象的场景可以提高性能并减少复杂的初始化过程。
二.原型模式的特点
克隆对象通过复制已有对象生成新对象而非通过构造函数创建。性能优化避免复杂对象创建的高开销。灵活性可以动态添加或删除原型而不影响其他对象。
三.原型模式的结构
Prototype抽象原型类定义了克隆方法通常是 clone() 方法。ConcretePrototype具体原型类实现抽象原型类的克隆方法。Client客户端调用克隆方法创建新对象而无需关心对象的具体类型。
四.原型模式的优缺点
优点: 性能优势克隆比重新创建对象效率更高。动态性无需编译时依赖类可以在运行时动态生成对象。避免依赖性通过克隆机制可以避免直接依赖类的构造函数。 缺点: 复杂性增加需要正确实现克隆方法尤其是深拷贝场景。资源消耗可能会为每个可克隆的对象维护克隆逻辑导致类职责增多。
五.原型模式的 C 实现
#include iostream
#include string
#include memory // for smart pointers
using namespace std;// 抽象原型类
class Prototype {
public:virtual ~Prototype() default;// 克隆方法纯虚函数virtual unique_ptrPrototype clone() const 0;virtual void display() const 0;
};// 具体原型类1
class ConcretePrototypeA : public Prototype {
private:string data; // 模拟一些状态
public:ConcretePrototypeA(string data) : data(data) {}// 克隆方法unique_ptrPrototype clone() const override {return make_uniqueConcretePrototypeA(*this); // 调用拷贝构造函数}void display() const override {cout ConcretePrototypeA with data: data endl;}
};// 具体原型类2
class ConcretePrototypeB : public Prototype {
private:int value; // 模拟一些状态
public:ConcretePrototypeB(int value) : value(value) {}// 克隆方法unique_ptrPrototype clone() const override {return make_uniqueConcretePrototypeB(*this); // 调用拷贝构造函数}void display() const override {cout ConcretePrototypeB with value: value endl;}
};// 客户端代码
void ClientCode(const Prototype prototype) {auto clonedObject prototype.clone(); // 克隆一个对象clonedObject-display(); // 显示克隆对象的内容
}int main() {// 创建原型对象ConcretePrototypeA prototypeA(PrototypeA Data);ConcretePrototypeB prototypeB(42);cout Cloning ConcretePrototypeA: endl;ClientCode(prototypeA);cout \nCloning ConcretePrototypeB: endl;ClientCode(prototypeB);return 0;
}六.原型模式的 Java 实现
// 抽象原型类
abstract class Prototype implements Cloneable {public abstract Prototype clone();public abstract void display();
}// 具体原型类A
class ConcretePrototypeA extends Prototype {private String data;public ConcretePrototypeA(String data) {this.data data;}Overridepublic Prototype clone() {try {return (Prototype) super.clone();} catch (CloneNotSupportedException e) {throw new RuntimeException(Clone not supported!);}}Overridepublic void display() {System.out.println(ConcretePrototypeA with data: data);}
}// 具体原型类B
class ConcretePrototypeB extends Prototype {private int value;public ConcretePrototypeB(int value) {this.value value;}Overridepublic Prototype clone() {try {return (Prototype) super.clone();} catch (CloneNotSupportedException e) {throw new RuntimeException(Clone not supported!);}}Overridepublic void display() {System.out.println(ConcretePrototypeB with value: value);}
}// 客户端代码
public class PrototypePatternExample {public static void main(String[] args) {// 创建原型对象ConcretePrototypeA prototypeA new ConcretePrototypeA(PrototypeA Data);ConcretePrototypeB prototypeB new ConcretePrototypeB(42);System.out.println(Cloning ConcretePrototypeA:);Prototype clonedA prototypeA.clone();clonedA.display();System.out.println(\nCloning ConcretePrototypeB:);Prototype clonedB prototypeB.clone();clonedB.display();}
}七. 代码解析
抽象原型类Prototype 定义了一个 clone() 方法用于生成当前对象的副本。使用虚函数使得派生类可以实现自己的克隆逻辑。 具体原型类ConcretePrototypeA 和 ConcretePrototypeB 实现了 clone() 方法通过调用自身的拷贝构造函数完成对象的克隆。ConcretePrototypeA 和 ConcretePrototypeB 模拟了不同的数据成员演示了克隆不同类型对象的效果。 客户端代码 接收一个 Prototype 对象的引用并通过调用 clone() 方法克隆出一个新对象。客户端无需关心具体的类只需通过 Prototype 接口调用克隆方法即可。
八.总结 原型模式通过克隆的方式创建新对象而不依赖于类的构造函数。这种模式在需要频繁创建对象、或者需要动态生成对象的场景中非常有用。通过正确实现 clone() 方法可以有效提高程序的灵活性和性能。然而在实现复杂对象的深拷贝时需要特别注意对象之间的依赖关系和资源管理以避免潜在的错误。 应用场景:
复杂对象的创建初始化需要耗费大量资源的对象可以通过克隆来生成新对象。性能优化避免使用构造函数或工厂方法重复创建对象。动态对象管理需要动态生成对象而不依赖具体类。