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);