设计模式学习(一)——《大话设计模式》

设计模式学习(一)——《大话设计模式》

1.类与实例(OOP-Object-Oriented Programming)

类(Class):具有相同的属性和功能的对象的集合;实例是一个真实的对象。可以将类比作是一个制造对象的模具,它定义了创建特定类型对象时所需的结构和行为。

  1. ​ 属性(Attributes):类中定义的变量。它们代表了对象的状态或特性。
  2. ​ 方法(Methods):类中定义的函数。它们代表了对象可以执行的操作。

实例(Instance):实例是根据类的定义创建的具体对象。每个实例都拥有类中定义的属性和方法,但各自的属性值可以不同,这意味着每个实例都是独特的。

当创建一个类的实例时,实际上是在根据类的蓝图创建一个具体的对象。这个过程通常被称为“实例化”。

代码示例(参考):

#假设我们有一个名为Dog的类,它代表了狗这一类动物的共同特征和行为。
class Dog:
    def __init__(self, name, breed):
        self.name = name  # 属性:名字
        self.breed = breed  # 属性:品种

    def bark(self):  # 方法:叫
        return f"{self.name} says woof!"

Dog类有两个属性(name和breed)和一个方法(bark)。我们可以根据这个类创建实例:

my_dog = Dog("Buddy", "Golden Retriever")
print(my_dog.bark())  # 输出: Buddy says woof!

my_dog是一个Dog类的实例,具有名为“Buddy”的名字属性和“Golden Retriever”作为品种属性。每次我们根据Dog类创建一个新的实例时,我们都可以为它指定不同的名字和品种,每个实例都会拥有相同的方法(在这个例子中是bark),但是属性值(如名字和品种)可以根据每个实例而不同。

2.构造方法

构造方法,又叫构造函数,其实就是对类进行初始化。构造方法(或构造函数)是一种特殊的方法,它在创建类的新实例时自动调用。构造方法的主要作用是初始化新创建的对象,为新创建的对象设置初始状态。

特点
自动调用:当创建类的实例时,无需明确调用构造方法,它会自动执行。
初始化对象:构造方法通常用于初始化对象的属性或执行必要的启动步骤。
名称特定:在某些语言中,构造方法有固定的名称(如Python中的__init__),而在其他语言中,构造方法的名称可能与类名相同(如Java和C++)。

代码示例:

class Dog:
    def __init__(self, name, breed):
        self.name = name  # 初始化属性name
        self.breed = breed  # 初始化属性breed
class Dog {
public:
    string name;
    string breed;

    Dog(string name, string breed) {
        this->name = name;  // 初始化属性name
        this->breed = breed;  // 初始化属性breed
    }
};

public class Dog {
    String name;
    String breed;

    public Dog(String name, String breed) {
        this.name = name;  // 初始化属性name
        this.breed = breed;  // 初始化属性breed
    }
}

注意事项:

  • 构造方法可以有参数,这允许在创建对象时传递初始值。
  • 某些语言支持构造方法的重载,这意味着可以根据不同的参数定义多个构造方法。
  • 在一些语言中,如果没有明确定义构造方法,编译器会提供一个默认的构造方法(不接受任何参数并且不执行任何操作)。

3.方法重载

方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型。参数列表的不同可以是参数的数量不同、参数类型不同或者参数的顺序不同。

方法重载的关键点

  1. 参数列表必须不同:这是方法重载的核心。只有当参数的数量、类型或者顺序至少有一项不同时,才能构成重载。
  2. 返回类型可以不同:虽然方法重载允许返回类型不同,但仅通过返回类型的不同并不能构成重载。
  3. 访问修饰符可以不同:方法重载的方法可以有不同的访问修饰符(如public、protected等)。
  4. 抛出的异常可以不同:重载的方法可以声明抛出不同的异常。

代码示例:

public class Dog {
    String name;
    String breed;

    public Dog(String name, String breed) {
        this.name = name;  // 初始化属性name
        this.breed = breed;  // 初始化属性breed
    }
}

#使用可变参数模拟方法重载
def add(*args):
    if len(args) == 2 and all(isinstance(x, int) for x in args):
        return args[0] + args[1]
    elif len(args) == 3 and all(isinstance(x, int) for x in args):
        return args[0] + args[1] + args[2]
    elif len(args) == 2 and all(isinstance(x, float) for x in args):
        return args[0] + args[1]
    else:
        return "Unsupported operation"

# 使用
print(add(1, 2))       # 输出: 3
print(add(1, 2, 3))    # 输出: 6
print(add(1.5, 2.5))   # 输出: 4.0
print(add("a", "b"))   # 输出: Unsupported operation
#使用关键字参数和默认值模拟
def add(a=None, b=None, c=None):
    if isinstance(a, int) and isinstance(b, int) and c is None:
        return a + b
    elif isinstance(a, int) and isinstance(b, int) and isinstance(c, int):
        return a + b + c
    elif isinstance(a, float) and isinstance(b, float) and c is None:
        return a + b
    else:
        return "Unsupported operation"

# 使用
print(add(a=1, b=2))         # 输出: 3
print(add(a=1, b=2, c=3))    # 输出: 6
print(add(a=1.5, b=2.5))     # 输出: 4.0
  • 16
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值