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

何使网站的页面结构更为合理建媒体代发布

何使网站的页面结构更为合理建,媒体代发布,顺德公司网站制作,小公司网站维护定义 提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类。 使用场景 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作。如何应对这种…

定义

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

使用场景

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

相关文章:

  • wordpress相册点击弹出框金华seo全网营销
  • 郑州手机网站建设搜狗网站收录提交入口
  • 清风网站建设抖音推广方式有哪些
  • 工作室网站开发广东网站seo营销
  • 广州正佳广场攻略深圳债务优化公司
  • 如何自己免费建网站seo网站有哪些
  • 南昌网站建设案例如何制作自己的链接
  • wordpress大流量专业的网站优化公司
  • 做进口零食批发网站百度站长管理平台
  • 网站栏目建设存在的问题关键词简谱
  • 网站备案怎么那么麻烦google chrome 网络浏览器
  • 小米手机做网站服务器nba东西部最新排名
  • 做写字楼用哪个网站更好郑州seo代理外包
  • 做网站 淘宝营销策划思路
  • 网页设计要用到什么软件聊城seo优化
  • 用wordpress做网站百度推广管理
  • 一个空间可以放两个网站吗html模板网站
  • 做试用网站的原理网站推广优化平台
  • 软件工程培训机构学费亚马逊seo什么意思
  • 做恶搞网站软件有哪些苏州seo怎么做
  • 怎么做微信小说网站企业网络营销策划方案
  • 网站后台上传图片失败百度下载免费安装最新版
  • 镇江做网站需要多少钱企业网站模板设计
  • 西安seo优化系统网页seo
  • 如何用网站模板做网站广州网络营销推广
  • 承德手机网站建设seo推广排名
  • wordpress块引用一个网站可以优化多少关键词
  • 360网站卖东西怎么做的无锡seo优化公司
  • 邢台人民网站百度视频推广怎么收费
  • 常州天启建设公司网站高端快速建站