这篇文章主要介绍“singleton class是什么”,在日常操作中,相信很多人在singleton class是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”singleton class是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司专注于商城网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供商城营销型网站建设,商城网站制作、商城网页设计、商城网站官网定制、成都微信小程序服务,打造商城网络公司原创品牌,更为您提供商城网站排名全网营销落地服务。
SystemVerilog中Singleton class是指只有一个对象(object)的类。这个对象只创建一次,为所需的全局变量提供一个namespaces。
Singleton class定义全局的行为,例如printing。
Singleton class 在compile-time创建一个对象,然后在run-time操作其中的成员,不需要用户在仿真时在建立一个新的实例。
program top;class singleton;int unsigned var1;// Need to declare it as static, as it is accessed by static method 'create'static singleton single;// Declared as 'protected', so user can't directly create instance of this classprotected functionnew();endfunction:newstatic functionsingleton create();if (single ==null) begin$display("Object single is null, so creating new object");single =new();endreturn single;endfunction:createendclass:singletonsingleton s1, s2;initial begins1 = singleton ::create();$display (" 1 : s1.var1 = %0d", s1.var1);s1.var1 =10;$display (" 2 : s1.var1 = %0d", s1.var1);s2 = singleton ::create();$display (" 3 : s2.var1 = %0d", s2.var1);s2.var1 =20;$display (" 4 : s2.var1 = %0d", s2.var1);$display (" 5 : s1.var1 = %0d", s1.var1);endendprogram
Output:
// 1 : s1.var1 = 0 // 2 : s1.var1 = 10 // 3 : s2.var1 = 10 // 4 : s2.var1 = 20 // 5 : s1.var1 = 20
A singleton object is a globally accessiblestatic object providing customizable service methods.
Synopsys UVM1.2 Workshop
在下面的例子中:
class service_class; protected static service_class me =get(); static function service_class get(); if(me = null) me = new() ; return me ; endfunctionextern virtual function void error (string msg) ;endclass
error method需要用户自行定义所需要的行为。
在UVM的workshop中使用了一个名称为proxy_class的singleton class很好地诠释了其在factory机制的应用。
class proxy_class#(type T =base) ;type proxy_class#(T) this_type ; //just for coding convenienceprotected function new();endfunctionstatic function this_type get();if(me== null) me = new() ;return me;endfunctionstatic function T create();create=new() ;functionendcase
class driver xtends base;typedef proxy_class(driver) proxy ;endclassclass monitor xtends base;typedef proxy_class(monitor) proxy ;endclass
class environment ; driver drv ; monitor mon; function new; drv = driver::proxy::create() ; mon = monitor::proxy::create() ; endfunctionendclass
这个proxy class提供了一个创建不同的singleton bject的机制。
为了使proxy class更有意义,我们需要一个virtual base class和factory机制。proxy class根据不同的factory注册和base class生成特定的proxy object。
到此,关于“singleton class是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
网站栏目:singletonclass是什么
URL地址:http://www.jxjierui.cn/article/pssdhh.html


咨询
建站咨询
