设计模式【四】:原型

设计模式【四】:原型

伪代码

class productSetFactory{
public:
	productSetFactory(ProductSet* s, ProductA* a, ProductB* b){
		_protoProductSet = s;
		_protoA = a;
		_protoB = b;
	}
	
	ProductSet* makeSet() const{
		return _protoProductSet->Clone();
	}
	ProductA* makeA() const{
		return _protoA->Clone();
	}
	ProductB* makeB(){
		PoductB* pB = _protoB->Clone();
		pB->SetA(_protoA->Clone());
		return pB;
	}
}

优缺点

优点
  • 运行时增删产品对象。
  • 动态地获得具体的对象,通过赋值即可,而非对每种对象都要继承一个子类然后实例化。一个对象的拷贝和一个对象的初始化过程相似,但不需要一个子类继承,也就是说更简单。
  • 减少继承。如果采用抽象工厂,相较于原型模式,其继承链一般更长。
缺点

原型类的每一个子类都必须实现Clone()方法。

何时使用

有时我们需要批量生产产品。这些产品只有细微差别,比如毕业证书。我们不必创建张三证书以及李四证书来继承证书类,我们只需生产证书的原型,比如张三证书,然后将名字修改为李四即可。

实现时技巧

  • 原型模式在c++这种强类型,类与对象是两个概念的语言中很合适,有的语言存在“类对象”,可能更灵活而不必使用原型模式。
  • 可实现一个原型管理类。所有原型在管理类内注册,尤其是当原型是动态增删时。
  • 实现原型类的Clone()方法时注意不同语言对于拷贝的特性。c++,java 等需要考虑深拷贝浅拷贝的问题,尤其是c++,浅拷贝可能导致内存分配有关的错误。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值