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

国外网站建设嫣语赋刚刚突发1惊天大事

国外网站建设嫣语赋,刚刚突发1惊天大事,登不上学校的网站该怎么做,唐山公司做网站定义 提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。 使用场景 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种…

定义

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

使用场景

  • 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。
  • 如何应对这种变化?如何绕过常规的对象创建方法(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.shuangfujiaoyu.com/news/33671.html

相关文章:

  • 常州网站建设要多少钱长春seo招聘
  • 市场营销策略的内容专业seo站长工具
  • wordpress插件audio playerseo职位要求
  • 南通做网站哪家好免费推广软件下载
  • wordpress别名免费的关键词优化软件
  • onedrive 做网站静态服装市场调研报告范文
  • 邯郸网站建设的地方50篇经典软文100字
  • 团中央建设的未成年专属网站是315影视行业
  • 郑州网站建设公司谷雨seo优化内容
  • 怎么做非法彩票网站seo排名赚app官网
  • 江西省新的建设厅三类人员网站四川疫情最新消息
  • 电脑什么网站可以做长图攻略河北seo
  • 企业网站优化搜行者seo北京网站seo设计
  • 杭州网站设计推荐柚米友情链接交易购买
  • 山东省建设注册管理网站百度云盘搜索
  • 淄博网站快照优化公司网络营销与策划实践报告
  • wordpress网站seo系统
  • 胶州网站建设电话seo用什么工具
  • 哪些大型网站用python做的推广引流软件
  • 官方网站的重要性seo引流什么意思
  • 网站开发原型 图推广普通话心得体会
  • 个人做商贸网站域名是什么 有什么用
  • wordpress 宋体seo工具不包括
  • 设计网站 知乎昆明百度关键词优化
  • pdf动态网站开发深圳市昊客网络科技有限公司
  • 网站访问频率外贸seo是啥
  • 装置艺术那个网站做的好windows优化大师如何卸载
  • 广州网站 制作信科便宜如何在百度搜索到自己的网站
  • 网站建设网络推广可以搜索国外网站的搜索引擎
  • 惠州网站建设点上海专业seo排名优化