工厂模式和原型方法模式

工厂方法模式:

在这里插入图片描述简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
工厂模式方法:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法
使一个类的实例化延迟到其他子类。
在这里插入图片描述
工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法把简单的工厂的内部逻辑判断移到了客户端代码来实现进行,你想要加功能,本来是改工厂类的,而现在时修改的客户端的。
原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建的对象。
在这里插入图片描述
因为克隆很常用,所以在.net在System命名空间中提供了IConable接口,其方法为Clone()这样我们只需要实现这个接口就可以完成原型模式。

一般在初始化的信息不发生变化的情况下,克隆是最好的办法。这样既隐藏了对象创建的细节,又对性能进行了大大的提升。
这样做等于不用重新初始化对象,而是动态的获得对象运行时的状态。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
原型模式工厂模式都是创建型设计模式,它们的主要区别在于创建对象的方式和时间。具体来说: - 原型模式是在运行时根据原型对象克隆出新的实例对象,而不是通过调用构造函数创建。原型模式适用于创建复杂对象,且创建过程比较耗时的情况,可以通过克隆已有的实例对象来提高创建效率。 - 工厂模式是在编译时或者运行时创建对象,通过调用工厂方法或者类的构造函数来创建实例对象。工厂模式适用于创建简单对象,且创建过程比较简单的情况,可以通过工厂方法来封装对象的创建过程,从而提高代码的可维护性和可扩展性。 举个例子,假设我们要创建一个Person对象,包含name和age两个属性和say方法。使用原型模式工厂模式分别创建Person对象的代码如下: - 原型模式: ```javascript function Person() {} Person.prototype.name = 'Tom'; Person.prototype.age = 18; Person.prototype.say = function() { console.log('My name is ' + this.name + ', I am ' + this.age + ' years old.'); }; var person1 = new Person(); var person2 = new Person(); person2.name = 'Jerry'; person2.age = 20; person1.say(); // 输出:My name is Tom, I am 18 years old. person2.say(); // 输出:My name is Jerry, I am 20 years old. ``` - 工厂模式: ```javascript function createPerson(name, age) { var person = {}; person.name = name; person.age = age; person.say = function() { console.log('My name is ' + this.name + ', I am ' + this.age + ' years old.'); }; return person; } var person1 = createPerson('Tom', 18); var person2 = createPerson('Jerry', 20); person1.say(); // 输出:My name is Tom, I am 18 years old. person2.say(); // 输出:My name is Jerry, I am 20 years old. ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值