#include "Factory.h"
#include <stdlib.h>
#include "AbstractFactory.h"
#include "Builder.h"
#include "prototype.h"
#include <memory>
//工厂模式:定义一个创建对象的接口,让子类决定实例化哪一个类
void test_Factory(){
Creator *p = new ConcreateCreator();
ConcreateProduct* pro = ( ConcreateProduct* )p->FactoryMethod();
pro->fly();
pro->run();
delete pro;
delete p;
//system( "pause" );
}
//工厂模式,模板的实现,可以替换原工厂模式。
#include "Factory_Template.h"
void main_Factory()
{
std::shared_ptr<ShapeFT> circle = FactoryFT<CirleFT>::Creator();
circle->draw();
circle = FactoryFT<RectangleFT>::Creator();
circle->draw();
}
int test_abstractFactory(){
// 生产产品A的第一种实现
ConcreateFactory1 *pFactory1 = new ConcreateFactory1;
AbstractProductA *pProductA = pFactory1->CreateProductA();
// 生产产品B的第二种实现
ConcreateFactory2 *pFactory2 = new ConcreateFactory2;
AbstractProductB *pProductB = pFactory2->CreateProductB();
delete pFactory1;
delete pProductA;
delete pFactory2;
delete pProductB;
return 0;
}
//工厂模式+反射 实现抽象工厂模式
#include "AbstractFactory2.h"
//注册。不能在头文件中注册。
REGISTER( ConcreateProduct_A1 );
void test_abstractFactory2()
{
ConcreateProduct_A1 *a1 = ( ConcreateProduct_A1 * )Factory_2::getInstance().getClassByName( "ConcreateProduct_A1" );
delete a1;
}
int test_Builder()
{
Builder * pBuilder1 = new ConcreateBuilder1;
//pBuilder1->BuilderPartA();
Director * pDirector1 = new Director( pBuilder1 );
pDirector1->Construct();
Builder * pBuilder2 = new ConcreateBuilder2;
Director * pDirector2 = new Director( pBuilder2 );
pDirector2->Construct();
delete pDirector1;
delete pDirector2;
return 0;
}
int test_prototype()
{
Prototype* pPrototype1 = new ConcreatePrototype1();
Prototype* pPrototype2 = pPrototype1->Clone();
Prototype* pPrototype3 = new ConcreatePrototype2();
Prototype* pPrototype4 = pPrototype3->Clone();
delete pPrototype1;
delete pPrototype2;
delete pPrototype3;
delete pPrototype4;
return 0;
}
#include "Adapter.h"
int main_Adapter()
{
Adaptee *pAdaptee = new Adaptee;
Target *pTarget = new Adapter( pAdaptee );
pTarget->Request();
delete pTarget;
return 0;
}
//桥接模式
#include "Bridge.h"
#include <stdlib.h>
int main_Bridge()
{
ConcreateImplementorA *pImplA = new ConcreateImplementorA();
Abstraction *pAbstraction1 = new Abstraction( pImplA );
pAbstraction1->Operation();
ConcreateImplementorB *pImplB = new ConcreateImplementorB();
Abstraction *pAbstraction2 = new Abstraction( pImplB );
pAbstraction2->Operation();
delete pAbstraction1;
delete pAbstraction2;
system( "pause" );
return 0;
}
#include "Composite.h"
#include <stdlib.h>
int main_Composite()
{
Leaf *pLeaf1 = new Leaf();
Leaf *pLeaf2 = new Leaf();
Composite* pComposite = new Composite;
pComposite->Add( pLeaf1 );
pComposite->Add( pLeaf2 );
pComposite->Operation();
pComposite->GetChild( 2 )->Operation();
delete pComposite;
return 0;
}
#include "Decorator.h"
#include <stdlib.h>
int main_Decorator()
{
// 初始化一个Component对象
Component2* pComponent = new ConcreateComponent();
// 采用这个Component对象去初始化一个Decorator对象,
// 这样就可以为这个Component对象动态添加职责
Decorator* pDecorator = new ConcreateDecorator( pComponent );
pDecorator->Operation();
delete pDecorator;
system( "pause" );
return 0;
}
#include "Decorator_2.h"
void main_Decorator2()
{
hero* he = new BlindMonk( "gai" );
Skills* skills = new Skills( he );
Skill_q* r = new Skill_q( skills, "猛龙摆尾" );
Skill_q* e = new Skill_q( r, "天雷破/摧筋断骨" );
Skill_q* w = new Skill_q( e, "金钟罩/铁布衫" );
Skill_q* q = new Skill_q( w, "天音波/回音击" );
q->learnSkills();
}
//装饰器模式:咖啡实例
#include "Decorator3.h"
void main_Decorator3()
{
std::shared_ptr<Beverage> coffce = std::make_shared<Coffee>( "浓缩咖啡" );
std::cout << coffce->getDescription() << ":$" << coffce->cost() << std::endl;
coffce = std::make_shared<Sugar>( coffce );
double d_cost = coffce->cost();
std::string des = coffce->getDescription();
std::cout << des << ":$" << d_cost << std::endl;
coffce = std::make_shared<Milk>( coffce );
std::cout << coffce->getDescription() << ":$" << coffce->cost() << std::endl;
}
#include "Proxy2.h"
void main_Proxy2()
{
Image *image = new ProxyImage( "test_10.jpg" );
image->display();
std::cout << std::endl;
image->display();
delete image;
}
#include "TemplateMethod2.h"
void main_Tempalate2()
{
Game* game = new Cricket();
game->play();
std::cout << std::endl;
delete game;
game = new Football();
game->play();
delete game;
/*Football* ggame = new Football();
ggame->play();
delete ggame;*/
}
#include "ChainOfResponsibility.h"
#include <stdlib.h>
int main_ChainOR()
{
Handler *p1 = new ConcreateHandler1();
Handler *p2 = new ConcreateHandler2( p1 );
p2->HandleRequset();
delete p2;
return 0;
}
/*
#include "FlyWeight.h"
int main_Flyweight()
{
FlyweightFactory flyweightfactory;
flyweightfactory.GetFlyweight( "hello" );
flyweightfactory.GetFlyweight( "world" );
flyweightfactory.GetFlyweight( "hello" );
//system( "pause" );
return 0;
}*/
/*
#include "Flyweight2.h"
#include <time.h>
#include <stdlib.h>
void main_Flyweight2()
{
std::string color[] = { "Red", "Green", "Blue", "White", "Black" };
srand((int)time(0));
auto f = []( int m, int n )->int{ return ( rand() % ( n - m + 1 ) + m ); };
ShapeFactory shapeFactory;
for ( int i = 0; i < 20; i++ )
{
Circle* circle = ( Circle * )shapeFactory.GetShape( color[ f( 0, 4 ) ] );
circle->setX( f( 0, 100 ) );
circle->setRadius( 100 );
circle->setY( f( 0, 100 ) );
circle->Draw();
}
}*/
#include "Command.h"
#include <stdlib.h>
int main_Command()
{
Receiver* pReceiver = new Receiver();
Command* pCommand = new ConcreateComand( pReceiver );
Invoker* pInvoker = new Invoker( pCommand );
pInvoker->Invoke();
delete pInvoker;
return 0;
}
#include "Command2.h"
void main_Command2()
{
Stock *stock = new Stock( "ak", 100 );
Order* pbuy = new BuyStock( stock );
Order* psell = new SellStock( stock );
Broker* pbroker = new Broker();
pbroker->takeOrder( pbuy );
pbroker->takeOrder( psell );
pbroker->placeOrder();
delete pbroker;
delete stock;
std::cout << "pause\n";
}
#include "Observer.h"
#include <iostream>
int main_Observer()
{
Observer *p1 = new ConcreateObserver();
Observer *p2 = new ConcreateObserver();
SubjectOb* p = new ConcreateSubject();
p->Attach( p1 );
p->Attach( p2 );
p->SetState( 4 );
p->Notify();
p->Detach( p1 );
p->SetState( 10 );
p->Notify();
delete p;
return 0;
}
#include "Strategy.h"
#include <memory>
void main_Strategy()
{
//std::shared_ptr<T> p1 = std::make_shared<T>();
std::shared_ptr<Context> context = std::make_shared<Context>( new OperationAdd() );
//context = new Context( new OperationAdd() );
std::cout << "10 + 5 = " << context->executeStategy( 10, 5 ) << std::endl;
context->setStategy(new OperationSub() );
std::cout << "10 - 5 = " << context->executeStategy( 10, 5 ) << std::endl;
}
#include "State.h"
/*智能指针的问题*/
void main_State()
{
std::shared_ptr<Contexts> context = std::make_shared<Contexts>();
std::shared_ptr<StartState>startstate = std::make_shared<StartState>();
startstate->doAction( context );
printf( "startstate : 0x%x\n", startstate.get() );
printf( "context : 0x%x\n", context.get() );
std::cout <<startstate.use_count()<<" "<< context->getState()->toString();
/*std::shared_ptr<StopState> stopstate = std::make_shared<StopState>();
std::shared_ptr<StopState> stopstate1 = stopstate;
/ *StopState* stopstate = new StopState();
StopState* stopstate1 = stopstate;* /
stopstate->doAction( context );
//std::cout << stopstate.u
没有合适的资源?快使用搜索试试~ 我知道了~
C++源码实现:21种常用设计模式
共447个文件
obj:52个
h:31个
cpp:30个
3星 · 超过75%的资源 需积分: 49 90 下载量 128 浏览量
2018-09-07
15:13:15
上传
评论 8
收藏 53.51MB ZIP 举报
温馨提示
一直以来在设计模式的学习中,都是出现java的源码,这对学习C++的极度不友好。本工程是基于C++实现21种常用的设计模式,里面包含了实例代码和示例。编写的时候在学习C++11特性,所以代码风格可能不一致,一切交流为主。在vs2015+win10上已经完美运行。绝对实用绝对受益!设计模式的基础可以通过其他网站学习
资源推荐
资源详情
资源评论
收起资源包目录
C++源码实现:21种常用设计模式 (447个子文件)
005eca10fbb31736b79fa1bdef07fea407f625 755B
01356e369686cc5916f5f735342b7378357783 208KB
01e78022867cc089b4f07cd076b7d020edb543 422B
03cbbaaec4634887737cd7380d31c912478f9b 10KB
04d3491b5f4b4e0ccdcd96f336db6e978d7f00 785B
05319b2ae9a8e069f9699533130336812966e8 57KB
07360429bd811c48781900f0261b3085a3977d 931B
07b4fc48a146dd19f7f23ad298baba2e37d556 110KB
0871f5f2fdde85dd49ec30cea7833d68941a69 217B
08e005ca2816a8dd06760566a70eae121c09eb 970B
09f8774b1f69b4d296fbd25af57224a4bf42af 45B
0a62b2ee39a7f9525f6099935f06c5837e8854 130KB
0abee3eecf58c3852a591d706c608642cbb8b9 708B
0adfa32ff61fbfa3e3d0a689c2e0a94b1269dd 16KB
0af26ad264e0224a93a4e3324b6304c190eb8e 331B
0b3f6d2e18d6efed1fde972fa779a0314247cd 118B
0ea87efc119a998d3418c69f59455003f51dd6 123KB
0ffd2344e610555258dc52293defa288ce315c 470B
1041ffa23a4d711753f8dc994e445bd12f5483 110KB
10a8e75d49847520d6ed2dac2ec1431c9b5f3a 15KB
11d4e72b42356c3762c2d0e1c65eeb4ce716e4 441B
15e0b0a52d5d1ba8165334adbf3bdbd7ed1b51 119B
160c13f8ea6b4628c5a6e8dd69fa96a04030d8 22KB
16ee6effec672478161a59c97ccabf8276e856 230KB
1740f77ba701fb24814b6356ccb07b27632c1a 231B
1743f8176566bae9189d390f7160c393d1b3cc 82KB
175ca4f687052f58823bf8d0e3a48ed05f234e 92KB
18130026730207585e0cb7aae5b1762f5a3a80 77KB
184dd69da41a38a5be292136d3de9f639f877b 248KB
1b0d0f1a86561dff49f57bf638abb2de9993ad 446B
1c2cb02436aae4ae1ba8333320b02a3a340154 53KB
1e2018e037e26377b7d7c31462d0208fb7757f 72KB
1ed751c971deb5861c4e387a0ca02b48aace3e 648B
1f087ba8c18b9a7f17d34f7091db9cc0f562da 796KB
1f49d452ff37a23d392bcdbf47dd8ddfbfa605 219KB
2449cbe2aace4883c67d481d5811e423b68938 57KB
24a0fce8369f6207acecfe1276e941c64d5298 178B
2518eec9fa7ec2af8a94c7b610ee660efb1996 486KB
256ed7516f506a895ef4d6d2f84c871a686873 398B
268590e03ed6b83aba001700347b25cc2cf894 683B
268c528e7698dbeff1f526d68250f63521c7b8 203B
29ef007853958b692effa24e8a39437d117552 16KB
2ac8f1da3cabec1f040c68406fba0646a19f7d 728B
2afabca522c0b5b132010c0e70461da34ac879 16KB
2c5edc4676fb55eb52fdba62a6c1b5ba4658ac 624B
2cb1cdc55afee8a4860e76392d53beb343fd3c 884B
2d72011a59df872e8ff7a6a5680153941aa6c5 192B
2d982e3a747fc454a14b80c44352b1b5898aa8 292B
333f5548b64c2187d2e1030bbaf872312b1dc2 76KB
39360377654a3f28b5482b0f054c4c1a99d3ed 1KB
39ab553a06bd20eaa9a4d696f0d1667a88e07f 47B
3a325ab59bab7ba8df8ff84b7c2f4192fd49f1 250B
3a8cd07521aa8d62489f74a6d3a276a6431c45 62KB
3bb03ceea54a7ed49147d0c5217921cffee14f 364B
3c190fe43b4a29af48fc20d8f9677282af97c1 54KB
3c5b5f33e4de973e383cac220036aecb385504 419B
3ced3a441b1bf74195b5b272f8786cc8eb54f4 318B
3fb1bfc304cc47c621ffa173355456bc5cb6f1 59KB
3fbfd3ad8f36f6a22bb41e8c835eb8f7eb07dd 47B
4021e20e89833ecb2214362b02f8880b432a84 28KB
4039a01d783ae4aae7bb5920d84267434cb173 553B
40b95ec96da880810ab5d2a71ef38534a3c6d8 1KB
40fab28a0cabb799c24b24dccf6d5c53a47d8b 199B
41fd5e33c14ab5f0d6acd4806ab45ee6ad7f0c 17KB
4344b5b633cf6347380b46cf47f53310d40232 215B
4351fd7fe8f502296c466a1832110024dde2b9 381B
43707a888473846c4808625b491ea6d46ab8f6 17KB
437d230de154e19db65755e24cc694753822e7 143KB
43ec6a340c160b51975dce7646f3b533a803af 16KB
444a93fac1923a4ff148d12e7c95ce20c66489 321B
45f4ca8ec6ddb20ab9d2ffbf029259c27fd9a1 742KB
4706681bf6e486265970d1ec545a329697a6c7 126KB
47b91a1977131713a4cd5d8459aad7e5ad7ba1 45B
48f43226af8fd1885feaf49070fbc7e0ec556c 1KB
4ad2115e1df08e9c3aa3515184fdafc462d86f 22KB
4d739daca1b3acdf3cdfd3403b8a6e0768dfff 370B
4d98cc79c4574a59cad2635fc19302baa87d6e 831B
4da5370ec62177b6a95373699da8d1249aa270 119B
4f44c0ed0fb3b4f30bee346e017241a3af4c22 181KB
4f7e614fb2279852a17eb32f79d6d0787ee8e9 49B
500ba93dcd99881cb4e1e7f359cecff5529eb3 332B
53cf44a615967c23707a9146680329f949820d 2KB
5629c488a9607f5681ff296e17a026b0e10152 170B
5669b0a717d5a65ea8d8c568aeedb40610e253 218KB
56988412ae361b4dbac29ab28120d502ff991b 16KB
56fe5b53ef8d2290e115617fdb54373f96a92b 201B
58dd643e54b2f6b1f2a02bccb2b1019a77e238 439B
59a8463d6994ca6dbff71527a55b7edec4aba2 244B
5aa8b6959fbe2f45edf4bcb42edc776f85266c 1KB
5bdc02d840f626f690af6c42cde82447ae6e21 56KB
5ccc77ebf2b2002f899f3df4915c399c25f2e5 470KB
5cf0d9c9379141a0e2212a27538a38c25e8604 272KB
5d1bfac65914fba8b84be29596ac2f6401ee2b 15KB
5daac107b0784bfcfbe621e8369b93819509eb 17KB
5e21feed22eab04fefb4ef979547e9a1e92894 69KB
5f472f6cfadf85b4cf83031c60fa5dfa718d53 24KB
6016c754cf593a8f5509b4c5d6f671fb231d1b 77KB
60c957ab9240d672f9987ad45c6c0586d25a8b 19KB
621b596306735b413b6404e1308263b66c5981 4KB
62eead96db132965c8bb8aaaab3698e45914c5 479KB
共 447 条
- 1
- 2
- 3
- 4
- 5
资源评论
- Elvis582018-10-14资源打不开
- 膜拜别人不如完美自己2019-07-02写的很棒,正是我想要的
面向上司编程
- 粉丝: 23
- 资源: 32
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功