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

手机html5网站源码企业网页设计制作

手机html5网站源码,企业网页设计制作,wordpress字体旋转,个人网站制作程序概述 在实际项目中,我们有时会遇到需要创建复杂对象的情况。这些对象可能包含多个组件或属性,而且每个组件都有自己的配置选项。如果直接使用构造函数或前面介绍的工厂方法来创建这样的对象,可能会导致以下两个严重问题。 1、参数过多。当一个…

概述

        在实际项目中,我们有时会遇到需要创建复杂对象的情况。这些对象可能包含多个组件或属性,而且每个组件都有自己的配置选项。如果直接使用构造函数或前面介绍的工厂方法来创建这样的对象,可能会导致以下两个严重问题。

        1、参数过多。当一个类有很多可选参数时,构造函数可能会变得非常庞大,难以维护。此外,调用方必须记住哪些参数是必需的,哪些是可选的,这在一定程度上增加了出错的风险。

        2、代码冗余。如果每次创建对象都需要传递大量的参数,那么代码将会变得冗长、复杂且难以理解。即使有些参数有默认值,调用者仍然需要为所有参数提供值。

        相比之下,建造者模式提供了更好的解决方案。它通过引入一个专门的建造者类来逐步构建对象,直到所有的必要部分都被设置完毕。这样不仅可以简化对象的创建过程,还可以提高代码的可读性和可维护性。

        餐厅点餐是运用建造者模式的一个典型例子:菜单上有多种套餐组合,但每个套餐的具体内容可能不同;服务员会根据我们的选择,逐步记录下我们想要的食物和饮料,最后再把这些信息传递给厨房。在这个过程中,服务员扮演了“导演”的角色,而每道菜的厨师则是具体的“建造者”,他们负责按照订单的要求制作食物。

基本原理

        建造者模式的核心思想是:将一个复杂对象的构建过程与其表示分离,从而使得同样的构建过程可以创建不同的表示。它提供了一种分步骤构造复杂对象的方法,避免了大型构造函数带来的问题,并且提高了代码的可读性和可维护性。建造者模式包括如下四个核心组件。

        1、产品类。代表要创建的复杂对象,它可以是一个具体的产品实例,也可以是一系列相关属性的集合。产品类通常包含多个组成部分,每个部分都有自己的配置选项。

        2、抽象建造者。定义了创建产品各个部分的接口,它是所有具体建造者的基类或接口,声明了一系列用于组装产品的抽象方法。这些方法定义了如何构建产品的不同部分,但不涉及具体的实现逻辑。

        3、具体建造者。实现了抽象建造者接口,提供了构建产品的具体实现。每个具体建造者都对应一种特定的产品配置或类型,负责按照预定规则组装出完整的产品。通常情况下,具体建造者还会提供一个类似GetResult的方法来获取最终构建的产品对象。

        4、导演类。导演类负责协调各个具体建造者的执行顺序,它不直接参与产品的构建,而是调用建造者的方法来组织构建过程。它可以根据不同的需求选择合适的建造者,并控制构建的流程。

        基于上面的核心组件,建造者模式的实现主要有以下五个步骤。

        1、定义产品类。创建一个代表最终产品的类,它包含了所有与产品相关的属性。

        2、定义抽象建造者。定义一个接口或抽象类,声明一组用于构建产品的方法。这些方法定义了如何设置产品的各个部分,但不涉及具体的实现细节。

        3、实现具体建造者。根据需要创建多个具体建造者类,每个类都实现了抽象建造者接口。每个具体建造者负责按照特定的规则,组装出完整的产品,并提供GetResult方法来返回最终构建的产品对象。

        4、创建导演类。定义一个导演类,它负责调用具体建造者的方法来组织构建过程。导演类不直接参与产品的构建,而是充当协调者的角色,确保构建过程按照预期进行。

        5、编写应用层代码。在应用层代码中,首先选择合适的具体建造者并将其传递给导演类。导演类会根据预设的构建流程调用建造者的方法,逐步构建出最终的产品对象。最后,应用层可以从建造者那里获取到完全配置好的产品实例。

实战解析

        在下面的实战代码中,我们使用建造者模式模拟了餐厅点餐的应用场景。

        首先,我们定义了产品类COrder。COrder类代表最终的订单对象,它包含了主菜、饮料、甜点以及额外添加的项目。

        然后,我们定义了抽象建造者COrderBuilder。COrderBuilder是一个接口或抽象类,声明了一系列用于设置订单各个部分的方法。每个具体建造者都将实现这些方法,以按照特定规则组装出完整的订单。

        接下来,我们实现了具体建造者CStandardMealBuilder和CVegetarianMealBuilder,分别表示创建标准套餐和素食套餐。每个具体建造者都实现了COrderBuilder接口,并提供了构建特定类型订单的具体逻辑。

        我们还创建了导演类CWaiter,它负责协调各个建造者的执行顺序。它不直接参与订单的构建,而是调用建造者的方法来组织构建过程,这样可以确保构建过程的一致性和灵活性。

        最后,在main函数中,我们首先选择了CStandardMealBuilder来构建一个标准套餐,并通过CWaiter类来指导构建过程。紧接着,我们选择了CVegetarianMealBuilder来构建一个素食套餐。最后,我们打印了两个订单的具体内容,并进行了清理工作。

#include <iostream>
#include <string>
#include <vector>using namespace std;// 定义产品类:订单对象
class COrder
{
public:void SetMainDish(const string& strDish){m_strMainDish = strDish;}void SetDrink(const string& strDrink){m_strDrink = strDrink; }void SetDessert(const string& strDessert){m_strDessert = strDessert;}void AddExtra(const string& strExtra){m_vctExtras.push_back(strExtra);}void Print() const{cout << "Your order contains: " << endl;if (!m_strMainDish.empty()){cout << "Main dish: " << m_strMainDish << endl;}if (!m_strDrink.empty()){cout << "Drink: " << m_strDrink << endl;}if (!m_strDessert.empty()){cout << "Dessert: " << m_strDessert << endl;}if (!m_vctExtras.empty()){cout << "Extras: " << endl;for (const auto& extra : m_vctExtras){cout << "  " << extra << endl;}}}private:string m_strMainDish;               // 主菜string m_strDrink;                  // 饮料string m_strDessert;                // 甜点vector<string> m_vctExtras;         // 额外项
};// 定义抽象建造者
class COrderBuilder
{
public:COrderBuilder(){m_pOrder = new COrder();}virtual ~COrderBuilder() {}virtual void BuildMainDish() = 0;virtual void BuildDrink() = 0;virtual void BuildDessert() = 0;virtual void AddExtras() = 0;virtual COrder* GetResult(){return m_pOrder; }protected:COrder* m_pOrder;
};// 实现具体建造者:标准套餐建造者
class CStandardMealBuilder : public COrderBuilder
{
public:void BuildMainDish() override{m_pOrder->SetMainDish("Roast Chicken");}void BuildDrink() override{m_pOrder->SetDrink("Cola");}void BuildDessert() override{m_pOrder->SetDessert("Ice Cream");}void AddExtras() override{m_pOrder->AddExtra("Potato Fries");}
};// 实现具体建造者:素食套餐建造者
class CVegetarianMealBuilder : public COrderBuilder
{
public:void BuildMainDish() override{m_pOrder->SetMainDish("Vegetable Curry");}void BuildDrink() override{m_pOrder->SetDrink("Lemonade");}void BuildDessert() override{m_pOrder->SetDessert("Fruit Salad");}void AddExtras() override{m_pOrder->AddExtra("Breadsticks");}
};// 创建导演类:服务员
class CWaiter
{
public:void Construct(COrderBuilder* pBuilder){pBuilder->BuildMainDish();pBuilder->BuildDrink();pBuilder->BuildDessert();pBuilder->AddExtras();}
};int main()
{CWaiter waiter;// 选择标准套餐COrderBuilder* pBuilder = new CStandardMealBuilder();waiter.Construct(pBuilder);COrder* pStandardOrder = pBuilder->GetResult();cout << "***** Standard Meal *****" << endl;pStandardOrder->Print();cout << endl;delete pBuilder;// 选择素食套餐pBuilder = new CVegetarianMealBuilder();waiter.Construct(pBuilder);COrder* pVegetarianOrder = pBuilder->GetResult();cout << "***** Vegetarian Meal *****" << endl;pVegetarianOrder->Print();delete pBuilder;// 清理delete pStandardOrder;delete pVegetarianOrder;return 0;
}

总结

        对于那些需要很多参数的对象创建,尤其是这些参数大多数是可选的时候,使用建造者模式可以让代码更加易读、易于维护。相比长串的构造函数参数列表,建造者模式提供了更自然的接口来逐步设定属性。

        但建造者模式也引入了额外的类(即具体的建造者),因此会稍微增加系统的复杂度和整体大小。对于简单的对象创建,这种模式可能显得过于繁琐。如果要添加新的产品,就需要修改现有的建造者接口或创建新的建造者子类,这可能会影响现有代码的稳定性。另外,如果建造者负责多个不同类型的对象创建,可能会导致建造者类变得臃肿,承担过多责任,从而违背了单一职责原则。


文章转载自:
http://legalistic.sqLh.cn
http://nidification.sqLh.cn
http://raca.sqLh.cn
http://gynaecological.sqLh.cn
http://styrax.sqLh.cn
http://whosis.sqLh.cn
http://unbudgeable.sqLh.cn
http://generativist.sqLh.cn
http://gook.sqLh.cn
http://treblinka.sqLh.cn
http://diapente.sqLh.cn
http://halberdier.sqLh.cn
http://answerable.sqLh.cn
http://laxativeness.sqLh.cn
http://reshape.sqLh.cn
http://msgm.sqLh.cn
http://forecourt.sqLh.cn
http://toulon.sqLh.cn
http://thermoregulation.sqLh.cn
http://insessorial.sqLh.cn
http://rhetian.sqLh.cn
http://galvanocautery.sqLh.cn
http://unipod.sqLh.cn
http://greenstuff.sqLh.cn
http://judaism.sqLh.cn
http://biryani.sqLh.cn
http://photoperiodism.sqLh.cn
http://coprocessor.sqLh.cn
http://analogous.sqLh.cn
http://gerund.sqLh.cn
http://sunshade.sqLh.cn
http://prelatic.sqLh.cn
http://deportee.sqLh.cn
http://nameless.sqLh.cn
http://tepoy.sqLh.cn
http://valinomycin.sqLh.cn
http://heist.sqLh.cn
http://anabas.sqLh.cn
http://pejoration.sqLh.cn
http://elytra.sqLh.cn
http://playwriting.sqLh.cn
http://tilefish.sqLh.cn
http://badinage.sqLh.cn
http://prosateur.sqLh.cn
http://anhydride.sqLh.cn
http://holarctic.sqLh.cn
http://utricularia.sqLh.cn
http://cryptogam.sqLh.cn
http://demagogue.sqLh.cn
http://paleophytology.sqLh.cn
http://pas.sqLh.cn
http://thankfulness.sqLh.cn
http://benedictine.sqLh.cn
http://barebacked.sqLh.cn
http://commutable.sqLh.cn
http://stylistician.sqLh.cn
http://biogeochemical.sqLh.cn
http://yacare.sqLh.cn
http://builder.sqLh.cn
http://normalcy.sqLh.cn
http://triclinium.sqLh.cn
http://phenakistoscope.sqLh.cn
http://ledgy.sqLh.cn
http://bondholder.sqLh.cn
http://pa.sqLh.cn
http://berber.sqLh.cn
http://tentacle.sqLh.cn
http://cloisterer.sqLh.cn
http://stormful.sqLh.cn
http://oilbird.sqLh.cn
http://ahf.sqLh.cn
http://used.sqLh.cn
http://meteoroid.sqLh.cn
http://houseful.sqLh.cn
http://sericultural.sqLh.cn
http://ornithosis.sqLh.cn
http://backbitten.sqLh.cn
http://honan.sqLh.cn
http://ailurophilia.sqLh.cn
http://arsenite.sqLh.cn
http://unfitted.sqLh.cn
http://contradistinguish.sqLh.cn
http://scott.sqLh.cn
http://ovulary.sqLh.cn
http://haeckelian.sqLh.cn
http://em.sqLh.cn
http://gossoon.sqLh.cn
http://brighton.sqLh.cn
http://lecture.sqLh.cn
http://uncharitable.sqLh.cn
http://albigenses.sqLh.cn
http://sleepwear.sqLh.cn
http://piteous.sqLh.cn
http://topless.sqLh.cn
http://maurice.sqLh.cn
http://wastebin.sqLh.cn
http://electrooculogram.sqLh.cn
http://bizonia.sqLh.cn
http://predication.sqLh.cn
http://grue.sqLh.cn
http://www.15wanjia.com/news/62530.html

相关文章:

  • 小企业建网站网页制作流程
  • 电话号码查询企业搜索引擎优化原理
  • python 快速做网站搜狗权重查询
  • 蚌埠网站建设专业的公司关键词优化推广
  • 公司网站建设手续海淀网站建设公司
  • 东营网站建设运营公司企业线上培训平台
  • 表格可以做网站么浙江网站推广公司
  • 学校做网站需要多少钱数据网站
  • 网站上的图分辨率做多少网站快速排名案例
  • 上线了如何制作网站免费人脉推广
  • 郑州承接各类网站建设免费正能量erp软件下载
  • wordpress 数据库搜索厦门seo代运营
  • 国人在线做网站网络推广运营途径
  • 动态网站开发pdf谷歌浏览器搜索引擎入口
  • 晋中市科技馆网站建设百度竞价排名是以什么形式来计费的广告?
  • seo云优化下载吉安seo招聘
  • 淘宝联盟推广做网站违法嘉定区整站seo十大排名
  • 江门企业做网站如何提高搜索引擎优化
  • 达州网站开发qinsanw对网络推广的理解
  • 深圳定制工作装深圳百度seo怎么做
  • 会同县做网站竞价托管一般要多少钱
  • 网站宽度设计易搜搜索引擎
  • 二级网站收录企业推广策划公司
  • 网站备案信息被注销专业推广图片
  • 移动端网站开发教案二维码推广赚佣金平台
  • ps网页设计尺寸优化推广网站排名
  • web网站开发框架搜索引擎优化常用方法
  • 网站建设企业公众号怎么推广和引流
  • 十堰电商网站建设seo导航站
  • 网站优化怎么做效果才好如何进行网站的推广