java(实验拓展)工厂模式和原型模式

工厂模式

简单来说是一种创建型设计模式,它提供了一种创建对象的最佳实践,这种模式提供了一种抽象工厂,通过使用工厂方法来创建对象。工厂方法将对象的创建推迟到子类中,这样就可以实现对象的创建和使用解耦。

一、概念

工厂模式是一种对象创建型模式,它提供了一种创建对象的最佳实践。在工厂模式中,我们在创建对象时不使用new关键字,而是通过调用工厂方法来创建对象。工厂方法是一种在子类中定义的方法,该方法负责实例化对象。工厂方法可以返回不同的对象类型,因此工厂方法可以创建一组相关或不相关的对象。这样就可以将对象的创建和使用解耦。

二、实现

Java工厂模式的实现包括三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。

简单工厂模式是最基本的工厂模式,它通过一个工厂类来创建所有需要的对象。简单工厂模式将对象的创建逻辑封装在一个工厂类中,客户端通过调用工厂类的静态方法来创建对象。简单工厂模式有一个缺点,就是它违背了开闭原则,当需要添加新的对象时,需要修改工厂类的代码。

三、优点

Java工厂模式的优点包括:

  1. 可以将对象的创建和使用解耦,从而提高系统的灵活性和可维护性。

  2. 工厂模式可以隐藏对象的创建细节,使客户端只关心对象的使用,从而降低系统的复杂度。

  3. 工厂模式可以通过扩展工厂类或增加新的工厂类来添加新的产品,从而提高系统的扩展性和可维护性。

四、缺点

Java工厂模式的缺点包括:

  1. 工厂模式会增加系统的类和对象的个数,从而增加系统的复杂度。

  2. 工厂模式需要额外的工作量来创建和维护工厂类和产品类,从而增加系统的开发成本。

  3. 工厂模式可能会降低系统的性能,因为客户端需要通过调用工厂方法来创建对象,从而增加了系统的开销。

五、总结

Java工厂模式是一种常用的设计模式,它可以将对象的创建和使用解耦,从而提高系统的灵活性和可维护性。Java工厂模式包括简单工厂模式、工厂方法模式和抽象工厂模式三种形式,每种形式都有其特定的应用场景和优缺点。在实际开发中,我们需要根据具体的需求来选择合适的工厂模式。

原型模式

一、概念:

原型模式是一种创建型设计模式,其核心思想是通过复制现有对象来创建新对象,而不是通过实例化类来创建对象。原型模式基于原型实例创建对象的过程,可以简化对象的创建过程,提高性能,并且可以避免直接使用构造函数进行对象的创建。

二、实现:

原型模式的克隆分为浅克隆和深克隆。

  • 浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址
  • 深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。

在实现原型模式时,首先需要定义一个抽象原型类,其中包含一个抽象方法用于复制对象。然后具体的原型类继承抽象原型类,实现复制方法,并且能够通过复制方法创建新的对象。

三、优点:

1. 减少对象的创建时间:通过复制现有对象来创建新对象,可以减少对象的创建时间,提高性能。
2. 简化对象的创建过程:原型模式可以避免直接使用构造函数进行对象的创建,简化了对象的创建过程。
3. 可以动态添加或删除对象:通过原型模式创建对象,可以动态添加或删除原型对象,而不影响其他对象。

四、缺点:

1. 对象的深复制:在实现原型模式时,需要考虑对象的深复制问题,确保复制的对象与原对象完全独立,避免对象之间的影响。
2. 需要实现Cloneable接口:在Java中,实现原型模式需要实现Cloneable接口,并且重写clone()方法,这增加了代码的复杂性。

五、总结:

原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象复制原型自己来实现创建过程。

补充:

耦合性(Coupling),也叫耦合度,是对模块间关联程度的度量。模块间的耦合度是指模块之间的依赖关系,包括控制、调用、数据传递等。模块间联系越多,其耦合性越强,同时表明其独立性越差( 降低耦合性,可以提高其独立性)。

简单来说耦合越高,可以调用的能力就降低了。

  • 19
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 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、付费专栏及课程。

余额充值