Padrões de design por tutoriais - O poder da OOP (parte 3)
Padrão de adaptador em Swift Padrão de adaptador Swift
Padrões de design por tutoriais - O poder da OOP (parte 3)
Pré-requisitos — Esta série de tutoriais requer um nível intermediário de conhecimento em programação orientada a objetos. Você deve ter conhecimentos básicos sobre classe, objeto, construtor, herança, valor e tipo de referência. Os intermediários ganharão conhecimento e os especialistas aprimorarão seus conhecimentos lendo esta série do início ao fim. Pré-requisito — Esta série de tutoriais requer conhecimento intermediário em programação orientada a objetos. Você deve ter um conhecimento básico de classes, objetos, construtores, herança, valor e tipos de referência. Os usuários intermediários adquirirão conhecimento, enquanto os especialistas aprimorarão seus conhecimentos lendo esta série de capa a capa.
O que é um adaptador?
O que é um adaptador?
Um adaptador é um dispositivo físico que permite que um hardware ou interface eletrônica seja adaptado a outro hardware ou interface eletrônica sem perda de funcionalidade. Um adaptador é um dispositivo físico que permite que um hardware ou interface eletrônica seja adaptado a outro hardware ou interface eletrônica sem perda de funcionalidade.
Adaptadores são usados quando você tem uma forma de entrada e deseja acessar algo que não pode assumir sua forma de entrada. Adaptadores são usados quando você tem uma forma de entrada e deseja acessar algo que não pode assumir a forma de sua entrada.

Agora é hora de entender o padrão do adaptador respondendo às perguntas simples abaixo. Agora, entenda o padrão do adaptador respondendo às perguntas simples abaixo.
-
Qual é o padrão Adaptador na programação orientada a objetos? Qual é o padrão do adaptador na programação orientada a objetos?
-
Que problema isso resolve? Que problema isso resolve?
-
Como podemos usá-lo na programação? Como podemos usá-lo na programação?
Qual é o padrão Adapter na programação orientada a objetos?
Qual é o padrão do adaptador na programação orientada a objetos?
No padrão do adaptador, definimos uma classe que usa o tipo existente como entrada e nos fornece o tipo necessário ou as funcionalidades/propriedades necessárias para acessar. No padrão Adaptador, definimos uma classe que aceita um tipo existente como entrada e nos fornece o tipo necessário ou funcionalidades/propriedades necessárias para acessar.
Que problema isso resolve?
Que problema isso resolve?
Ajuda a converter tipos de dados existentes em outra forma de dados. Ajuda a converter tipos de dados existentes em outra forma de dados.
Isso é muito útil quando usamos código de estruturas ou bibliotecas de terceiros e aceita apenas tipos restritos. Isso é muito útil quando usamos código de uma estrutura ou biblioteca de terceiros e aceita apenas tipos restritos.
Como podemos usá-lo na programação?
Como podemos usá-lo na programação?
Vamos entender isso com o exemplo abaixo. Vamos entender isso através do exemplo a seguir.
Temos classes como Point, LineSegment e DrawingPad . Temos as classes Point, LineSegment e DrawingPad.
Lembra-se dos nossos velhos tempos de computação gráfica usando linguagem C? Lembra-se da época em que usávamos a linguagem C para fazer computação gráfica? Dessa vez, apenas para desenhar uma linha na tela, temos que calcular todos os pontos da linha entre dois pontos dados. Para calcular pontos de linha, existem vários algoritmos básicos disponíveis, como algoritmo de desenho de linha simples, algoritmo DDA, algoritmo de linha de Bresenham, etc. Para desenhar uma linha na tela, precisamos contar todos os pontos entre dois pontos desta linha. Para calcular os pontos de uma linha reta, existem muitos algoritmos básicos que podem ser usados, como algoritmo de desenho de linha reta simples, algoritmo DDA, algoritmo de linha reta de Bresenham, etc. Manteremos nosso código de exemplo limpo e fácil de entender para o padrão do adaptador, sem escrever esses algoritmos complexos aqui. Para o padrão do adaptador, manteremos o código de exemplo simples e fácil de entender, sem escrever algoritmos tão complexos aqui.

// Hitendra Solanki
// Adapter design pattern Playground example
import Foundation
class Point {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
class LineSegment {
var startPoint: Point
var endPoint: Point
init(startPoint: Point, endPoint: Point) {
self.startPoint = startPoint
self.endPoint = endPoint
}
}
//Mark:- DrawingPad
// This is just to make example more interesting
// We are just printing the point on Console to make it simple
class DrawingPad {
//Draw Single point, main drawing method
func draw(point: Point) {
print(".")
}
//Draw multiple points
func draw(points: [Point]) {
points.forEach { (point) in
self.draw(point: point)
}
}
}
func main(){
let drawingPad = DrawingPad()
let point1 = Point(x: 10, y: 10)
drawingPad.draw(point: point1)
}
//call main function to execute code
main()
// AdapterPattern_intro.swift
No exemplo acima
No exemplo acima
Linha 6, classe Point representa um único ponto. Linha 6, classe Point representa um ponto.
Linha 16, classe LineSegment representa um segmento de linha. Linha 16, classe LineSegment representa um segmento de linha.
Linha 29, classDrawingPad representa uma tela para desenho. O DrawingPad pode desenhar um ou vários pontos em uma tela. Linha 29, classe DrawingPad representa uma tela usada para desenho. O DrawingPad pode desenhar um ou vários pontos na tela.
Podemos desenhar um ponto neste exemplo, mas não podemos desenhar um segmento de linha diretamente na tela usando uma instância de bloco de desenho. Aqui o padrão do adaptador vem em socorro, graças ao padrão do adaptador. Podemos desenhar um ponto neste exemplo, mas não podemos desenhar um segmento de linha diretamente na tela usando uma instância de prancheta. Aqui, o padrão do adaptador entra em ação, graças ao padrão do adaptador.

// Hitendra Solanki
// Adapter design pattern Playground example
import Foundation
class Point {
var x: Int
var y: Int
init(x: Int, y: Int) {
self.x = x
self.y = y
}
}
class LineSegment {
var startPoint: Point
var endPoint: Point
init(startPoint: Point, endPoint: Point) {
self.startPoint = startPoint
self.endPoint = endPoint
}
}
//Mark:- DrawingPad
// This is just to make example more interesting
// We are just printing the point on Console to make it simple
class DrawingPad {
//Draw Single point, main drawing method
func draw(point: Point) {
print(".")
}
//Draw multiple points
func draw(points: [Point]) {
points.forEach { (point) in
self.draw(point: point)
}
}
}
//Mark: LineSegmentToPointAdapter
// This is responsible to generate all points exists on LineSegment
class LineSegmentToPointAdapter {
var lineSegment: LineSegment
init(lineSegment: LineSegment) {
self.lineSegment = lineSegment
}
func points() -> Array<Point> {
//To make things simple, without complex line drawing algorithms,
//This will only work for points like below
//(10,10) to (20,20)
//(34,34) to (89,89)
//(x,y) to (p,q) where y=x and q=p i.e. (x,x) to (p,p) just to make it simple for this demo
var points: Array<Point> = []
let zipXY = zip(
(self.lineSegment.startPoint.x...self.lineSegment.endPoint.x),
(self.lineSegment.startPoint.y...self.lineSegment.endPoint.y)
)
for (x,y) in zipXY {
let newPoint = Point(x: x, y: y)
points.append(newPoint)
}
return points
}
}
func main(){
let drawingPad = DrawingPad()
//Remeber: (x,y) to (p,q) where y=x and q=p => (x,x) to (p,p) for our points logic to work
//create lineSegment
let startPoint = Point(x: 2, y: 2)
let endPoint = Point(x: 10, y: 10)
let lineSegment = LineSegment(startPoint: startPoint, endPoint: endPoint)
//create adapter
let adapter = LineSegmentToPointAdapter(lineSegment: lineSegment)
//get points from adapter to draw
let points = adapter.points()
drawingPad.draw(points: points) //it will draw total 9 dots on console
}
//call main function to execute code
main()
//AdapterPattern_simpleSolution.swift
Line45, classe LineSegmentToPointAdapter representa um adaptador que é o conceito central deste artigo. Ele pega o tipo existente LineSegment como entrada e nos fornece uma matriz de pontos em nosso caso. Line45, classe Linesegmenttopadapter representa um adaptador, que é o conceito central deste artigo. Ele recebe como entrada um tipo existente LineSegment e nos fornece uma matriz de pontos neste caso.
###Conclusão Conclusão
-
Um adaptador é qualquer classe que usa um objeto como parâmetro no construtor. Um adaptador é qualquer classe que aceita um objeto como parâmetro em seu construtor.
-
Uma classe adaptadora possui propriedades/métodos que podemos usar como o tipo necessário. A classe do adaptador possui propriedades/métodos que podem ser usados como o tipo necessário.
-
Um adaptador também pode atuar diretamente em um tipo necessário, que depende da implementação. Os adaptadores também podem reproduzir diretamente o tipo necessário, dependendo da implementação.Esta é apenas uma implementação simples do padrão adaptador na programação orientada a objetos usando Swift. Mas espere, tem algo mais e avança nesse padrão. Esta é apenas uma implementação simples do padrão Adapter na programação orientada a objetos usando Swift. Mas espere, há muito mais coisas e progressão neste modo.
O padrão de design do adaptador é mais poderoso com…. O padrão de design do adaptador é ainda mais poderoso…
Mais conteúdo em breve… Mais em breve…
Clique para visualizar o texto original: https://medium.com/flawless-app-stories/adapter-pattern-design-patterns-by-tutorials-the-power-of-oop-part-3-112a956c1101
What to read next
Want more posts about Translation?
Posts in the same category are usually the best next step for reading more on this topic.
View same categoryWant to keep following #Translation?
Tags are useful for related tools, specific problems, and similar troubleshooting notes.
View same tagWant to explore another direction?
If you are not sure what to read next, return to the homepage and start from categories, topics, or latest updates.
Back home