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

外贸网站建设智能建站北京seo公司司

外贸网站建设智能建站,北京seo公司司,虚拟主机怎么发布网站,语文建设 官方网站定义 提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。 使用场景 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种…

定义

提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。

使用场景

  • 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。
  • 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制"来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?

结构在这里插入图片描述

代码示例

//AbstractFactory.h
/****************************************************/
#ifndef ABSTRACT_FACTORY_H
#define ABSTRACT_FACTORY_H
#include<iostream>
using namespace std;//形状抽象类接口shape
class shape
{
public:shape() {};virtual ~shape() {};virtual void draw() = 0;virtual double get_area() = 0;virtual void calculate_area() = 0;enum shape_type {rectangle,circle};protected:double area;
};//继承形状抽象接口的三角形类rectangle
class rectangle :shape
{
public:rectangle() { h = 2.5; k = 3.6; area = 0; };~rectangle() {};void draw();double get_area();void calculate_area();
private:double h;double k;
};	void rectangle::draw()
{cout << "draw rectangle class" << endl;
}double rectangle::get_area()
{return area;
}void rectangle::calculate_area()
{area = h*k / 2;
}//继承形状抽象接口的圆形类circle
class circle :shape
{
public:circle() { r = 4.8; area = 0; };~circle() {};void draw();double get_area();void calculate_area();
private:double r;
};void circle::draw()
{cout << "draw circle class" << endl;
}double circle::get_area()
{return area;
}void circle::calculate_area()
{area = 3.14*r*r;
}//颜色抽象类接口color
class color
{
public:color() {};virtual ~color() {};virtual void fill()=0;enum color_type { red, green };
};//继承颜色抽象类的红色类red
class red :color
{
public:red() {};~red() {};void fill() { cout << "fill red color" << endl; };
};//继承颜色抽象类的绿色类green
class green :color
{
public:green() {};~green() {};void fill() { cout << "fill green color" << endl; };
};//抽象类工厂abstractfactory
class abstractfactory
{
public:abstractfactory() {};virtual ~abstractfactory() {};virtual shape* getshape(shape::shape_type type)=0;virtual color* getcolor(color::color_type type)=0;enum factory_type{tshape,tcolor};
};//继承抽象工厂的形状工厂shapefactory
class shapefactory:abstractfactory
{
public:shapefactory() {};virtual ~shapefactory() {};shape* getshape(shape::shape_type type);color* getcolor(color::color_type type) { return NULL; };
};shape* shapefactory::getshape(shape::shape_type type)
{switch (type){case shape::rectangle:return (shape*)new rectangle();case shape::circle:return (shape*)new circle();default:return NULL;}
}//继承抽象工厂的颜色工厂colorfactory
class colorfactory :abstractfactory
{
public:colorfactory() {};virtual ~colorfactory() {};shape* getshape(shape::shape_type type) { return NULL; };color* getcolor(color::color_type type);
};color* colorfactory::getcolor(color::color_type type)
{switch (type){case color::red:return (color*)new red();case color::green:return (color*)new green();default:return NULL;}
}//工厂创造器类factoryproduct,通过传递颜色或形状信息来获取工厂
class factoryproduct
{
public:factoryproduct() {};~factoryproduct() {};abstractfactory* getfactory(abstractfactory::factory_type type);
};abstractfactory* factoryproduct::getfactory(abstractfactory::factory_type type)
{switch (type){case abstractfactory::tshape:return (abstractfactory*)new shapefactory();case abstractfactory::tcolor:return (abstractfactory*)new colorfactory();default:return NULL;}
}#endif
//test.cpp
/****************************************************/
#include <iostream>
#include <string>
#include "AbstractFactory.h"
int main()
{factoryproduct facput;abstractfactory *slfactory = facput.getfactory(abstractfactory::tshape);shape *k1 = slfactory->getshape(shape::rectangle);k1->draw();k1->calculate_area();cout << "area: " << k1->get_area() << endl;shape *k2 = slfactory->getshape(shape::circle);k2->draw();k2->calculate_area();cout << "area: " << k2->get_area() << endl;delete slfactory;slfactory = NULL;delete k1;k1 = NULL;delete k2;k2 = NULL;slfactory = facput.getfactory(abstractfactory::tcolor);color *k3 = slfactory->getcolor(color::red);k3->fill();color *k4 = slfactory->getcolor(color::green);k4->fill();delete slfactory;slfactory = NULL;delete k3;k3 = NULL;delete k4;k4 = NULL;return 0;
}

运行结果
在这里插入图片描述

要点总结

  • 如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式,这时候使用简单的工广完全可以。
  • “系列对象”指的是在某一特定系列下的对象之间有相互依赖、或作用的关系。不同系列的对象之间不能相互依赖。
  • Abstract Factory模式主要在于应对“新系列”的需求变动。其缺点在于难以应对“新对象”的需求变动。
http://www.laogonggong.com/news/21501.html

相关文章:

  • 做网站PPPOE网络可以吗自己怎么做一个网页
  • 做海报的网站小白qqcpa推广平台
  • 帮做网站设计与规划作业六年级上册数学优化设计答案
  • 菜单 wordpress西安seo公司哪家好
  • 网站后台发文章图片链接怎么做长尾关键词是什么
  • 惠州市人民政府门户网站百度视频下载
  • 上海技术做网站绍兴seo排名
  • 建材外贸网站建设网络推广和运营的区别
  • 个人优惠券网站怎么做网站运营课程
  • 做付费推广是网站好还是单页面好优化设计六年级上册数学答案
  • 网站建设项目总结上海高端seo公司
  • 潍坊发布最新疫情通报宁波seo网站推广
  • wordpress uploads搜索引擎优化的核心是
  • 武义县建设局网站软文大全500篇
  • 如何用源代码建设网站seo网络推广经理
  • 合肥高端网站建设公司哪家好完整企业网站模板
  • 建筑网站接单在线种子资源网
  • 企业网站托管公司大数据精准营销的策略
  • 接单网app下载安装seo上海推广公司
  • 做直播信号网站专业的seo排名优化
  • 做动态的网站的参考资料有哪些厦门网
  • 高质量外链网站抚州网站seo
  • wordpress 维护代码su搜索引擎优化
  • 平顶山哪里做网站全球搜钻是什么公司
  • 河源城乡规划建设局网站百度网页制作
  • 益阳 网站制作维护沪深300指数是什么意思
  • 保定投递网站建设百度搜索引擎广告
  • 网络运营公司经营范围杭州seo搜索引擎优化公司
  • 单位网站建设 管理制度网站建设培训
  • 网站建设需求指引如何做网络推广