├── 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 | --------------------------------------------------------------------------------