Академический Документы
Профессиональный Документы
Культура Документы
20.05.2013 .
ADAPTER
Adapter
, .
Wrapper ().
class Circle {
public:
! virtual void draw();
! virtual double area();
! // ....
};
void reallyCoolThing(Circle *);
void amazingStuff(Circle *);
class Circle {
public:
! virtual void draw();
! virtual double area();
! // ....
};
void reallyCoolThing(Circle *);
void amazingStuff(Circle *);
class OldAndRustyCircle {
! void draw_me();
! void get_area_and_circumference(double *result,
double *circum);
};
class Circle {
public:
! virtual void draw();
! virtual double area();
! // ....
};
void reallyCoolThing(Circle *);
void amazingStuff(Circle *);
class OldAndRustyCircle {
! void draw_me();
! void get_area_and_circumference(double *result,
double *circum);
};
: (
).
: (
).
: :
class NewAndShinyCircle : public Circle, OldAndRustyCircle.
: (
).
: :
class NewAndShinyCircle : public Circle, OldAndRustyCircle.
BRIDGE
, ,
.
class Window {
public:
! void drawText();
! void drawRect();
};
class DialogWindow : public Window {
! // ...
};
class TransientWindow : public Window {
! // ...
};
// OSXWindow, Win32Window, X11Window, ...
class WindowImp {
public:
! virtual void _drawText();
! virtual void _drawLine();
};
class X11WindowImp: public WindowImp {
public:
! void _drawText() {
XDrawString(/*...*/); }
! void _drawLine() {
XDrawLine(/*...*/); }
};
class Window {
private:
! WindowImp *imp;
! // .....
};
Window
imp
DialogWindow
TransientWindow
WindowImp
X11WindowImp
OSXWindowImp
().
().
().
().
().
( ).
COMPOSITE
-.
, .
class GraphicsObject {
public:
! virtual void draw();
};
class Rectangle : public GraphicsObject {
! // ...
};
class Ellipse : public GraphicsObject {
! // ...
};
class CompositeObject : public GraphicsObject {
! std::vector<GraphicsObject *> objects;
public:
! void add(GraphicsObject *obj);
!
!
void draw() {
! std::vector<GraphicsObject *>::iterator q;
!
!
!
!
!
}
! // ....
};
(GraphicsObject ).
DECORATOR
class VisualComponent {
public:
! virtual void draw();
};
class TextView : public VisualComponent {
! // ....
};
, (
).
, (
).
!= .
, (
).
!= .
== .
, (
).
!= .
== .
, (
).
!= .
== .
(VisualComponent) .
, (
).
!= .
== .
(VisualComponent) .
, ,
.
FACADE
(
)
.
class Scanner {
public:
! Scanner(istream &);
! virtual ~Scanner();
class ProgramNode {
public:
! virtual void getSourcePosition(int &line, int &col);
! virtual void traverse(CodeGenerator &);
! // ....
};
class Parser {
public:
! Parser();
! virtual ~Parser();
class CodeGenerator {
public:
! virtual void visit(StatementNode *);
! virtual void visit(ExpressionNode *);
};
class ProgramNodeBuilder {
public:
! ProgramNodeBuilder();
!
!
!
!
virtual
virtual
virtual
virtual
ProgramNode *rootNode();
! // ....
};
void
void
void
void
ProgramNode
ProgramNode
ProgramNode
ProgramNode
class Compiler {
public:
! Compiler();
!
!
!
!
parser.parse(scanner, builder);
!
!
!
!
};
!
!
!
}
IntelCodeGenerator generator(output);
ProgramNode *parseTree = builder.rootNode();
parseTree->traverse(generator);
FLYWEIGHT
class Validator {
public:
! virtual bool validateString(std::string const &str);
};
class IntValidator {
public:
! IntValidator(int min = INT_MIN, int max = INT_MAX);
! virtual bool validateString(std::string const &str);
};
class DoubleValidator {
public:
! DoubleValidator(double min = -DBL_MAX, double max = DBL_MAX);
! virtual bool validateString(std::string const &str);
};
class ValidatorPool {
public:
! Validator *getValidator(const char *name,
const std::string ¶m1,
const std::string ¶m2);
};
, :
, .
.
PROXY
class Graphic {
public:
! virtual void draw();
! Rect getExtent() const;
! // .....
};
class Image : public Graphic {
! // ....
};
class ImageProxy : public Graphic {
! std::string fileName;
! Rect extent;
public:
! void draw() {
! ! if (!image)
! ! ! image = loadImage(fileName);
! ! image->draw();
! }
!
!
!
!
!
! }
};