├── cls
├── Adapter
│ ├── ISocialAdapter.cls
│ ├── Twitter.cls
│ └── TwitterAdapter.cls
├── Command
│ ├── PagamentoCommand.cls
│ ├── PagamentoBoleto.cls
│ ├── PagamentoCartao.cls
│ ├── Compra.cls
│ ├── Loja.cls
│ └── Main.cls
├── Iterator
│ ├── Aggregate.cls
│ ├── Iterator.cls
│ ├── EmpresaList.cls
│ ├── Main.cls
│ └── EmpresaListIterator.cls
├── Visitor
│ ├── Visitor.cls
│ ├── Visitable.cls
│ ├── EmpresaLista.cls
│ ├── Main.cls
│ └── Funcionario.cls
├── Decorator
│ ├── Cachaca.cls
│ ├── Refrigerante.cls
│ ├── Coquetel.cls
│ ├── Main.cls
│ └── CoquetelDecorator.cls
├── Flyweight
│ ├── SpriteFlyweight.cls
│ ├── Ponto.cls
│ ├── Imagem.cls
│ ├── Sprite.cls
│ ├── Main.cls
│ └── FlyweightFactory.cls
├── State
│ ├── PedidoAprovado.cls
│ ├── PedidoCarregado.cls
│ ├── PedidoCancelado.cls
│ ├── Main.cls
│ ├── PedidoState.cls
│ └── Pedido.cls
├── Mediator
│ ├── Mediator.cls
│ ├── IOSColleague.cls
│ ├── AndroidColleague.cls
│ ├── Colleague.cls
│ ├── Main.cls
│ └── MensagemMediator.cls
├── Strategy
│ ├── CalculaImposto.cls
│ ├── CalculoImpostoQuizeOuDez.cls
│ ├── CalculoImpostoVinteOuQuize.cls
│ ├── Main.cls
│ └── Funcionario.cls
├── FactoryMethod
│ ├── ModeloCarro.cls
│ ├── Gol.cls
│ ├── Uno.cls
│ ├── Focus.cls
│ ├── Carro.cls
│ ├── Main.cls
│ └── FabricaCarro.cls
├── TemplateMethod
│ ├── ConcreteClass.cls
│ ├── Main.cls
│ └── AbstractClass.cls
├── Composite
│ ├── Questao.cls
│ ├── ElementoDoQuestionario.cls
│ ├── Main.cls
│ └── Bloco.cls
├── ChainOfResponsability
│ ├── IDBanco.cls
│ ├── BancoA.cls
│ ├── BancoB.cls
│ ├── BancoC.cls
│ ├── BancoD.cls
│ ├── Main.cls
│ └── BancoChain.cls
├── Bridge
│ ├── IJanelaImplementada.cls
│ ├── Main.cls
│ ├── JanelaLinux.cls
│ ├── JanelaDialogo.cls
│ └── JanelaAbstrata.cls
├── Proxy
│ ├── Main.cls
│ ├── Usuario.cls
│ └── UsuarioProxy.cls
├── Memento
│ ├── TextoMemento.cls
│ ├── TextoCareTaker.cls
│ ├── Texto.cls
│ └── Main.cls
├── Observer
│ ├── DadosObserver.cls
│ ├── PorcentoObserver.cls
│ ├── TabelaObserver.cls
│ ├── Dados.cls
│ ├── Main.cls
│ └── DadosSubject.cls
├── Builder
│ ├── Main.cls
│ ├── Celular.cls
│ └── CelularBuilder.cls
├── Facade
│ ├── Main.cls
│ ├── api
│ │ └── terceiro
│ │ │ ├── SistemaDeImagem.cls
│ │ │ └── SistemaDeAudio.cls
│ └── SistemasFacade.cls
└── Prototype
│ ├── CarroPrototype.cls
│ ├── Main.cls
│ ├── PalioPrototype.cls
│ └── FiestaPrototype.cls
├── sc-list.txt
└── README.md
/cls/Adapter/ISocialAdapter.cls:
--------------------------------------------------------------------------------
1 | Class Adapter.ISocialAdapter [ Abstract ]
2 | {
3 |
4 | Method send(mensagem As %String) As %Status
5 | {
6 | }
7 |
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/cls/Command/PagamentoCommand.cls:
--------------------------------------------------------------------------------
1 | Class Command.PagamentoCommand Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Method processarCompra(compra As Compra)
5 | {
6 | }
7 |
8 | }
9 |
10 |
--------------------------------------------------------------------------------
/cls/Iterator/Aggregate.cls:
--------------------------------------------------------------------------------
1 | Class Iterator.Aggregate Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | ClassMethod create() As Iterator.Aggregate
5 | {
6 | quit ..%New()
7 | }
8 |
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/cls/Visitor/Visitor.cls:
--------------------------------------------------------------------------------
1 | Class Visitor.Visitor Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Method visit(visitor As Visitable) As %Status
5 | {
6 |
7 | quit $$$OK
8 | }
9 |
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/cls/Decorator/Cachaca.cls:
--------------------------------------------------------------------------------
1 | Class Decorator.Cachaca Extends Coquetel
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | Set ..nome = "cachaça"
7 | Set ..preco = 1.5
8 | Quit $$$OK
9 | }
10 |
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/cls/Flyweight/SpriteFlyweight.cls:
--------------------------------------------------------------------------------
1 | Class Flyweight.SpriteFlyweight Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Method desenharImagem(ponto As Ponto) As %Status
5 | {
6 | quit $$$OK
7 | }
8 |
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/cls/State/PedidoAprovado.cls:
--------------------------------------------------------------------------------
1 | Class State.PedidoAprovado Extends PedidoState
2 | {
3 |
4 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
5 | {
6 | Write !,"Aprovado."
7 | Quit $$$OK
8 | }
9 |
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/cls/State/PedidoCarregado.cls:
--------------------------------------------------------------------------------
1 | Class State.PedidoCarregado Extends PedidoState
2 | {
3 |
4 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
5 | {
6 | Write !,"Carregado."
7 | Quit $$$OK
8 | }
9 |
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/cls/Mediator/Mediator.cls:
--------------------------------------------------------------------------------
1 | Class Mediator.Mediator Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Method enviar(mensagem As %String, Colleague As Colleague) As %Status
5 | {
6 | quit $$$OK
7 | }
8 |
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/cls/State/PedidoCancelado.cls:
--------------------------------------------------------------------------------
1 | Class State.PedidoCancelado Extends PedidoState
2 | {
3 |
4 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
5 | {
6 | Write !,"Cancelado"
7 |
8 | Quit $$$OK
9 | }
10 |
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/cls/Strategy/CalculaImposto.cls:
--------------------------------------------------------------------------------
1 | Class Strategy.CalculaImposto Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Method calculaSalarioComImposto(funcionario As Funcionario) As %Double
5 | {
6 | Quit 0
7 | }
8 |
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/cls/Visitor/Visitable.cls:
--------------------------------------------------------------------------------
1 | Class Visitor.Visitable Extends %RegisteredObject
2 | {
3 |
4 | Method accept(visitor As Visitor.Visitor) As %Status
5 | {
6 | do visitor.visit( ##this )
7 | quit $$$OK
8 | }
9 |
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/cls/Adapter/Twitter.cls:
--------------------------------------------------------------------------------
1 | /// Classes de fictícia da API do Twitter.
2 | Class Adapter.Twitter Extends %RegisteredObject
3 | {
4 |
5 | Method send(mensagem As %String) As %Status
6 | {
7 | write mensagem
8 | }
9 |
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/cls/FactoryMethod/ModeloCarro.cls:
--------------------------------------------------------------------------------
1 | Class FactoryMethod.ModeloCarro Extends %RegisteredObject
2 | {
3 |
4 | Parameter FOCUS [ Final ] = 1;
5 |
6 | Parameter UNO [ Final ] = 2;
7 |
8 | Parameter GOL [ Final ] = 3;
9 |
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/cls/TemplateMethod/ConcreteClass.cls:
--------------------------------------------------------------------------------
1 | Class TemplateMethod.ConcreteClass Extends TemplateMethod.AbstractClass
2 | {
3 |
4 | Method exibirCodigo() As %Status
5 | {
6 | write !,"Código 1"
7 | quit $$$OK
8 | }
9 |
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/cls/Command/PagamentoBoleto.cls:
--------------------------------------------------------------------------------
1 | Class Command.PagamentoBoleto Extends PagamentoCommand
2 | {
3 |
4 | Method processarCompra(compra As Compra)
5 | {
6 | Write !,"Processando o boleto. - Valor:"_compra.getValor()
7 | }
8 |
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/cls/Command/PagamentoCartao.cls:
--------------------------------------------------------------------------------
1 | Class Command.PagamentoCartao Extends PagamentoCommand
2 | {
3 |
4 | Method processarCompra(compra As Compra)
5 | {
6 | Write !,"Processando no cartão. - Valor: "_compra.getValor()
7 | }
8 |
9 | }
10 |
11 |
--------------------------------------------------------------------------------
/cls/Composite/Questao.cls:
--------------------------------------------------------------------------------
1 | Class Composite.Questao Extends Composite.ElementoDoQuestionario
2 | {
3 |
4 | Method exibir() As %Status
5 | {
6 | write !,$$$FormatText( "Questão %1", ..descricao)
7 | quit $$$OK
8 | }
9 |
10 | }
11 |
12 |
--------------------------------------------------------------------------------
/cls/ChainOfResponsability/IDBanco.cls:
--------------------------------------------------------------------------------
1 | Class ChainOfResponsability.IDBanco Extends %RegisteredObject
2 | {
3 |
4 | Parameter BANCOuA = 1;
5 |
6 | Parameter BANCOuB = 2;
7 |
8 | Parameter BANCOuC = 3;
9 |
10 | Parameter BANCOuD = 4;
11 |
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/cls/FactoryMethod/Gol.cls:
--------------------------------------------------------------------------------
1 | Class FactoryMethod.Gol Extends Carro
2 | {
3 |
4 | ClassMethod criar() As Carro [ Final ]
5 | {
6 | Quit ..%New("1.0")
7 | }
8 |
9 | Method getInfo() [ Final ]
10 | {
11 | Quit "Gol - "_..potencia
12 | }
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/cls/FactoryMethod/Uno.cls:
--------------------------------------------------------------------------------
1 | Class FactoryMethod.Uno Extends Carro
2 | {
3 |
4 | ClassMethod criar() As Carro [ Final ]
5 | {
6 | Quit ..%New("1.4")
7 | }
8 |
9 | Method getInfo() [ Final ]
10 | {
11 | Quit "Uno - "_..potencia
12 | }
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/cls/FactoryMethod/Focus.cls:
--------------------------------------------------------------------------------
1 | Class FactoryMethod.Focus Extends Carro
2 | {
3 |
4 | ClassMethod criar() As Carro [ Final ]
5 | {
6 | Quit ..%New("2.0")
7 | }
8 |
9 | Method getInfo() [ Final ]
10 | {
11 | Quit "Focus - "_..potencia
12 | }
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/cls/Iterator/Iterator.cls:
--------------------------------------------------------------------------------
1 | Class Iterator.Iterator Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Method first()
5 | {
6 | }
7 |
8 | Method next()
9 | {
10 | }
11 |
12 | Method isDone()
13 | {
14 | }
15 |
16 | Method currentItem()
17 | {
18 | }
19 |
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/cls/Bridge/IJanelaImplementada.cls:
--------------------------------------------------------------------------------
1 | Class Bridge.IJanelaImplementada Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Method desenharJanela(titulo As %String) As %Status
5 | {
6 | }
7 |
8 | Method desenharBotao(rotulo As %String) As %Status
9 | {
10 | }
11 |
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/cls/Decorator/Refrigerante.cls:
--------------------------------------------------------------------------------
1 | Class Decorator.Refrigerante Extends CoquetelDecorator
2 | {
3 |
4 | Method %OnNew(coquetel As Coquetel) As %Status
5 | {
6 | Do ##super( coquetel )
7 | Set ..nome ="Refrigerante"
8 | Set ..preco = 1.0
9 |
10 | Quit $$$OK
11 | }
12 |
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/cls/Command/Compra.cls:
--------------------------------------------------------------------------------
1 | Class Command.Compra Extends %RegisteredObject
2 | {
3 |
4 | Property valor As %Double [ Private ];
5 |
6 | Method setValor(valor As %Double)
7 | {
8 | Set ..valor = valor
9 | }
10 |
11 | Method getValor() As %Double
12 | {
13 | Quit ..valor
14 | }
15 |
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/cls/Flyweight/Ponto.cls:
--------------------------------------------------------------------------------
1 | Class Flyweight.Ponto Extends %RegisteredObject
2 | {
3 |
4 | Property x As %Integer;
5 |
6 | Property y As %Integer;
7 |
8 | Method %OnNew(x As %Integer, y As %Integer) As %Status [ Private ]
9 | {
10 | set ..x = x
11 | set ..y = y
12 | quit $$$OK
13 | }
14 |
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/cls/Command/Loja.cls:
--------------------------------------------------------------------------------
1 | Class Command.Loja Extends %RegisteredObject
2 | {
3 |
4 | Method executarCompra(valor As %Double, formaDePagamento As PagamentoCommand)
5 | {
6 | Set compra = ##class(Compra).%New()
7 | Do compra.setValor( valor )
8 | Do formaDePagamento.processarCompra( compra )
9 | }
10 |
11 | }
12 |
13 |
--------------------------------------------------------------------------------
/cls/Proxy/Main.cls:
--------------------------------------------------------------------------------
1 | Class Proxy.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | set usuario = ##class(UsuarioProxy).%New()
7 |
8 | write !,usuario.getNumeroDeUsuarios()
9 | write !,usuario.getUsuariosConectados()
10 |
11 | quit $$$OK
12 | }
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/cls/Bridge/Main.cls:
--------------------------------------------------------------------------------
1 | Class Bridge.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | #dim janela As JanelaAbstrata;
7 | set janela = ##class(JanelaDialogo).%New( ##class(JanelaLinux).%New() )
8 | do janela.desenhar()
9 |
10 |
11 | quit $$$OK
12 | }
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/cls/Bridge/JanelaLinux.cls:
--------------------------------------------------------------------------------
1 | Class Bridge.JanelaLinux Extends IJanelaImplementada
2 | {
3 |
4 | Method desenharBotao(rotulo As %String) As %Status
5 | {
6 | write !,rotulo_" - Botão Linux"
7 | }
8 |
9 | Method desenharJanela(titulo As %String) As %Status
10 | {
11 | write !,titulo_" - Janela Linux"
12 | }
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/cls/Memento/TextoMemento.cls:
--------------------------------------------------------------------------------
1 | Class Memento.TextoMemento Extends %RegisteredObject
2 | {
3 |
4 | Property texto As %String [ Private ];
5 |
6 | Method %OnNew(texto As %String) As %Status
7 | {
8 | set ..texto = texto
9 | quit $$$OK
10 | }
11 |
12 | Method getTexto() As %String
13 | {
14 | quit ..texto
15 | }
16 |
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/cls/Visitor/EmpresaLista.cls:
--------------------------------------------------------------------------------
1 | Class Visitor.EmpresaLista Extends (%ListOfDataTypes, Visitor.Visitable)
2 | {
3 |
4 | Method accept(visitor As Visitor.Visitor) As %Status
5 | {
6 | do visitor.visit( ##this )
7 | quit $$$OK
8 | }
9 |
10 | Storage Custom
11 | {
12 | %Library.CompleteCustomStorage
13 | }
14 |
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/cls/Decorator/Coquetel.cls:
--------------------------------------------------------------------------------
1 | Class Decorator.Coquetel Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Property nome As %String [ Private ];
5 |
6 | Property preco As %Double [ Private ];
7 |
8 | Method getNome() As %String
9 | {
10 | Quit ..nome
11 | }
12 |
13 | Method getPreco() As %Double
14 | {
15 | Quit ..preco
16 | }
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/cls/Observer/DadosObserver.cls:
--------------------------------------------------------------------------------
1 | Class Observer.DadosObserver Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Property dados As DadosSubject;
5 |
6 | Method %OnNew(dados As DadosSubject) As %Status
7 | {
8 | set ..dados = dados
9 | quit $$$OK
10 | }
11 |
12 | Method update() As %Status
13 | {
14 | quit $$$OK
15 | }
16 |
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/cls/TemplateMethod/Main.cls:
--------------------------------------------------------------------------------
1 | Class TemplateMethod.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status [ Private ]
5 | {
6 | set concrete = ##class(ConcreteClass).%New()
7 | do concrete.exibirCodigo()
8 | do concrete.exibirNome()
9 | do concrete.exibirNomeECodigoJuntos()
10 |
11 | quit $$$OK
12 | }
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/sc-list.txt:
--------------------------------------------------------------------------------
1 | Adapter.pkg
2 | Bridge.pkg
3 | Builder.pkg
4 | ChainOfResponsability.pkg
5 | Command.pkg
6 | Composite.pkg
7 | Decorator.pkg
8 | Facade.pkg
9 | FactoryMethod.pkg
10 | Flyweight.pkg
11 | Iterator.pkg
12 | Mediator.pkg
13 | Memento.pkg
14 | Observer.pkg
15 | Prototype.pkg
16 | Proxy.pkg
17 | State.pkg
18 | Strategy.pkg
19 | TemplateMethod.pkg
20 | Visitor.pkg
21 |
--------------------------------------------------------------------------------
/cls/Command/Main.cls:
--------------------------------------------------------------------------------
1 | Class Command.Main Extends %RegisteredObject
2 | {
3 |
4 | ClassMethod main() [ Final ]
5 | {
6 | #dim lojaBazar As Loja
7 |
8 | Set lojaBazar = ##class(Loja).%New()
9 | Do lojaBazar.executarCompra(100, ##class(PagamentoBoleto).%New() )
10 | Do lojaBazar.executarCompra(200, ##class(PagamentoCartao).%New() )
11 | }
12 |
13 | }
14 |
15 |
--------------------------------------------------------------------------------
/cls/Mediator/IOSColleague.cls:
--------------------------------------------------------------------------------
1 | Class Mediator.IOSColleague Extends Mediator.Colleague
2 | {
3 |
4 | Method %OnNew(mediator As Mediator) As %Status
5 | {
6 | do ##super(mediator)
7 | quit $$$OK
8 | }
9 |
10 | Method receberMensagem(mensagem As %String) As %Status
11 | {
12 | write !,"(Recebido) Mensagem IOS: "_mensagem
13 | quit $$$OK
14 | }
15 |
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/cls/Strategy/CalculoImpostoQuizeOuDez.cls:
--------------------------------------------------------------------------------
1 | Class Strategy.CalculoImpostoQuizeOuDez Extends CalculaImposto
2 | {
3 |
4 | Method calculaSalarioComImposto(funcionario As Funcionario) As %Double [ Final ]
5 | {
6 | If (funcionario.getSalarioBase() > 2000){
7 | Quit funcionario.getSalarioBase() * 0.85
8 | }
9 | Quit funcionario.getSalarioBase() * 0.9
10 | }
11 |
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/cls/Builder/Main.cls:
--------------------------------------------------------------------------------
1 | Class Builder.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | #dim celular As Celular
7 | set celular = ##class(CelularBuilder).%New().comModelo("Nokia").comNome("Celular 123").build()
8 |
9 | write !,celular.getNome()
10 | write !,celular.getModelo(),!
11 | quit $$$OK
12 | }
13 |
14 | }
15 |
16 |
--------------------------------------------------------------------------------
/cls/Strategy/CalculoImpostoVinteOuQuize.cls:
--------------------------------------------------------------------------------
1 | Class Strategy.CalculoImpostoVinteOuQuize Extends CalculaImposto
2 | {
3 |
4 | Method calculaSalarioComImposto(funcionario As Funcionario) As %Double [ Final ]
5 | {
6 | If (funcionario.getSalarioBase() > 2000){
7 | Quit funcionario.getSalarioBase() * 0.80
8 | }
9 | Quit funcionario.getSalarioBase() * 0.85
10 | }
11 |
12 | }
13 |
14 |
--------------------------------------------------------------------------------
/cls/ChainOfResponsability/BancoA.cls:
--------------------------------------------------------------------------------
1 | Class ChainOfResponsability.BancoA Extends ChainOfResponsability.BancoChain
2 | {
3 |
4 | Method efetuaPagamento(id As IDBanco) [ Final ]
5 | {
6 | Write !,"Pagamento efetuado no banco A"
7 | }
8 |
9 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
10 | {
11 | Do ##super( ##class(IDBanco).#BANCOuA )
12 | Quit $$$OK
13 | }
14 |
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/cls/ChainOfResponsability/BancoB.cls:
--------------------------------------------------------------------------------
1 | Class ChainOfResponsability.BancoB Extends ChainOfResponsability.BancoChain
2 | {
3 |
4 | Method efetuaPagamento(id As IDBanco) [ Final ]
5 | {
6 | Write !,"Pagamento efetuado no banco B"
7 | }
8 |
9 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
10 | {
11 | Do ##super( ##class(IDBanco).#BANCOuB )
12 | Quit $$$OK
13 | }
14 |
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/cls/ChainOfResponsability/BancoC.cls:
--------------------------------------------------------------------------------
1 | Class ChainOfResponsability.BancoC Extends ChainOfResponsability.BancoChain
2 | {
3 |
4 | Method efetuaPagamento(id As IDBanco) [ Final ]
5 | {
6 | Write !,"Pagamento efetuado no banco C"
7 | }
8 |
9 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
10 | {
11 | Do ##super( ##class(IDBanco).#BANCOuC )
12 | Quit $$$OK
13 | }
14 |
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/cls/ChainOfResponsability/BancoD.cls:
--------------------------------------------------------------------------------
1 | Class ChainOfResponsability.BancoD Extends ChainOfResponsability.BancoChain
2 | {
3 |
4 | Method efetuaPagamento(id As IDBanco) [ Final ]
5 | {
6 | Write !,"Pagamento efetuado no banco D"
7 | }
8 |
9 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
10 | {
11 | Do ##super( ##class(IDBanco).#BANCOuD )
12 | Quit $$$OK
13 | }
14 |
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/cls/Composite/ElementoDoQuestionario.cls:
--------------------------------------------------------------------------------
1 | Class Composite.ElementoDoQuestionario Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Property descricao As %String;
5 |
6 | Method %OnNew(descricao As %String) As %Status [ Private ]
7 | {
8 | set ..descricao = descricao
9 | quit $$$OK
10 | }
11 |
12 | Method exibir() As %Status
13 | {
14 | quit $$$OK
15 | }
16 |
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/cls/Mediator/AndroidColleague.cls:
--------------------------------------------------------------------------------
1 | Class Mediator.AndroidColleague Extends Mediator.Colleague
2 | {
3 |
4 | Method %OnNew(mediator As Mediator) As %Status
5 | {
6 | do ##super(mediator)
7 | quit $$$OK
8 | }
9 |
10 | Method receberMensagem(mensagem As %String) As %Status
11 | {
12 | write !,"(Recebido) Mensagem Android: "_mensagem
13 | quit $$$OK
14 | }
15 |
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/cls/Observer/PorcentoObserver.cls:
--------------------------------------------------------------------------------
1 | Class Observer.PorcentoObserver Extends DadosObserver
2 | {
3 |
4 | Method %OnNew(dados As DadosSubject) As %Status
5 | {
6 | do ##super(dados)
7 | quit $$$OK
8 | }
9 |
10 | Method update() As %Status
11 | {
12 | write !,"Porcento:",(..dados.getState().valorA/..dados.getState().valorB)*..dados.getState().valorC
13 | quit $$$OK
14 | }
15 |
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/cls/Flyweight/Imagem.cls:
--------------------------------------------------------------------------------
1 | Class Flyweight.Imagem Extends %RegisteredObject
2 | {
3 |
4 | Property nomeDaImagem As %String [ Private ];
5 |
6 | Method %OnNew(imagem As %String) As %Status [ Private ]
7 | {
8 | set ..nomeDaImagem = imagem
9 | quit $$$OK
10 | }
11 |
12 | Method desenharImagem() As %Status
13 | {
14 | write !,..nomeDaImagem_" desenhada."
15 | quit $$$OK
16 | }
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/cls/Observer/TabelaObserver.cls:
--------------------------------------------------------------------------------
1 | Class Observer.TabelaObserver Extends DadosObserver
2 | {
3 |
4 | Method %OnNew(dados As DadosSubject) As %Status
5 | {
6 | do ##super(dados)
7 | quit $$$OK
8 | }
9 |
10 | Method update() As %Status
11 | {
12 | write !,"Tabela:",..dados.getState().valorA_" - "_..dados.getState().valorB_" - "_..dados.getState().valorC
13 | quit $$$OK
14 | }
15 |
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/cls/FactoryMethod/Carro.cls:
--------------------------------------------------------------------------------
1 | Class FactoryMethod.Carro Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Property potencia As %String [ Final, Private ];
5 |
6 | Method %OnNew(potencia As %String) As %Status [ Private, ServerOnly = 1 ]
7 | {
8 | Set ..potencia = potencia
9 | Quit $$$OK
10 | }
11 |
12 | ClassMethod criarCarro() As Carro [ Final ]
13 | {
14 |
15 | Quit ..%New( "" )
16 | }
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/cls/State/Main.cls:
--------------------------------------------------------------------------------
1 | Class State.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | #dim pedido As Pedido
7 |
8 | Set pedido = ##class(Pedido).%New()
9 |
10 | Do pedido.aprovado()
11 | Do pedido.carregado()
12 | Do pedido.cancelado()
13 | Do pedido.cancelado()
14 | Do pedido.carregado()
15 | Do pedido.aprovado()
16 | }
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/cls/Bridge/JanelaDialogo.cls:
--------------------------------------------------------------------------------
1 | Class Bridge.JanelaDialogo Extends (JanelaAbstrata, %RegisteredObject)
2 | {
3 |
4 | Method %OnNew(janela As IJanelaImplementada) As %Status
5 | {
6 | do ##super(janela)
7 | quit $$$OK
8 | }
9 |
10 | Method desenhar()
11 | {
12 | do ..desenharJanela( "Janela Dialogo" )
13 | do ..desenharBotao(" Botão Sim ")
14 | do ..desenharBotao(" Botão Não ")
15 | }
16 |
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # cache-intersystems-design-patterns
2 | Design Patterns aplicado em COS (Caché Object Script) Intersystems Caché
3 |
4 | Study of design patterns implemented in Caché Intersystems.
5 |
6 | - https://brizeno.wordpress.com/padroes/
7 | - https://en.wikipedia.org
8 | - Design Patterns: Elements of Reusable Object-Oriented Software - of Erich Gamma (Autor), Richard Helm (Autor), Ralph Johnson (Autor), John Vlissides (Autor)
9 |
--------------------------------------------------------------------------------
/cls/Adapter/TwitterAdapter.cls:
--------------------------------------------------------------------------------
1 | Class Adapter.TwitterAdapter Extends (%RegisteredObject, Adapter.ISocialAdapter)
2 | {
3 |
4 | Property twitter As Twitter [ Private ];
5 |
6 | Method %OnNew(twitter As Twitter) As %Status
7 | {
8 | set ..twitter = twitter
9 | quit $$$OK
10 | }
11 |
12 | Method send(mensagem As %String) As %Status
13 | {
14 | do ..twitter.send( mensagem )
15 | quit $$$OK
16 | }
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/cls/Decorator/Main.cls:
--------------------------------------------------------------------------------
1 | Class Decorator.Main Extends %RegisteredObject
2 | {
3 |
4 | ClassMethod main() [ Final ]
5 | {
6 | #dim coquetel As Coquetel
7 |
8 | Set coquetel = ##class(Cachaca).%New()
9 | Write !,coquetel.getNome()_" - "_coquetel.getPreco()
10 |
11 | Set coquetel = ##class(Refrigerante).%New( coquetel )
12 | Write !,coquetel.getNome()_" - "_coquetel.getPreco()
13 | }
14 |
15 | }
16 |
17 |
--------------------------------------------------------------------------------
/cls/Facade/Main.cls:
--------------------------------------------------------------------------------
1 | Class Facade.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status [ Private ]
5 | {
6 |
7 | set sistemas = ##class(Facade.SistemasFacade).%New()
8 |
9 | write !,"Iniciando sistema de som."
10 | do sistemas.reproduzirSom()
11 |
12 | write !,"Exibindo imagem."
13 | do sistemas.reproduzirImagem()
14 |
15 | quit $$$OK
16 | }
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/cls/Observer/Dados.cls:
--------------------------------------------------------------------------------
1 | Class Observer.Dados Extends %RegisteredObject
2 | {
3 |
4 | Property valorA As %Integer;
5 |
6 | Property valorB As %Integer;
7 |
8 | Property valorC As %Integer;
9 |
10 | Method %OnNew(valorA As %Integer, valorB As %Integer, valorC As %Integer) As %Status
11 | {
12 | set ..valorA = valorA
13 | set ..valorB = valorB
14 | set ..valorC = valorC
15 | quit $$$OK
16 | }
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/cls/State/PedidoState.cls:
--------------------------------------------------------------------------------
1 | Class State.PedidoState Extends %RegisteredObject
2 | {
3 |
4 | Method carregado() As PedidoCarregado [ Final ]
5 | {
6 | Quit ##class(PedidoCarregado).%New()
7 | }
8 |
9 | Method aprovado() As PedidoAprovado [ Final ]
10 | {
11 | Quit ##class(PedidoAprovado).%New()
12 | }
13 |
14 | Method cancelado() As PedidoCancelado [ Final ]
15 | {
16 | Quit ##class(PedidoCancelado).%New()
17 | }
18 |
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/cls/Prototype/CarroPrototype.cls:
--------------------------------------------------------------------------------
1 | Class Prototype.CarroPrototype [ Abstract ]
2 | {
3 |
4 | Property valorCompra As %Double [ Private ];
5 |
6 | Method clonar() As CarroPrototype
7 | {
8 | }
9 |
10 | Method getValorCompra() As %Double
11 | {
12 | quit ..valorCompra
13 | }
14 |
15 | Method setValorCompra(valorCompra As %Double) As %Status
16 | {
17 | set ..valorCompra = valorCompra
18 | quit $$$OK
19 | }
20 |
21 | }
22 |
23 |
--------------------------------------------------------------------------------
/cls/Observer/Main.cls:
--------------------------------------------------------------------------------
1 | Class Observer.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | set dados = ##class(DadosSubject).%New()
7 | do dados.attach( ##class(TabelaObserver).%New( dados ))
8 | do dados.attach( ##class(PorcentoObserver).%New( dados ))
9 |
10 | do dados.setState( ##class(Dados).%New(7,3,1))
11 | do dados.setState( ##class(Dados).%New(2,3,4))
12 |
13 | quit $$$OK
14 | }
15 |
16 | }
17 |
18 |
--------------------------------------------------------------------------------
/cls/TemplateMethod/AbstractClass.cls:
--------------------------------------------------------------------------------
1 | Class TemplateMethod.AbstractClass Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Method exibirNome() As %Status
5 | {
6 | write !,"Nome vazio."
7 | quit $$$OK
8 | }
9 |
10 | Method exibirCodigo() As %Status
11 | {
12 | write !,"Código vazio."
13 | quit $$$OK
14 | }
15 |
16 | Method exibirNomeECodigoJuntos() As %Status [ Final ]
17 | {
18 | write !,"Código e nome"
19 | quit $$$OK
20 | }
21 |
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/cls/Iterator/EmpresaList.cls:
--------------------------------------------------------------------------------
1 | Class Iterator.EmpresaList Extends (%ListOfDataTypes, Aggregate)
2 | {
3 |
4 | ClassMethod create() As Iterator.EmpresaList
5 | {
6 | set lista = ..%New()
7 | do lista.Insert("Empresa 1")
8 | do lista.Insert("Empresa 2")
9 | do lista.Insert("Empresa 3")
10 | do lista.Insert("Empresa 4")
11 |
12 | quit lista
13 | }
14 |
15 | Storage Custom
16 | {
17 | %Library.CompleteCustomStorage
18 | }
19 |
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/cls/Facade/api/terceiro/SistemaDeImagem.cls:
--------------------------------------------------------------------------------
1 | Class Facade.api.terceiro.SistemaDeImagem Extends %RegisteredObject
2 | {
3 |
4 | Method configurarCores() As %Status
5 | {
6 | write !,"Configurando as cores."
7 | quit $$$OK
8 | }
9 |
10 | Method configurarResolucao() As %Status
11 | {
12 | write !,"Configurando as resolução."
13 | quit $$$OK
14 | }
15 |
16 | Method reproduzir() As %Status
17 | {
18 | write !,"Reproduzindo... (imagem)"
19 | quit $$$OK
20 | }
21 |
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/cls/Flyweight/Sprite.cls:
--------------------------------------------------------------------------------
1 | Class Flyweight.Sprite Extends Flyweight.SpriteFlyweight
2 | {
3 |
4 | Property imagem As Imagem;
5 |
6 | Method %OnNew(nomeDaImagem As %String) As %Status [ Private ]
7 | {
8 | set ..imagem = ##class(Imagem).%New( nomeDaImagem )
9 | quit $$$OK
10 | }
11 |
12 | Method desenharImagem(ponto As Ponto) As %Status
13 | {
14 | do ..imagem.desenharImagem()
15 | write !,"No ponto:"_ponto.x_", "_ponto.y
16 |
17 | quit $$$OK
18 | }
19 |
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/cls/Visitor/Main.cls:
--------------------------------------------------------------------------------
1 | Class Visitor.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | set empresas = ##class(Visitor.EmpresaLista).%New()
7 | do empresas.Insert("Empresa 1")
8 | do empresas.Insert("Empresa 2")
9 | do empresas.Insert("Empresa 3")
10 | do empresas.Insert("Empresa 4")
11 | do empresas.Insert("Empresa 5")
12 |
13 |
14 | set funcionario = ##class(Funcionario).%New()
15 | do empresas.accept( funcionario )
16 | quit $$$OK
17 | }
18 |
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/cls/Mediator/Colleague.cls:
--------------------------------------------------------------------------------
1 | Class Mediator.Colleague Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Property mediator As Mediator.Mediator [ Private ];
5 |
6 | Method %OnNew(mediator As Mediator) As %Status
7 | {
8 | set ..mediator = mediator
9 | quit $$$OK
10 | }
11 |
12 | Method enviarMensagem(mensagem As %String) As %Status
13 | {
14 | do ..mediator.enviar(mensagem, ##this)
15 | quit $$$OK
16 | }
17 |
18 | Method receberMensagem(mensagem As %String) As %Status
19 | {
20 | quit $$$OK
21 | }
22 |
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/cls/Prototype/Main.cls:
--------------------------------------------------------------------------------
1 | Class Prototype.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | #dim palioUsado,palioNovo As Prototype.PalioPrototype
7 | set palioNovo = ##class(Prototype.PalioPrototype).%New()
8 | do palioNovo.setValorCompra( 15000 )
9 |
10 | set palioUsado = palioNovo.clonar()
11 | do palioUsado.setValorCompra( 8000 )
12 |
13 | write !,palioNovo.exibirInformacao()
14 | write !,palioUsado.exibirInformacao()
15 |
16 | quit $$$OK
17 | }
18 |
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/cls/Builder/Celular.cls:
--------------------------------------------------------------------------------
1 | Class Builder.Celular Extends %RegisteredObject
2 | {
3 |
4 | Property modelo As %String [ Final, Private ];
5 |
6 | Property nome As %String [ Final, Private ];
7 |
8 | Method %OnNew(modelo As %String, nome As %String) As %Status [ Private, ServerOnly = 1 ]
9 | {
10 | Set ..modelo = modelo
11 | Set ..nome = nome
12 | Quit $$$OK
13 | }
14 |
15 | Method getNome() As %String [ Final ]
16 | {
17 | Quit ..nome
18 | }
19 |
20 | Method getModelo() As %String [ Final ]
21 | {
22 | Quit ..modelo
23 | }
24 |
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/cls/Bridge/JanelaAbstrata.cls:
--------------------------------------------------------------------------------
1 | Class Bridge.JanelaAbstrata [ Abstract ]
2 | {
3 |
4 | Property janela As IJanelaImplementada;
5 |
6 | Method %OnNew(janela As IJanelaImplementada) As %Status
7 | {
8 | set ..janela = janela
9 | quit $$$OK
10 | }
11 |
12 | Method desenharJanela(titulo As %String) As %Status
13 | {
14 | do ..janela.desenharJanela( titulo )
15 | }
16 |
17 | Method desenharBotao(rotulo As %String) As %Status
18 | {
19 | do ..janela.desenharBotao( rotulo )
20 | }
21 |
22 | Method desenhar()
23 | {
24 | }
25 |
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/cls/Proxy/Usuario.cls:
--------------------------------------------------------------------------------
1 | Class Proxy.Usuario Extends %RegisteredObject
2 | {
3 |
4 | Property quantidadeDeUsuarios As %Integer;
5 |
6 | Property usuariosConectados As %Integer;
7 |
8 | Method %OnNew() As %Status
9 | {
10 | set ..quantidadeDeUsuarios = $random(999)
11 | set ..usuariosConectados = $random(999)
12 | quit $$$OK
13 | }
14 |
15 | Method getNumeroDeUsuarios() As %Integer
16 | {
17 | quit ..quantidadeDeUsuarios
18 | }
19 |
20 | Method getUsuariosConectados() As %Integer
21 | {
22 | quit ..usuariosConectados
23 | }
24 |
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/cls/Iterator/Main.cls:
--------------------------------------------------------------------------------
1 | Class Iterator.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
5 | {
6 | #dim empresas As %ListOfDataTypes
7 | #dim iterator As EmpresaListIterator
8 |
9 | set empresas = ##class(EmpresaList).create()
10 | set iterator = ##class(EmpresaListIterator).%New( empresas )
11 |
12 | do iterator.next()
13 | for {
14 | quit:(iterator.isDone())
15 | write !,iterator.currentItem()
16 | do iterator.next()
17 | }
18 |
19 | Quit $$$OK
20 | }
21 |
22 | }
23 |
24 |
--------------------------------------------------------------------------------
/cls/Builder/CelularBuilder.cls:
--------------------------------------------------------------------------------
1 | Class Builder.CelularBuilder Extends %RegisteredObject
2 | {
3 |
4 | Property modelo As %String [ Final, Private ];
5 |
6 | Property nome As %String [ Final, Private ];
7 |
8 | Method comNome(nome As %String) As CelularBuilder [ Final ]
9 | {
10 | Set ..nome = nome
11 | Quit ##this
12 | }
13 |
14 | Method comModelo(modelo As %String) As CelularBuilder [ Final ]
15 | {
16 | Set ..modelo = modelo
17 | Quit ##this
18 | }
19 |
20 | Method build() As Celular [ Final ]
21 | {
22 | quit ##class(Celular).%New( ..modelo, ..nome )
23 | }
24 |
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/cls/Facade/api/terceiro/SistemaDeAudio.cls:
--------------------------------------------------------------------------------
1 | Class Facade.api.terceiro.SistemaDeAudio Extends %RegisteredObject
2 | {
3 |
4 | Method configurar() As %Status
5 | {
6 | write !,"Frequencia configurada."
7 | quit $$$OK
8 | }
9 |
10 | Method configurarVolume() As %Status
11 | {
12 | write !,"Volume configurada."
13 | quit $$$OK
14 | }
15 |
16 | Method configurarCanais() As %Status
17 | {
18 | write !,"Canais configurada."
19 | quit $$$OK
20 | }
21 |
22 | Method reproduzir() As %Status
23 | {
24 | write !,"Reproduzindo.... (audio)"
25 | quit $$$OK
26 | }
27 |
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/cls/FactoryMethod/Main.cls:
--------------------------------------------------------------------------------
1 | Class FactoryMethod.Main Extends %RegisteredObject
2 | {
3 |
4 | ClassMethod main() [ Final ]
5 | {
6 |
7 | #dim gol As Gol
8 | #dim focus As Focus
9 | #dim uno As Uno
10 |
11 | Set gol = ##class(FabricaCarro).criarCarro( ##class(ModeloCarro).#GOL )
12 | Write !,gol.getInfo()
13 |
14 | Set focus = ##class(FabricaCarro).criarCarro( ##class(ModeloCarro).#FOCUS )
15 | Write !,focus.getInfo()
16 |
17 | Set uno = ##class(FabricaCarro).criarCarro( ##class(ModeloCarro).#UNO )
18 | Write !,uno.getInfo()
19 | }
20 |
21 | }
22 |
23 |
--------------------------------------------------------------------------------
/cls/FactoryMethod/FabricaCarro.cls:
--------------------------------------------------------------------------------
1 | Class FactoryMethod.FabricaCarro Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | ClassMethod criarCarro(modelo As ModeloCarro) As Carro [ Final ]
5 | {
6 | #dim carro As Carro
7 | Set carro = $Case(modelo,
8 | ##class(ModeloCarro).#FOCUS : ##class(Focus).criar(),
9 | ##class(ModeloCarro).#UNO : ##class(Uno).criar(),
10 | ##class(ModeloCarro).#GOL : ##class(Gol).criar())
11 |
12 | if ( carro = $$$NULLOREF ) {
13 | Throw ##class(%Exception.General).%New("Não encontrado a fábrica para o carro.")
14 | }
15 |
16 | Quit carro
17 | }
18 |
19 | }
20 |
21 |
--------------------------------------------------------------------------------
/cls/Prototype/PalioPrototype.cls:
--------------------------------------------------------------------------------
1 | Class Prototype.PalioPrototype Extends (CarroPrototype, %RegisteredObject)
2 | {
3 |
4 | Method %OnNew(palioPrototype As PalioPrototype = "") As %Status [ Private ]
5 | {
6 | if ($isObject(palioPrototype)){
7 | set ..valorCompra = palioPrototype.getValorCompra()
8 | } else {
9 | set ..valorCompra = 0.0
10 | }
11 | quit $$$OK
12 | }
13 |
14 | Method clonar() As PalioPrototype
15 | {
16 | return ..%New( ##this )
17 | }
18 |
19 | Method exibirInformacao()
20 | {
21 | quit "Modelo: Palio - Valor:"_..getValorCompra()
22 | }
23 |
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/cls/Prototype/FiestaPrototype.cls:
--------------------------------------------------------------------------------
1 | Class Prototype.FiestaPrototype Extends (CarroPrototype, %RegisteredObject)
2 | {
3 |
4 | Method %OnNew(fiestaPrototype As FiestaPrototype = "") As %Status [ Private ]
5 | {
6 | if ($isObject(fiestaPrototype)){
7 | set ..valorCompra = fiestaPrototype.getValorCompra()
8 | } else {
9 | set ..valorCompra = 0.0
10 | }
11 | quit $$$OK
12 | }
13 |
14 | Method clonar() As FiestaPrototype
15 | {
16 | return ..%New( ##this )
17 | }
18 |
19 | Method exibirInformacao()
20 | {
21 | quit "Modelo: Fiesta - Valor:"_..getValorCompra()
22 | }
23 |
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/cls/Composite/Main.cls:
--------------------------------------------------------------------------------
1 | Class Composite.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | set blocaA = ##class(Bloco).%New( "A) Formação Educacional" )
7 | set questao1 = ##class(Questao).%New( "Qual formação" )
8 | set questao2 = ##class(Questao).%New( "Pretente fazer alguma pós-gradução?" )
9 |
10 | do blocaA.adicionar( questao1 )
11 | do blocaA.adicionar( questao2 )
12 |
13 | set blocoRaiz = ##class(Bloco).%New( "Inicio ")
14 | do blocoRaiz.adicionar( blocaA )
15 | do blocoRaiz.exibir()
16 |
17 | quit $$$OK
18 | }
19 |
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/cls/Strategy/Main.cls:
--------------------------------------------------------------------------------
1 | Class Strategy.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | #dim funcionario As Funcionario
7 |
8 | Set funcionario = ##class(Funcionario).%New( ##class(Funcionario).#DESENVOLVEDOR, 2100)
9 | Write !,funcionario.calcularSalarioComImposto()
10 |
11 | Set funcionario = ##class(Funcionario).%New( ##class(Funcionario).#DESENVOLVEDOR, 1700)
12 | Write !,funcionario.calcularSalarioComImposto()
13 |
14 | Set funcionario = ##class(Funcionario).%New( ##class(Funcionario).#DBA, 2500)
15 | Write !,funcionario.calcularSalarioComImposto()
16 | }
17 |
18 | }
19 |
20 |
--------------------------------------------------------------------------------
/cls/State/Pedido.cls:
--------------------------------------------------------------------------------
1 | Class State.Pedido Extends %RegisteredObject
2 | {
3 |
4 | Property estado As PedidoState [ Final, Private ];
5 |
6 | Method %OnNew() As %Status [ Private, ServerOnly = 1 ]
7 | {
8 | Set ..estado = ##class(PedidoState).%New()
9 | Write !,"Normal."
10 | Quit $$$OK
11 | }
12 |
13 | Method aprovado() As PedidoState [ Final ]
14 | {
15 | Set ..estado = ..estado.aprovado()
16 | }
17 |
18 | Method cancelado() As PedidoState [ Final ]
19 | {
20 | Set ..estado = ..estado.cancelado()
21 | }
22 |
23 | Method carregado() As PedidoState [ Final ]
24 | {
25 | Set ..estado = ..estado.carregado()
26 | }
27 |
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/cls/Mediator/Main.cls:
--------------------------------------------------------------------------------
1 | Class Mediator.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 | set mediator = ##class(Mediator.MensagemMediator).%New()
7 |
8 | set androidColleague = ##class(Mediator.AndroidColleague).%New( mediator )
9 | set IOSColleague = ##class(Mediator.IOSColleague).%New( mediator )
10 |
11 | do mediator.adicionarColeague( androidColleague )
12 | do mediator.adicionarColeague( IOSColleague )
13 |
14 | do androidColleague.enviarMensagem("Olá sou o Android")
15 | do IOSColleague.enviarMensagem("Olá sou o IOS")
16 |
17 | quit $$$OK
18 | }
19 |
20 | }
21 |
22 |
--------------------------------------------------------------------------------
/cls/Decorator/CoquetelDecorator.cls:
--------------------------------------------------------------------------------
1 | /// Decorator
2 | ///
3 | /// Dinamicamente, agregar responsabilidades adicionais a objetos.
4 | /// Os Decorators fornecem uma alternativa flexível ao uso de subclasses
5 | /// para extensão de funcionalidades.
6 | Class Decorator.CoquetelDecorator Extends Decorator.Coquetel
7 | {
8 |
9 | Property coquetel As Coquetel [ Private ];
10 |
11 | Method %OnNew(coquetel As Coquetel) As %Status
12 | {
13 | Set ..coquetel = coquetel
14 | Quit $$$OK
15 | }
16 |
17 | Method getNome() As %String
18 | {
19 | Quit ..coquetel.getNome() _" - "_ ..nome
20 | }
21 |
22 | Method getPreco() As %Double
23 | {
24 | Quit ..coquetel.getPreco() _" - "_ ..preco
25 | }
26 |
27 | }
28 |
29 |
--------------------------------------------------------------------------------
/cls/Memento/TextoCareTaker.cls:
--------------------------------------------------------------------------------
1 | Class Memento.TextoCareTaker Extends %RegisteredObject
2 | {
3 |
4 | Property estados As list Of TextoMemento [ Private ];
5 |
6 | Method %OnNew() As %Status
7 | {
8 | set ..estados = ##class(%ListOfObjects).%New()
9 | quit $$$OK
10 | }
11 |
12 | Method adicionarMemento(textoMemento As TextoMemento) As %Status
13 | {
14 | do ..estados.Insert( textoMemento )
15 | quit $$$OK
16 | }
17 |
18 | Method getUltimoEstadoTexto() As TextoMemento
19 | {
20 | do ..estados.RemoveAt( ..estados.Count() )
21 | if ( ..estados.Count() <=0 ){
22 | quit ##class(TextoMemento).%New("")
23 | }
24 |
25 | quit ..estados.GetAt( ..estados.Count() )
26 | }
27 |
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/cls/Visitor/Funcionario.cls:
--------------------------------------------------------------------------------
1 | Class Visitor.Funcionario Extends Visitor
2 | {
3 |
4 | Method visit(visitor As EmpresaLista) As %Status
5 | {
6 | do ..quantidadeEmpresasVisitadas( visitor )
7 | do ..exibirEmpresas( visitor )
8 | quit $$$OK
9 | }
10 |
11 | Method quantidadeEmpresasVisitadas(empresaLista As EmpresaLista)
12 | {
13 | write !,"Visistando..."
14 | write !,empresaLista.Count()_" Empresas."
15 | }
16 |
17 | Method exibirEmpresas(empresaLista As EmpresaLista)
18 | {
19 | write !,"Listando:"
20 | #dim empresa,indice As %String
21 | for {
22 | set empresa = empresaLista.GetNext(.indice)
23 | quit:(indice="")
24 |
25 | write !,empresa
26 | }
27 | }
28 |
29 | }
30 |
31 |
--------------------------------------------------------------------------------
/cls/Iterator/EmpresaListIterator.cls:
--------------------------------------------------------------------------------
1 | Class Iterator.EmpresaListIterator Extends Iterator
2 | {
3 |
4 | Property cursor As %Integer [ InitialExpression = 0, Private ];
5 |
6 | Property listaEmpresas As %ListOfDataTypes [ Private ];
7 |
8 | Method %OnNew(listaEmpresas As %ListOfDataTypes) As %Status [ Private ]
9 | {
10 | set ..listaEmpresas = listaEmpresas
11 | do ..first()
12 | quit $$$OK
13 | }
14 |
15 | Method currentItem()
16 | {
17 | quit ..listaEmpresas.GetAt(..cursor)
18 | }
19 |
20 | Method first()
21 | {
22 | set ..cursor = 0
23 | }
24 |
25 | Method isDone()
26 | {
27 | quit (..cursor > ..listaEmpresas.Count())
28 | }
29 |
30 | Method next()
31 | {
32 | set ..cursor = ..cursor + 1
33 | }
34 |
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/cls/Mediator/MensagemMediator.cls:
--------------------------------------------------------------------------------
1 | Class Mediator.MensagemMediator Extends Mediator.Mediator
2 | {
3 |
4 | Property contatos As list Of Colleague [ Private ];
5 |
6 | Method %OnNew() As %Status
7 | {
8 | set ..contatos = ##class(%ListOfObjects).%New()
9 | quit $$$OK
10 | }
11 |
12 | Method adicionarColeague(colleague As Colleague) As %Status
13 | {
14 | do ..contatos.Insert( colleague )
15 | quit $$$OK
16 | }
17 |
18 | Method enviar(mensagem As %String, Colleague As Colleague) As %Status
19 | {
20 | #dim indice As %String
21 | #dim contato As Colleague
22 | for {
23 | set contato = ..contatos.GetNext(.indice)
24 | quit:(indice="")
25 |
26 | do contato.receberMensagem( mensagem )
27 | }
28 | quit $$$OK
29 | }
30 |
31 | }
32 |
33 |
--------------------------------------------------------------------------------
/cls/Memento/Texto.cls:
--------------------------------------------------------------------------------
1 | Class Memento.Texto Extends %RegisteredObject
2 | {
3 |
4 | Property texto As %String [ Private ];
5 |
6 | Property careTaker As TextoCareTaker [ Private ];
7 |
8 | Method %OnNew() As %Status
9 | {
10 | set ..careTaker = ##class(TextoCareTaker).%New()
11 | quit $$$OK
12 | }
13 |
14 | Method escreverTexto(novoTexto As %String) As %Status
15 | {
16 | do ..careTaker.adicionarMemento( ##class(TextoMemento).%New( ..texto_novoTexto ) )
17 | set ..texto = ..texto_novoTexto
18 | quit $$$OK
19 | }
20 |
21 | Method desfazerEscrita() As %Status
22 | {
23 | set ..texto = ..careTaker.getUltimoEstadoTexto().getTexto()
24 | quit $$$OK
25 | }
26 |
27 | Method mostrarTexto() As %Status
28 | {
29 | write !,..texto
30 | quit $$$OK
31 | }
32 |
33 | }
34 |
35 |
--------------------------------------------------------------------------------
/cls/ChainOfResponsability/Main.cls:
--------------------------------------------------------------------------------
1 | Class ChainOfResponsability.Main Extends %RegisteredObject
2 | {
3 |
4 | ClassMethod main() [ Final ]
5 | {
6 | #dim bancos As BancoChain
7 |
8 | Set bancos = ##class(BancoA).%New()
9 | Do bancos.setNext( ##class(BancoB).%New() )
10 | Do bancos.setNext( ##class(BancoC).%New() )
11 | Do bancos.setNext( ##class(BancoD).%New() )
12 |
13 | Try {
14 | Do bancos.efetuarPagamento( ##class(IDBanco).#BANCOuC )
15 | Do bancos.efetuarPagamento( ##class(IDBanco).#BANCOuD )
16 | Do bancos.efetuarPagamento( ##class(IDBanco).#BANCOuA )
17 | Do bancos.efetuarPagamento( ##class(IDBanco).#BANCOuB )
18 | } Catch exception {
19 | W !,$$$FormatText("[Error] %1 %2", exception.Name, exception.Data )
20 | }
21 | }
22 |
23 | }
24 |
25 |
--------------------------------------------------------------------------------
/cls/Proxy/UsuarioProxy.cls:
--------------------------------------------------------------------------------
1 | /// “Fornecer um substituto ou marcador da localização de outro objeto para controlar o acesso a esse objeto.”
2 | /// GAMMA, Erich et al. Padrões de Projeto: Soluções reutilizáveis de software orientado a objetos.
3 | Class Proxy.UsuarioProxy Extends Usuario
4 | {
5 |
6 | Method %OnNew() As %Status
7 | {
8 | // Implementações necessárias para o funcionamento do proxy.
9 | // E o objeto que utiliza Usuário irá aceitar o Proxy sem problemas.
10 |
11 | set ..quantidadeDeUsuarios = $random(999)
12 | set ..usuariosConectados = $random(999)
13 | quit $$$OK
14 | }
15 |
16 | Method getNumeroDeUsuarios() As %Integer
17 | {
18 | quit ..quantidadeDeUsuarios
19 | }
20 |
21 | Method getUsuariosConectados() As %Integer
22 | {
23 | quit ..usuariosConectados
24 | }
25 |
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/cls/Flyweight/Main.cls:
--------------------------------------------------------------------------------
1 | Class Flyweight.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status [ Private ]
5 | {
6 | set factory = ##class(FlyweightFactory).%New()
7 | do factory.getFlyweight( ##class(FlyweightFactory).#JOGADOR ).desenharImagem( ##class(Ponto).%New(5,3) )
8 | do factory.getFlyweight( ##class(FlyweightFactory).#INIMIGOu1 ).desenharImagem( ##class(Ponto).%New(1,2) )
9 | do factory.getFlyweight( ##class(FlyweightFactory).#INIMIGOu2 ).desenharImagem( ##class(Ponto).%New(4,3) )
10 | do factory.getFlyweight( ##class(FlyweightFactory).#INIMIGOu3 ).desenharImagem( ##class(Ponto).%New(7,8) )
11 | do factory.getFlyweight( ##class(FlyweightFactory).#CENARIOu1 ).desenharImagem( ##class(Ponto).%New(0,2) )
12 | do factory.getFlyweight( ##class(FlyweightFactory).#CENARIOu2 ).desenharImagem( ##class(Ponto).%New(7,2) )
13 |
14 | quit $$$OK
15 | }
16 |
17 | }
18 |
19 |
--------------------------------------------------------------------------------
/cls/Memento/Main.cls:
--------------------------------------------------------------------------------
1 | Class Memento.Main Extends %RegisteredObject
2 | {
3 |
4 | Method %OnNew() As %Status
5 | {
6 |
7 | set texto = ##class(Texto).%New()
8 | do texto.escreverTexto(" Nenhuma noite por mais escura que seja pode impedir o amanhecer. ")
9 | do texto.escreverTexto(" Não há derrota que derrube, quem nasceu para vencer. ")
10 | do texto.escreverTexto(" Quando a gente pensa que sabe todas as respostas, vem a vida e muda todas as perguntas. ")
11 |
12 | write !,"~~~~~~~~~~~~~~~~"
13 |
14 | do texto.mostrarTexto()
15 | do texto.desfazerEscrita()
16 |
17 | write !,"~~~~~~~~~~~~~~~~"
18 |
19 | do texto.mostrarTexto()
20 | do texto.desfazerEscrita()
21 |
22 | write !,"~~~~~~~~~~~~~~~~"
23 | do texto.mostrarTexto()
24 | do texto.desfazerEscrita()
25 |
26 | write !,"~~~~~~~~~~~~~~~~"
27 | do texto.mostrarTexto()
28 |
29 | quit $$$OK
30 | }
31 |
32 | }
33 |
34 |
--------------------------------------------------------------------------------
/cls/Composite/Bloco.cls:
--------------------------------------------------------------------------------
1 | Class Composite.Bloco Extends ElementoDoQuestionario
2 | {
3 |
4 | Property elementos As list Of ElementoDoQuestionario;
5 |
6 | Method exibir() As %Status
7 | {
8 | #dim elemento As Composite.ElementoDoQuestionario
9 | #dim indice As %String =""
10 |
11 | write !,$$$FormatText("Bloco %1", ..descricao)
12 | for {
13 | set elemento = ..elementos.GetNext(.indice)
14 | quit:(indice="")
15 |
16 | do elemento.exibir()
17 | }
18 | quit $$$OK
19 | }
20 |
21 | Method adicionar(elemento As Composite.ElementoDoQuestionario) As %Status
22 | {
23 | quit ..elementos.Insert( elemento )
24 | }
25 |
26 | Method remover(elemento As Composite.ElementoDoQuestionario) As %Status
27 | {
28 | #dim elementoId As %String
29 | set elementoId = ..elementos.FindOref( elemento )
30 | if (elementoId'=""){
31 | quit ..elementos.RemoveAt( elementoId )
32 | }
33 | quit $$$OK
34 | }
35 |
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/cls/Strategy/Funcionario.cls:
--------------------------------------------------------------------------------
1 | Class Strategy.Funcionario Extends %RegisteredObject
2 | {
3 |
4 | Parameter DESENVOLVEDOR [ Final ] = 1;
5 |
6 | Parameter DBA [ Final ] = 2;
7 |
8 | Parameter GERENTE [ Final ] = 3;
9 |
10 | Property salarioBase As %Double [ Private ];
11 |
12 | Property estrategiaCalculo As CalculaImposto [ Private ];
13 |
14 | Method %OnNew(cargo As %Integer, salarioBase As %Double) As %Status
15 | {
16 | Set ..salarioBase = salarioBase
17 | Set ..estrategiaCalculo = $Case(cargo,
18 | ..#DESENVOLVEDOR: ##class(CalculoImpostoQuizeOuDez).%New(),
19 | ..#DBA : ##class(CalculoImpostoQuizeOuDez).%New(),
20 | ..#GERENTE : ##class(CalculoImpostoVinteOuQuize).%New()
21 | )
22 | Quit $$$OK
23 | }
24 |
25 | Method getSalarioBase() As %Double [ Final ]
26 | {
27 | Quit ..salarioBase
28 | }
29 |
30 | Method calcularSalarioComImposto() [ Final ]
31 | {
32 | Quit ..estrategiaCalculo.calculaSalarioComImposto(##this)
33 | }
34 |
35 | }
36 |
37 |
--------------------------------------------------------------------------------
/cls/Facade/SistemasFacade.cls:
--------------------------------------------------------------------------------
1 | Class Facade.SistemasFacade Extends %RegisteredObject
2 | {
3 |
4 | Property sistemaDeAudio As Facade.api.terceiro.SistemaDeAudio [ Private ];
5 |
6 | Property sistemaImagem As Facade.api.terceiro.SistemaDeImagem [ Private ];
7 |
8 | Method %OnNew() As %Status [ Private ]
9 | {
10 | set ..sistemaDeAudio = ##class(Facade.api.terceiro.SistemaDeAudio).%New()
11 | do ..sistemaDeAudio.configurar()
12 | do ..sistemaDeAudio.configurarCanais()
13 | do ..sistemaDeAudio.configurarVolume()
14 |
15 | set ..sistemaImagem = ##class(Facade.api.terceiro.SistemaDeImagem).%New()
16 | do ..sistemaImagem.configurarCores()
17 | do ..sistemaImagem.configurarResolucao()
18 |
19 | quit $$$OK
20 | }
21 |
22 | Method reproduzirSom() As %Status
23 | {
24 | do ..sistemaDeAudio.reproduzir()
25 | quit $$$OK
26 | }
27 |
28 | Method reproduzirImagem() As %Status
29 | {
30 | do ..sistemaImagem.reproduzir()
31 | quit $$$OK
32 | }
33 |
34 | }
35 |
36 |
--------------------------------------------------------------------------------
/cls/Flyweight/FlyweightFactory.cls:
--------------------------------------------------------------------------------
1 | Class Flyweight.FlyweightFactory Extends %RegisteredObject
2 | {
3 |
4 | Parameter JOGADOR = 1;
5 |
6 | Parameter INIMIGOu1 = 2;
7 |
8 | Parameter INIMIGOu2 = 3;
9 |
10 | Parameter INIMIGOu3 = 4;
11 |
12 | Parameter CENARIOu1 = 5;
13 |
14 | Parameter CENARIOu2 = 6;
15 |
16 | Property flyweights As list Of SpriteFlyweight;
17 |
18 | Method %OnNew() As %Status [ Private ]
19 | {
20 | set ..flyweights = ##class(%ListOfObjects).%New()
21 | do ..flyweights.Insert( ##class(Sprite).%New( "jogador.png" ))
22 | do ..flyweights.Insert( ##class(Sprite).%New( "inimigo1.png" ))
23 | do ..flyweights.Insert( ##class(Sprite).%New( "inimigo2.png" ))
24 | do ..flyweights.Insert( ##class(Sprite).%New( "inimigo3.png" ))
25 | do ..flyweights.Insert( ##class(Sprite).%New( "cenario1.png" ))
26 | do ..flyweights.Insert( ##class(Sprite).%New( "cenario2.png" ))
27 |
28 | quit $$$OK
29 | }
30 |
31 | Method getFlyweight(jogador As %Integer) As SpriteFlyweight
32 | {
33 | quit ..flyweights.GetAt( jogador )
34 | }
35 |
36 | }
37 |
38 |
--------------------------------------------------------------------------------
/cls/Observer/DadosSubject.cls:
--------------------------------------------------------------------------------
1 | Class Observer.DadosSubject Extends %RegisteredObject
2 | {
3 |
4 | Property observers As list Of DadosObserver;
5 |
6 | Property dados As Dados;
7 |
8 | Method %OnNew() As %Status
9 | {
10 | set ..observers = ##class(%ListOfObjects).%New()
11 | quit $$$OK
12 | }
13 |
14 | Method attach(observer As DadosObserver) As %Status
15 | {
16 | do ..observers.Insert( observer )
17 | quit $$$OK
18 | }
19 |
20 | Method detach(indice As %Integer) As %Status
21 | {
22 | do ..observers.RemoveAt( indice )
23 | quit $$$OK
24 | }
25 |
26 | Method setState(dados As Dados) As %Status
27 | {
28 | set ..dados = dados
29 | do ..notifyObservers()
30 | quit $$$OK
31 | }
32 |
33 | Method notifyObservers() As %Status [ Private ]
34 | {
35 | #dim observer As DadosObserver
36 | #dim indice As %String
37 | for {
38 | set observer = ..observers.GetNext(.indice)
39 | quit:(indice="")
40 |
41 | do observer.update()
42 | }
43 | quit $$$OK
44 | }
45 |
46 | Method getState() As Dados
47 | {
48 | quit ..dados
49 | }
50 |
51 | }
52 |
53 |
--------------------------------------------------------------------------------
/cls/ChainOfResponsability/BancoChain.cls:
--------------------------------------------------------------------------------
1 | Class ChainOfResponsability.BancoChain Extends %RegisteredObject [ Abstract ]
2 | {
3 |
4 | Property next As BancoChain [ Final, Private ];
5 |
6 | Property identificadorDoBanco As %Integer [ Final, Private ];
7 |
8 | Method %OnNew(id As IDBanco) As %Status [ Private, ServerOnly = 1 ]
9 | {
10 | Set ..next = $$$NULLOID
11 | Set ..identificadorDoBanco = id
12 | Quit $$$OK
13 | }
14 |
15 | Method setNext(forma As BancoChain) [ Final ]
16 | {
17 | if (..next = $$$NULLOID){
18 | Set ..next = forma
19 | } else {
20 | Do ..next.setNext( forma )
21 | }
22 | }
23 |
24 | Method efetuarPagamento(id As IDBanco)
25 | {
26 | if (..podeEfetuarPagamento( id )){
27 | Do ..efetuaPagamento()
28 | } else {
29 | if (..next = $$$NULLOID){
30 | Throw ##class(%Exception.General).%New("Banco para pagamento não encontrado.")
31 | }
32 | Do ..next.efetuarPagamento( id )
33 | }
34 | }
35 |
36 | Method podeEfetuarPagamento(id As IDBanco) As %Boolean [ Final ]
37 | {
38 | if (..identificadorDoBanco = id ){
39 | Quit $$$YES
40 | }
41 | Quit $$$NO
42 | }
43 |
44 | Method efetuaPagamento()
45 | {
46 | Quit $$$OK
47 | }
48 |
49 | }
50 |
51 |
--------------------------------------------------------------------------------