《GOF设计模式》—原型(Prototype)—Delphi源码示例:原型接口

2024-09-06 14:58

本文主要是介绍《GOF设计模式》—原型(Prototype)—Delphi源码示例:原型接口,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!



示例:原型接口

说明:

1)、定义

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

2)、结构

原型

Prototype:抽象原型,声明一个克隆自身的接口。

ConcretePrototype:具体原型,实现一个克隆自身的操作。

客户端

Client:让一个原型克隆自身从而创建一个新的对象。

代码:

unit uPrototype;

 

interface

 

type

   TPrototype = class

   private

       FState: string;

   public

       function Clone: TPrototype; virtual; abstract;

       //---

       property State: string read FState write FState;

   end;

   TConcretePrototype1 = class(TPrototype)

   private

       function Copy: TConcretePrototype1;

   public

       function Clone: TPrototype; override;

   end;

   TConcretePrototype2 = class(TPrototype)

   private

       function Copy: TConcretePrototype2;

   public

       function Clone: TPrototype; override;

   end;

 

   TClient = class

   private

       FPrototype: TPrototype;

   public

       constructor Create(Prototype: TPrototype);

       destructor Destroy; override;

       //---

       function Opteration: TPrototype;

   end;

 

implementation

 

function TConcretePrototype1.Clone: TPrototype;

begin

   Result := self.Copy;

end;

 

function TConcretePrototype1.Copy: TConcretePrototype1;

begin

   Result := TConcretePrototype1.Create;

   Result.State := self.State;

end;

 

function TConcretePrototype2.Clone: TPrototype;

begin

   Result := self.Copy;

end;

 

function TConcretePrototype2.Copy: TConcretePrototype2;

begin

   Result := TConcretePrototype2.Create;

   Result.State := self.State;

end;

 

constructor TClient.Create(Prototype: TPrototype);

begin

   FPrototype := Prototype;

end;

 

destructor TClient.Destroy;

begin

   FPrototype.Free;

   //---

   inherited;

end;

 

function TClient.Opteration: TPrototype;

var

   p: TPrototype;

begin

   p := FPrototype.Clone;

   Result := p;

end;

 

end.

 

procedure TForm1.Button3Click(Sender: TObject);

var

   Prototype1: TPrototype;

   Client:TClient;

   AItem: TPrototype;

begin

   {Prototype1 := TConcretePrototype1.Create;

   Prototype1.State := 'Prototype1'; }

   //---

   Prototype1 := TConcretePrototype2.Create;

   Prototype1.State := 'Prototype2';

   //---

   Client := TClient.Create(Prototype1);

   try

       AItem := Client.Opteration;

       showmessage(AItem.State);

       AItem.Free;

   finally

       Client.Free;

   end;

end;

这篇关于《GOF设计模式》—原型(Prototype)—Delphi源码示例:原型接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1142326

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

在 Spring Boot 中使用 @Autowired和 @Bean注解的示例详解

《在SpringBoot中使用@Autowired和@Bean注解的示例详解》本文通过一个示例演示了如何在SpringBoot中使用@Autowired和@Bean注解进行依赖注入和Bean... 目录在 Spring Boot 中使用 @Autowired 和 @Bean 注解示例背景1. 定义 Stud

oracle DBMS_SQL.PARSE的使用方法和示例

《oracleDBMS_SQL.PARSE的使用方法和示例》DBMS_SQL是Oracle数据库中的一个强大包,用于动态构建和执行SQL语句,DBMS_SQL.PARSE过程解析SQL语句或PL/S... 目录语法示例注意事项DBMS_SQL 是 oracle 数据库中的一个强大包,它允许动态地构建和执行

Python中顺序结构和循环结构示例代码

《Python中顺序结构和循环结构示例代码》:本文主要介绍Python中的条件语句和循环语句,条件语句用于根据条件执行不同的代码块,循环语句用于重复执行一段代码,文章还详细说明了range函数的使... 目录一、条件语句(1)条件语句的定义(2)条件语句的语法(a)单分支 if(b)双分支 if-else(

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

MyBatis-Flex BaseMapper的接口基本用法小结

《MyBatis-FlexBaseMapper的接口基本用法小结》本文主要介绍了MyBatis-FlexBaseMapper的接口基本用法小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具... 目录MyBATis-Flex简单介绍特性基础方法INSERT① insert② insertSelec

Spring排序机制之接口与注解的使用方法

《Spring排序机制之接口与注解的使用方法》本文介绍了Spring中多种排序机制,包括Ordered接口、PriorityOrdered接口、@Order注解和@Priority注解,提供了详细示例... 目录一、Spring 排序的需求场景二、Spring 中的排序机制1、Ordered 接口2、Pri

Python中Markdown库的使用示例详解

《Python中Markdown库的使用示例详解》Markdown库是一个用于处理Markdown文本的Python工具,这篇文章主要为大家详细介绍了Markdown库的具体使用,感兴趣的... 目录一、背景二、什么是 Markdown 库三、如何安装这个库四、库函数使用方法1. markdown.mark

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方