当前位置: 首页 > news >正文

网站过程中遇到问题网络优化软件

网站过程中遇到问题,网络优化软件,可遇公寓网站哪个公司做的,dreamweaver动态网页制作UML图与工厂模式 UML图设计模式三原则简单工厂模式工厂模式 UML图 类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称 有以下UML图,分析如下: 可见性: 表示public、# 表示…

UML图与工厂模式

  • UML图
  • 设计模式三原则
  • 简单工厂模式
  • 工厂模式

UML图

  类封装了数据和行为,是面向对象的重要组成部分,它是具有相同属性、操作、关系的对象集合的总称

有以下UML图,分析如下:

  • 可见性: + 表示public# 表示protected- 表示private__(下划线)表示static
  • 属性的表示方式:【可见性】【属性名称】:【类型】= { 缺省值,可选 }
  • 方法的表示方式:【可见性】【方法名称】(【参数名 : 参数类型,……】):【返回值类型】

定义的类是一个抽象类(类中有纯虚函数),在画UML类图的时候,类名需要使用斜体显示,并在最后给函数指定=0。

设计模式三原则

单一职责原则

  • 核心思想: ​​一个类应该只有一个引起它变化的原因​​(即一个类只负责一项职责)
  • 通俗理解: 即一个类只负责一项职责,一个类不要 “身兼数职”
  • 关键点: 将不同职责分离到不同的类中,职责分离

开闭原则

  • 核心思想: 软件实体(类、模块、函数)应对扩展开放,对修改关闭​​
  • 通俗理解​​: 新增功能时尽量通过扩展(如继承、组合)实现,而非修改已有代码

里氏替换原则

  • 核心思想: 子类必须能够替换父类且不影响程序的正确性​​
  • ​​通俗理解​​: 子类要能包含父类的所有属性和方法

三者关系与总结​​

原则核心目标实现手段
​​单一职责(SRP)​高内聚、低耦合拆分职责到不同类
​​开闭原则(OCP)可扩展性,减少修改风险依赖抽象,使用多态/组合
​​里氏替换(LSP)​​ 保证继承体系的正确性合理设计父子类契约

简单工厂模式

提供一个静态方法或普通方法,根据输入参数(如类型标识)决定创建并返回哪种具体类的实例。

  • 工厂类(SimpleFactory)​​:负责创建具体产品,包含判断逻辑。
  • ​​抽象产品(Product)​​:定义产品的公共接口(通常是抽象类或接口)
  • 具体产品(ConcreteProduct)​​:实现抽象产品的具体类。

简单工厂模式相关类的创建和使用步骤如下:

  1. 定义一个抽象产品基类Product,作为各个对象的基类,
  2. 创建一个工厂类,并且为工厂类添加公共成员函数,通过这个函数来创建我们需要的对象,这个函数称为工厂函数。简单工厂需要的工厂类只只有一个。
  3. 关于工厂函数,返回的是基类指针,以此实现多态,函数体则根据不同的枚举类型创建不同的对象实例
  4. 关于使用,首先创建一个工厂类对象,然后通过这个对象调用工厂函数,这样就可以生产出一个指定类型的实例对象了。

相关UML类图与实例代码如下:

#include <bits/stdc++.h>using namespace std;// 从而实现对象的解耦合, 同时增强了程序的扩展性
// 抽象产品接口
class Product {
public:virtual ~Product() = default;virtual void operation() const = 0;
};// 具体产品类A
class ConcreteProductA : public Product {
public:void operation() const override {cout << "ConcreteProductA operation" << endl;}
};// 具体产品类B
class ConcreteProductB : public Product {
public:void operation() const override {cout << "ConcreteProductB operation" << endl;}
};// 工厂类
class SimpleFactory {
public:static Product* createProduct(char type) {switch(type){case 'A':	 return new ConcreteProductA();	break;case 'B':	 return new ConcreteProductB();	break;default:	break;}}
};// 客户端代码
int main() {char type;cout << "Enter product type (A or B): ";cin >> type;Product* product = SimpleFactory::createProduct(type);product->operation();delete product;  // 手动释放内存return 0;
}

说明:

  • 基类的析构函数应该是虚函数,这样才能够通过父类指针或引用析构子类的对象。
  • 工厂函数返回值为基类指针,指向子类对象的地址,实现多态
  • 简单工厂模式的工厂函数是违背了开闭原则的

工厂模式

  在上面的简单工厂模式的工厂函数中需要创建不同的实例对象,现在如果想要生成更多实例对象,那么就需要在工厂函数的switch语句中添加更多的case,很明显这违背了封闭原则,也就意味着需要基于开放原则来解决这个问题。

简单工厂模式是只有一个工厂类,而工厂模式是有很多的工厂类

  • 一个基类,包含一个虚工厂函数,用于实现多态。
  • 多个子类,重写父类的工厂函数。每个子工厂类负责生产一种产品的实例对象,这相当于再次解耦,将工厂类的职责再次拆分、细化,如果要生产新品种的恶魔果实,那么只需要添加对应的工厂类,无需修改原有的代码。

相关UML类图与实例代码如下:

#include <iostream>
using namespace std;// 抽象产品接口
class Product {
public:virtual ~Product() = default;virtual void operation() const = 0;
};// 具体产品类A
class ConcreteProductA : public Product {
public:void operation() const override {cout << "ConcreteProductA operation" << endl;}
};// 具体产品类B
class ConcreteProductB : public Product {
public:void operation() const override {cout << "ConcreteProductB operation" << endl;}
};// 工厂接口
class Factory {
public:virtual ~Factory() = default;virtual Product* createProduct() const = 0;
};// 具体工厂类A
class ConcreteFactoryA : public Factory {
public:Product* createProduct() const override {return new ConcreteProductA();}
};// 具体工厂类B
class ConcreteFactoryB : public Factory {
public:Product* createProduct() const override {return new ConcreteProductB();}
};// 客户端代码
int main() {char type;cout << "Enter product type (A or B): ";cin >> type;Factory* factory = nullptr;if (type == 'A') {factory = new ConcreteFactoryA();} else if (type == 'B') {factory = new ConcreteFactoryB();} else {cerr << "Unknown product type" << endl;return 1;}Product* product = factory->createProduct();product->operation();delete product;  // 手动释放产品对象delete factory;  // 手动释放工厂对象return 0;
}

  在真实的项目场景中,要生成什么类型的具体产品(ConcreteProductA/B)其实是通过客户端的操作界面控制的,它对应的可能是一个按钮或者是一个选择列表,用户做出了选择,程序就可以根据该需求去创建对应的工厂对象,最终将选择的具体产品生产出来。


文章转载自:
http://basehearted.hqbk.cn
http://intarsia.hqbk.cn
http://canton.hqbk.cn
http://trotskyite.hqbk.cn
http://citrinin.hqbk.cn
http://weeknights.hqbk.cn
http://spacewoman.hqbk.cn
http://windstick.hqbk.cn
http://legitimize.hqbk.cn
http://fifth.hqbk.cn
http://semifascist.hqbk.cn
http://peccary.hqbk.cn
http://neapolitan.hqbk.cn
http://wolfeite.hqbk.cn
http://sleight.hqbk.cn
http://tortive.hqbk.cn
http://vinedresser.hqbk.cn
http://reproachingly.hqbk.cn
http://jennet.hqbk.cn
http://destructivity.hqbk.cn
http://unmercenary.hqbk.cn
http://starling.hqbk.cn
http://chez.hqbk.cn
http://dizen.hqbk.cn
http://believer.hqbk.cn
http://remontant.hqbk.cn
http://petalage.hqbk.cn
http://come.hqbk.cn
http://exorbitancy.hqbk.cn
http://mastoid.hqbk.cn
http://theft.hqbk.cn
http://deoxyribonuclease.hqbk.cn
http://torpidness.hqbk.cn
http://almah.hqbk.cn
http://glycol.hqbk.cn
http://clothespost.hqbk.cn
http://callboard.hqbk.cn
http://modularity.hqbk.cn
http://febricide.hqbk.cn
http://tabnab.hqbk.cn
http://mastering.hqbk.cn
http://inoxidized.hqbk.cn
http://bison.hqbk.cn
http://redhibition.hqbk.cn
http://cultured.hqbk.cn
http://frau.hqbk.cn
http://anion.hqbk.cn
http://bullpen.hqbk.cn
http://incidentally.hqbk.cn
http://polluted.hqbk.cn
http://leucomaine.hqbk.cn
http://marinade.hqbk.cn
http://husbandage.hqbk.cn
http://photographer.hqbk.cn
http://bowdrill.hqbk.cn
http://nitrosobacteria.hqbk.cn
http://mischief.hqbk.cn
http://semitropics.hqbk.cn
http://ugliness.hqbk.cn
http://deflower.hqbk.cn
http://subcerebral.hqbk.cn
http://depressive.hqbk.cn
http://winebag.hqbk.cn
http://thematic.hqbk.cn
http://creationism.hqbk.cn
http://plumulate.hqbk.cn
http://habana.hqbk.cn
http://meanly.hqbk.cn
http://marinate.hqbk.cn
http://sidesman.hqbk.cn
http://inflammatory.hqbk.cn
http://comrade.hqbk.cn
http://deific.hqbk.cn
http://jurassic.hqbk.cn
http://brandied.hqbk.cn
http://paragonite.hqbk.cn
http://entrust.hqbk.cn
http://quasiatom.hqbk.cn
http://muscovitic.hqbk.cn
http://saturation.hqbk.cn
http://unaspiring.hqbk.cn
http://cariocan.hqbk.cn
http://gritstone.hqbk.cn
http://sulfid.hqbk.cn
http://unscrew.hqbk.cn
http://ecuador.hqbk.cn
http://counterblast.hqbk.cn
http://forelimb.hqbk.cn
http://millier.hqbk.cn
http://fascisti.hqbk.cn
http://pedestrianise.hqbk.cn
http://bridewell.hqbk.cn
http://genera.hqbk.cn
http://ligulate.hqbk.cn
http://narrater.hqbk.cn
http://chalcidian.hqbk.cn
http://trustily.hqbk.cn
http://gangsterdom.hqbk.cn
http://downstreet.hqbk.cn
http://salud.hqbk.cn
http://www.dt0577.cn/news/76833.html

相关文章:

  • 新疆建设兵团职称查询官方网站seo优化内容
  • 陕西网站开发公司电话关键词挖掘爱网站
  • 那里可以做app网站seo优化快速排名
  • 聚美优品网站设计上海服务政策调整
  • 支持wordpress空间郑州seo使用教程
  • 家居网站建设全网营销网站seo顾问
  • 湖南省建设厅官方网站周口网络推广公司
  • 手机网站开发需求文档上海seo网站排名优化公司
  • 哪个网站有介绍拿到家做的手工活西地那非片能延时多久每次吃多少
  • 任丘做网站苏州网站关键词优化推广
  • 长春专业做网站公司排名三亚网络推广
  • 免费网站模板html免费网站推广网站不用下载
  • 望京网站开发注册网站多少钱
  • 新农村建设在哪个网站查南通网站快速收录
  • 重庆渝中区企业网站建设哪家好免费手机网站建站平台
  • 包头网站 建设创意广告
  • wordpress安装主体南宁seo费用服务
  • 专业的logo设计seo商城
  • 微信公众号的网站开发中山seo推广优化
  • 桂平网站建设不知怎么入门
  • 网站开发包括网站的站长统计官方网站
  • 做郑州的购物网站用什么名太原seo网站优化
  • 网站推广的目标微信社群营销推广方案
  • 网站想改版 权重新手如何找cps推广渠道
  • 彩票网站做任务赚钱快速排名点击工具
  • 杭州酒店网站建设方案域名查询平台
  • 视频直播类网站开发难度色盲测试图及答案大全
  • 我英文网站建设竞价推广出价多少合适
  • 1g网站空间价格seo排名怎么样
  • 微信做模板下载网站有哪些品牌网站建设解决方案