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

优化网站推广网站seo管理

优化网站推广网站,seo管理,wordpress用户导出,装饰行业做网站简单工厂模式是属于创建型模式,也因为工厂中的方法一般设置为静态,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工…

        简单工厂模式是属于创建型模式,也因为工厂中的方法一般设置为静态,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。

1.示例代码解读

//简单工厂模式工厂代码
#include <iostream>
using namespace std;//抽象产品
class AbstractProduct
{
public:virtual ~AbstractProduct() {}virtual void Operation() = 0;
};class SimpleFactory
{
public:static AbstractProduct* CreateProduct(const std::string& type);
};int main()
{AbstractProduct* productA = SimpleFactory::CreateProduct("A");productA->Operation();AbstractProduct* productB = SimpleFactory::CreateProduct("B");productB->Operation();delete productA;delete productB;return 0;
}

1.1 核心函数

        设计模式只是我们总结的一种方法论,我想强调的是,设计模式仅仅是我们做事情的方法或者说是套路,而我们应用它的目的是为了解决我们的问题本身。先不要觉得的思路有点儿莫名其妙,我先请大家回答一个问题,在上述的代码里,真正的核心是哪一个函数?或者说与业务最相关的是哪个函数?  没错,是Operation(),就是这个函数。 

        我们搞了那么多套路,那么多设计模式,无非就是为了调用Operation()函数,完成我们想要完成的工作不是么?比如Opertion()函数是用来读某一种格式的文件的。但是我再问大家一个问题,你在使用这个函数的时候,你需要关心它具体是怎么做的么?比如它读一个txt,你会关心它具体怎么去解析这个问题的内容么?往往不会对么,除非你是负责做文件解析的,但是在使用这段代码的时候,当时的角色一定不是为了做文件解析本身,而是想要拿到文件解析的成果。而事实上,大多数情况下,你根本是拿不到Operation()实现的具体代码细节。就比如上述的代码,你只看到了这个函数接口,而拿不到函数实现。

1.2 迪米特法则

        大家发现没有,我们最关心的Operation(),我们既不知道它具体是怎么实现的(但是我们当然得知道它用来做什么,这个一般会写上接口说明,如果你连这个函数的作用都不知道,你还用个der)。事实上,我们连具体是什么类型的对象的函数也不知道(我们只知道它的抽象类)。看到没,这样一种封装是不是做的很漂亮很极致,不该知道的你都不知道,都被完美的封装起来了。这就是迪米特法则,又称最少知道原则(Demeter Principle)。也就是说,你只需要知道你需要选择创建什么样的类型的“产品”,来执行你的操作就好了。还是用解析文件的例子,比如你需要解析的文件是txt格式的,那你就选择解析txt格式的“产品”,如果你需要解析“jpg”格式的产品你就设置对应的类型即可。创建完对应的类型,直接调用Operation()函数,即可完成工作,是不是非常的无脑简单。

1.3 扩展问题

        这个时候聪明的同学就会问了,如果我想解析一种新的文件格式咋整。好,那就要涉及到需要增加新“产品”的问题了。这个时候你就需要请做这个工厂模式文件解析库的同学来帮忙了。我们来看看他在扩展这个需求的时候需要做什么工作。这里我们需要把全部的核心的简单工厂模式代码打开来看。

//简单工厂模式工厂代码
#include <iostream>
using namespace std;//抽象产品
class AbstractProduct
{
public:virtual ~AbstractProduct() {}virtual void Operation() = 0;
};class SimpleFactory
{
public:static AbstractProduct* CreateProduct(const std::string& type);
};int main()
{AbstractProduct* productA = SimpleFactory::CreateProduct("A");productA->Operation();AbstractProduct* productB = SimpleFactory::CreateProduct("B");productB->Operation();delete productA;delete productB;return 0;
}//具体产品
class ProductA : public AbstractProduct
{
public:void Operation() {cout << "ProductA" << endl;}
};//具体产品B
class ProductB : public AbstractProduct {
public:void Operation() {cout << "ProductB" << endl;}
};AbstractProduct* SimpleFactory::CreateProduct(const std::string& type){if (type == "A")return new ProductA();else if (type == "B")return new ProductB();elsereturn nullptr;}

这里我偷了个懒,没有把声明和实现分开放在.h和.cpp文件里,大家知道就行。大家可以看到,main函数之下的代码就是具体的实现代码了。我们在第一份代码里,看到有A,B两个产品。现在我们需要增加C产品。我们要改两个地方:

  1. 需要再派生一个具体的产品类C,且实现Opertion()函数的具体功能。
  2. 工厂的CreateProduc函数需要做新增的判断。

最后我们的这个简单工厂模块需要重新编译(一般都是以链接库的方式提供给其他人调用)。到此位置我们代码解读部分就完成了。

2.组成结构

简单工厂模式包含以下几个主要组成部分:

  1. Factory(简单工厂):核心部分,负责实现创建所有产品的内部逻辑,工厂类可以被外界直接调用,创建所需对象。
  2. Product(抽象类产品):工厂类所创建的所有对象的父类,封装了产品对象的公共方法,所有的具体产品为其子类对象。
  3. ConcreteProduct(具体产品):简单工厂模式的创建目标,所有被创建的对象都是某个具体类的实例。它要实现抽象产品中声明的抽象方法(有关抽象类)。

3.工作流程

简单工厂模式的工作流程如下:

  1. 客户端通过调用工厂类的方法来请求一个产品对象。
  2. 工厂类根据客户端的请求,决定实例化哪个具体产品对象。
  3. 工厂类实例化具体产品对象,并将其返回给客户端。
  4. 客户端通过产品接口操作具体产品对象。

3.优缺点

2.1 优点

  1. 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅“消费”产品;简单工厂模式通过这种做法实现了对责任的分割,它提供了专门的工厂类用于创建对象。
  2. 客户端无须知道所创建的具体产品类的类名,只需要知道具体产品类所对应的参数即可,对于一些复杂的类名,通过简单工厂模式可以减少使用者的记忆量。
  3. 通过引入配置文件,可以在不修改任何客户端代码的情况下更换和增加新的具体产品类,在一定程度上提高了系统的灵活性。

总结:只需要传入一个正确的参数,就可以获取你所需要的对象而无需知道其创建对象的细节

2.2 缺点

  1. 由于工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
  2. 使用简单工厂模式将会增加系统中类的个数,在一定程序上增加了系统的复杂度和理解难度。
  3. 系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,在产品类型较多时,有可能造成工厂逻辑过于复杂,不利于系统的扩展和维护。
  4. 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构。

总结:扩展性差,当增加新的产品需要修改工厂类的判断逻辑,违背开闭原则,如我想要买一个华为手机的话,除了新增华为手机这个产品类,还需要修改工厂中的逻辑

4.应用场景

  1. 创建型模式:简单工厂模式是一种创建型模式,它的主要目的是为了实现解耦,将对象的创建和使用分开,即应用程序将对象的创建和初始化职责交给工厂对象。通过简单工厂,实现了调用类和具体实现类的解耦,使用者不需要知道具体的创建过程,只需要使用即可。
  2. 封装具体实现:如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装类,那么可以选择简单工厂模式。通过简单工厂,可以将对外创建对象的职责集中管理和控制。
  3. 降低代码重复:如果对象B的创建过程比较复杂,并且很多地方都用到了,那么很可能出现很多重复的代码。通过统一将创建对象B的代码放到工厂里面统一管理,可以减少代码的重复率,同时也方便维护。
  4. 处理子类:当类本身有很多子类,并且经常性发生变化时,可以使用简单工厂模式。

5.引用

设计模式简单学——简单工厂模式 (baidu.com)

http://www.hkea.cn/news/614717/

相关文章:

  • 永川做网站的武汉百度快速排名提升
  • 做网站的故意给中病毒网络营销广告
  • 关于阅读类网站的建设规划书友情链接系统
  • 专业做幼儿园设计的网站百度小程序关键词优化
  • 腾龙时时彩做号网站整站优化关键词排名
  • 正规的网站制作与推广百度广告运营
  • 网站建设估价引擎搜索有哪些
  • 东莞网站建设选菲凡网络如何制作网站
  • 网站收录系统备案查询官网
  • 临朐县网站建设利用搜索引擎营销成功的案例
  • 利用网盘做视频网站镇江优化推广
  • 视频微网站开发哪个公司网站设计好
  • 品网站建设智能搜索引擎
  • 怎样在百度建网站seo建设者
  • 四海网络网站建设咨询什么叫做网络营销
  • 安徽建设网官方网站优化分析
  • 网站根目录文件名游戏推广员是做什么的
  • 个体工商户怎么做网站西安网站seo技术
  • 报名网站制作2345网址导航官网下载安装
  • 图书购物网站开发总结百度发广告需要多少钱
  • 做网站 业务流程图站长统计性宝app
  • 长沙做网站大概多少钱万网域名注册教程
  • 成都网站建设网站产品推广计划书怎么写
  • 深圳个人网站建设大连网络推广公司哪家好
  • 建设工程教育appseo技术培训中心
  • 家教中介怎么利用网站来做的免费广告推广
  • wordpress仿制建设seo是什么平台
  • 商城网站建设分为几块seo臻系统
  • 网络营销对于个人而言有什么作用seo文章
  • 做书籍封皮的网站今日中国新闻