uvm_primer ch9 factory pattern 工厂模式

20 篇文章 10 订阅

uvm_primer ch9 factory pattern 工厂模式

ch9 factory pattern 工厂模式

programming tricks 称作设计模式;
工厂模式就是一种设计模式
工厂模式是一个static 方法

工厂模式例子

没有看懂工厂模式的优势,使用工厂模式还是要更改make_animal这个funciton;如果要构造一个狗的对象的话

  • 补充:如果要创建新的物种的话,确实要改变factory的make_animal方法,但是这个方法可以在任何地方直接调用
  • 更多细节可以看《大话设计模式》中工厂模式的相关解释
class animal_factory;

 // 定义成static,则这个函数在任何地方可以直接访问
 //animal 为返回对象的类型
   static function animal make_animal(string species, 
                                      int age, string name); 
      chicken chicken;
      lion lion;
      case (species)
        "lion" : begin
           lion = new(age, name);
           return lion;  //构造了一个狮子 ,然后把它赋给animal 类型的变量中;
        end

        "chicken" : begin
           chicken = new(age, name);
           return chicken;
        end

        default : 
          $fatal (1, {"No such animal: ", species});
        
      endcase // case (species)
      
   endfunction : make_animal
   
endclass : animal_factor
....
      animal animal_h;
      
      animal_h = animal_factory::make_animal("lion", 15, "Mustafa")//使用工厂模式  

强制类型转换

thorn_in_paw这个在animal类中没有定义,直接使用animal_h.thorn_in_paw 会报错
cast_ok = $cast(lion_h, animal_h);


cast_ok = $cast(lion_h, animal_h);
      if ( ! cast_ok) 
        $fatal(1, "Failed to cast animal_h to lion_h");
       //thorn_in_paw这个在animal类中没有定义,直接使用animal_h.thorn_in_paw 会报错
      if (lion_h.thorn_in_paw) $display("He looks angry!"); 
      animal_cage#(lion)::cage_animal(lion_h);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值