老婆出轨 发表于 2024-5-20 07:48:47

软件计划模式概念篇

创建型模式

1、创建型模式(Creational Pattern)对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。
2、为了使软件的布局更加清楚,外界对于这些对象只必要知道它们共同的接口,而不必要清楚其详细的实现细节,使整个体系的计划更加符合单一职责原则。
3、创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个体系独立的目标。
工厂方法模式(Factory Method)

模式动机:

定义一个抽象工厂类,并在详细工厂类里重写这个抽象工厂类中定义的抽象方法。抽象化的结果使这种布局可以在不修改已有详细工厂类的情况下引进新的产品。
模式定义:

1、定义一个用于创建对象的接口,让子类决定实例化哪一个类。
2、在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责天生详细的对象,将类的实例化操作延迟到子类中完成。
3、工厂方法模式属于类创建型模式。
布局

https://img2024.cnblogs.com/blog/2800810/202405/2800810-20240512181847816-562649763.png
定义抽象产品接口(Product):定义一个抽象产品接口,它声明了产品对象的通用属性和方法。所有详细产品类都必须实现这个接口方法。
创建详细产品类(Concrete Product):实现抽象产品接口的详细产品类。每个详细产品类表现一种详细的产品。
定义抽象工厂接口(Creator):创建一个抽象工厂接口,该接口声明了工厂方法,用于创建产品对象。
创建详细工厂类(Concrete Creator):实现抽象工厂接口的详细工厂类,每个详细工厂类负责创建特定类型的产品。在客户端中使用工厂方法:
代码实现

#include<iostream>
#include<string>
using namespace std;

//抽象产品
class Product
{
public:
        virtual void productMethod() = 0;
};
//具体产品1
class ConcreteProduct_Xiaomi : public Product
{
        void productMethod() override
        {
                cout << "小米手机生产。" << endl;
        }
};

//具体产品2
class ConcreteProduct_Huawei : public Product
{
        void productMethod() override
        {
                cout << "华为手机生产。" << endl;
        }
};

//抽象工厂
class Creator
{
public:
        virtual Product* factoryMethod() = 0;
};
//具体工厂1
class ConcreteCreator_Xiaomi : public Creator
{
public:
        Product* factoryMethod() override
        {
                return new ConcreteProduct_Xiaomi();
        }
};
//具体工厂2
class ConcreteCreator_Huawei : public Creator
{
public:
        Product* factoryMethod() override
        {
                return new ConcreteProduct_Huawei();
        }
};

int main()
{
        //使用具体工厂创建具体产品
        Creator* Xiaomi_Fac = new ConcreteCreator_Xiaomi();
        Product* Xiaomi_pro = Xiaomi_Fac->factoryMethod();
        Xiaomi_pro->productMethod();

        Creator* Huawei_Fac = new ConcreteCreator_Huawei();
        Product* Huawei_pro = Huawei_Fac->factoryMethod();
        Huawei_pro->productMethod();
}应用场景

后续补充
抽象工厂模式(Abstract Factory)

模式动机:

在工厂方法模式中,每个详细工厂对应一种详细产品。偶然,我们必要一个工厂可以提供多个产品对象,而不是单一的产品对象。
抽象工厂模式定义:

1、提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们详细的类。
2、抽象工厂模式属于对象创建型模式
布局:

https://img2024.cnblogs.com/blog/2800810/202405/2800810-20240512215801776-1786663341.png
抽象工厂接口(Abstract Factory): 定义了一组方法,每个方法用于创建某一类对象,通常包括多个产品族的创建方法。
详细工厂类(Concrete Factory): 实现了抽象工厂接口,负责创建详细的产品对象。每个详细工厂类通常对应一个产品族。
抽象产品接口(Abstract Product): 义了一组方法,用于描述产品的通用行为。
详细产品类(Concrete Product): 实现了抽象产品接口,表现真正的产品对象。每个详细产品类属于某个产品族。
代码实现:

#include<iostream>
#include<string>
using namespace std;

//抽象手机产品
class aF_ProductPhone
{
public:
        virtual void phoneMethod() = 0;
};
//具体产品-小米手机
class aF_ConcreteProductPhone_Xiaomi : public aF_ProductPhone
{
public:
        void phoneMethod() override
        {
                cout << "小米手机生产。" << endl;
        }
};

//具体产品-华为手机
class aF_ConcreteProductPhone_Huawei : public aF_ProductPhone
{
public:
        void phoneMethod() override
        {
                cout << "华为手机生产。" << endl;
        }
};

//抽象电脑产品
class aF_ProductComputer
{
public:
        virtual void computerMethod() = 0;
};
//具体产品-小米电脑
class aF_ConcreteProductComputer_Xiaomi : public aF_ProductComputer
{
public:
        void computerMethod() override
        {
                cout << "小米电脑生产。" << endl;
        }
};

//具体产品-华为电脑
class aF_ConcreteProductComputer_Huawei : public aF_ProductComputer
{
public:
        void computerMethod() override
        {
                cout << "华为电脑生产。" << endl;
        }
};

//抽象工厂
class aF_AbstractFactory
{
public:
        virtual aF_ProductPhone* createPhone() = 0;
        virtual aF_ProductComputer* createComputer() = 0;
};

//具体工厂-小米
class aF_XiaomiFactory : public aF_AbstractFactory
{
public:
        aF_ProductPhone* createPhone() override
        {
                return new aF_ConcreteProductPhone_Xiaomi();
        }
        aF_ProductComputer* createComputer() override
        {
                return new aF_ConcreteProductComputer_Xiaomi();
        }
};

//具体工厂-华为
class aF_HuaweiFactory : public aF_AbstractFactory
{
public:
        aF_ProductPhone* createPhone() override
        {
                return new aF_ConcreteProductPhone_Huawei();
        }
        aF_ProductComputer* createComputer() override
        {
                return new aF_ConcreteProductComputer_Huawei();
        }
};
int main()
{
        //小米工厂
        aF_AbstractFactory* xiaomiFac = new aF_XiaomiFactory();
        aF_ProductPhone* xiaomiPhone = xiaomiFac->createPhone();
        xiaomiPhone->phoneMethod();
        aF_ProductComputer* xiaomiComputer = xiaomiFac->createComputer();
        xiaomiComputer->computerMethod();
        //华为工厂
        aF_AbstractFactory* huaweiFac = new aF_HuaweiFactory();
        aF_ProductPhone* huaweiPhone = huaweiFac->createPhone();
        huaweiPhone->phoneMethod();
        aF_ProductComputer* huaweiComputer = huaweiFac->createComputer();
        huaweiComputer->computerMethod();
}应用场景

后续补充
单例模式(Singleton Pattern)

模式动机:

对于体系中的某些类来说,有且只能有一个实例。
(1)一个体系只能有一个窗口管理器。
(2)体系中可以有很多打印机,但是只能有一个打印机正在工作。
单例模式定义:

1、确保一个类只有一个实例,并提供一个全局访问点来访问这个唯一实例。
2、单例模式属于对象创建型模式。
3、单例负责类的实例的创建,且是唯一的。因此,在单例类的外部无法使用new创建。否则,该类的实例对象就不是单例。
布局:

https://img2024.cnblogs.com/blog/2800810/202405/2800810-20240512225343002-18820022.png
代码实现:

懒汉式单例模式:
饿汉式单例模式:
应用场景

后续补充
持续更新中

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 软件计划模式概念篇