设计模式-过滤器模式

过滤器模式(Filter Pattern)

基本概念:

过滤器模式用于在一个列表(或其他容器)中,有条件的过滤一组对象。在容器中存放一组对象,按照事先约定好的规则,从这一组对象中返回一个个体或满足相应规则的子集合。

具体应用举例:

例如车库里停放着一定数量的汽车,有BENZ,BMW,AUDI,LEXUS等,车型有SUV,MPV, JEEP, VAN等,司机性别有男,有女。这个时候,我们想列出一个表格,表格里免得车牌全部都是BENZ。这个时候就可以使用过滤器模式进行BENZ品牌汽车的过滤。

上代码:

//待分类对象

//H

#pragma once

#include <iostream>

#include <string>

#include <assert.h>

 

using namespace std;

 

class Car

{

public:

   Car(string brand, string model,string gender);

   ~Car(void);

public:

   string getBrand();

   string getModel();

   string getGender();

private:

   string _brand;//car brand,BENZ, BMW, AUDI, LUXES

   string _model;//car model,SUV, MPV, JEEP, VAN

   string _gender;//drivergender, male, female

};

//CPP

#include "Car.h"

 

//CONSTRUCTOR

Car::Car(string brand,string model, string gender)

{

   assert(!brand.empty() && !model.empty()&& !gender.empty());

   _brand = brand;

   _gender = gender;

   _model = model;

}

 

//DESTRUCTOR

Car::~Car(void)

{

}

 

string Car::getBrand()

{

   return _brand;

}

 

string Car::getGender()

{

   return _gender;

}

 

string Car::getModel()

{

   return _model;

}

 

//过滤器

//H

#pragma once

#include "Filter.h"

 

class BENZFilter: publicFilter

{

public:

   BENZFilter(void);

   ~BENZFilter(void);

   vector<Car> filter(vector<Car> s);

};

 

//CPP

#include "BENZFilter.h"

 

 

BENZFilter::BENZFilter(void)

{

}

 

BENZFilter::~BENZFilter(void)

{

}

 

vector<Car> BENZFilter::filter(vector<Car>s)

{

   vector<Car> temp;

   for(vector<Car>::iterator car=s.begin();car!=s.end(); car++)

   {

      if((*car).getBrand() == "BENZ")

         temp.push_back(*car);

   }

   return temp;

}

//验证

#include <iostream>

#include "Car.h"

#include "BENZFilter.h"

#include "Filter.h"

 

 

int main()

{

   cout<<"Filter Pattern"<<endl;

 

   vector<Car> carlist;

   vector<Car> benzlist;


   Car* car1 = new Car("BENZ", "SUV","Male");

   Car* car2 = new Car("AUDI", "VAN","Female");

   Car* car3 = new Car("BENZ", "SUV","Female");

   Car* car4 = new Car("BMW", "SUV","Male");

   carlist.push_back(*car1);

   carlist.push_back(*car2);

   carlist.push_back(*car3);

   carlist.push_back(*car4);

   for(vector<Car>::iterator s=carlist.begin();s!=carlist.end(); s++)

   {

      cout<<"car: "<<(*s).getBrand()<<""<<(*s).getGender()<<" "<<(*s).getModel()<<""<<endl;

   }

 

   BENZFilter* filter = new BENZFilter();

   benzlist = filter->filter(carlist);

   cout<<"BENZ LIST:"<<endl;

   for(vector<Car>::iterator benz=benzlist.begin();benz!=benzlist.end(); benz++)

   {

      cout<<"car: "<<(*benz).getBrand()<<""<<(*benz).getGender()<<" "<<(*benz).getModel()<<""<<endl;

   }

 

}

猜你喜欢

转载自blog.csdn.net/tecsai/article/details/78168281
今日推荐