创建型模式分类为类创建型模式和对象创建型模式,怎么区分的
时间: 2024-05-27 09:10:16 浏览: 17
创建型模式是指解决对象创建过程中的问题的一类设计模式。根据创建的对象是类还是对象,可以将创建型模式分为类创建型模式和对象创建型模式两种。
类创建型模式关注如何创建对象的层次结构,通过使用继承关系在运行时动态地确定实例化哪个类。类创建型模式包括工厂方法模式、抽象工厂模式、单例模式和建造者模式。
对象创建型模式关注如何将对象的创建过程封装起来,使得客户端不需要知道具体的实现细节。对象创建型模式包括原型模式和享元模式。
因此,区分类创建型模式和对象创建型模式的关键是看模式解决的问题是针对类的层次结构还是对象的创建过程。
相关问题
创建型模式从类创建型模式何对象创建型区分,用表格表示各个创建型模式
创建型模式可以分为两类:类创建型模式和对象创建型模式。
类创建型模式是通过继承关系来在运行时生成相应的对象,因此它们的主要特点是把对象的创建延迟到子类中去实现。
对象创建型模式则是将对象的创建委托给另一个对象来完成,而这些对象通常都拥有具体的创建方法。
下面是各个创建型模式的表格表示:
| 创建型模式 | 类型 | 描述 |
| --- | --- | --- |
| 简单工厂模式 | 类创建型模式 | 通过一个工厂类,根据传入的参数来决定创建哪种产品类的实例。 |
| 工厂方法模式 | 类创建型模式 | 定义一个用于创建对象的接口,让子类决定实例化哪个类。 |
| 抽象工厂模式 | 类创建型模式 | 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 |
| 单例模式 | 对象创建型模式 | 保证一个类仅有一个实例,并提供一个访问它的全局访问点。 |
| 原型模式 | 对象创建型模式 | 通过复制原型创建新的对象实例。 |
| 建造者模式 | 对象创建型模式 | 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 |
创建型模式都有哪些分类?具体应用场景?demo说明
创建型模式是设计模式中的一种,它关注如何实例化对象或者组合对象以创建新的对象。创建型模式可以分为以下几类:
1. 工厂模式:工厂模式是一种创建型模式,其目的是为客户端创建对象提供一个接口。工厂模式有三种类型:简单工厂模式、工厂方法模式和抽象工厂模式。工厂模式的应用场景包括:需要大量创建对象,而这些对象具有相似的属性和方法,需要解耦客户端和具体对象的创建过程等。
2. 建造者模式:建造者模式是一种创建型模式,它的目的是将一个复杂的对象的构建过程和它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式的应用场景包括:需要创建复杂对象,需要控制对象的创建过程,需要避免构造函数过长等。
3. 单例模式:单例模式是一种创建型模式,它保证一个类只有一个实例,并提供一个全局访问点。单例模式的应用场景包括:需要用一个共享的对象来管理全局配置信息、日志信息等,需要避免创建过多对象占用过多资源等。
4. 原型模式:原型模式是一种创建型模式,它通过复制现有的实例来创建新的实例。原型模式的应用场景包括:需要创建新对象,但是创建过程比较复杂,需要避免使用构造函数进行创建等。
下面是一个简单的demo说明工厂模式的应用。
```python
# 工厂模式示例
# 创建一个图形接口
class Shape:
def draw(self):
pass
# 创建具体图形类:圆形、矩形、正方形
class Circle(Shape):
def draw(self):
print("Circle.draw")
class Rectangle(Shape):
def draw(self):
print("Rectangle.draw")
class Square(Shape):
def draw(self):
print("Square.draw")
# 创建一个工厂类,用于创建具体的图形对象
class ShapeFactory:
def get_shape(self, shape_type):
if shape_type == 'circle':
return Circle()
elif shape_type == 'rectangle':
return Rectangle()
elif shape_type == 'square':
return Square()
# 使用工厂类创建具体的图形对象
factory = ShapeFactory()
circle = factory.get_shape('circle')
circle.draw()
rectangle = factory.get_shape('rectangle')
rectangle.draw()
square = factory.get_shape('square')
square.draw()
```
以上代码中,我们创建了一个`Shape`接口,它定义了`draw()`方法。然后,我们创建了三个具体的图形类:`Circle`、`Rectangle`和`Square`,它们分别实现了`Shape`接口中的`draw()`方法。
接着,我们创建了一个工厂类`ShapeFactory`,它有一个`get_shape()`方法,根据传入的参数返回相应的具体图形对象。在使用工厂类时,我们先创建一个工厂对象`factory`,然后使用它的`get_shape()`方法创建具体的图形对象,并调用其`draw()`方法。
这个例子中,我们使用工厂模式来创建具体的图形对象,这样客户端就不需要知道具体的图形类的创建过程,从而达到了解耦的目的。
相关推荐
![pptx](https://img-home.csdnimg.cn/images/20210720083543.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)