From Wikipedia, the free encyclopedia
Ադապտեր (անգլ.՝ Adapter), կառուցվածքային նախագծման ձևանմուշ, որը նախատեսված է օբյեկտի ֆունկցիաների կազմակերպման նպատակով հատուկ ինտերֆեյս ստեղծելու համար։
Ադապտերն համատեղում է երկու տարբեր ինտերֆեյսները։ Ինտերֆեյսները կարող են լինել անհամատեղելի, բայց ներքին ֆունկցիանալությունը պետք է համապատասխանի պահանջներին։ Ադապտերը թույլ է տալիս անհամատեղելի ինտերֆեյսներով դասերը համատեղել և այն բերել հայցողի պահանջված ինտերֆեյսին։
Գոյություն ունի երկու ձևի Ադապտեր ձևանմուշ[1].
Այս մոդելի դեպքում ադապտերն իր մեջ որպես դասի նմուշ պարունակում է փոփոխման ենթակա ինտերֆեյսով դասը։ Այս դեպքում ֆունկցիաների կանչն իրականավում է նմուշի համապատասխան ֆունկցիան կանչելով։
Այս տիպի ադապտերն օգտագործում է բազմակի պոլիֆորմ ինտերֆեյսների իրականացում կամ էլ ժառանգում է և՜ ադապտացնող դասը, և՜ ադապտացվողը։ Այսպիսով ստեղծվում է դաս միայն ինտերֆեյս ապահովելու համար։ Նման օրինակի ադապտերների օգտագործումը բնորոշ է այնպիսի ծրագրավորման լեզուներին, որոնք չեն ապահովում բազմակի ժառանգում (օրինակ Java)[1]։
using System;
namespace Adapter
{
class MainApp
{
static void Main()
{
// Create adapter and place a request
Target target = new Adapter();
target.Request();
// Wait for user
Console.Read();
}
}
// "Target"
class Target
{
public virtual void Request()
{
Console.WriteLine("Called Target Request()");
}
}
// "Adapter"
class Adapter : Target
{
private Adaptee adaptee = new Adaptee();
public override void Request()
{
// Possibly do some other work
// and then call SpecificRequest
adaptee.SpecificRequest();
}
}
// "Adaptee"
class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("Called SpecificRequest()");
}
}
}
// Target
public interface Chief
{
public Object makeBreakfast();
public Object makeLunch();
public Object makeDinner();
}
// Adaptee
public class Plumber
{
public Object getScrewNut()
{ ... }
public Object getPipe()
{ ... }
public Object getGasket()
{ ... }
}
// Adapter
public class ChiefAdapter extends Plumber implements Chief
{
public Object makeBreakfast()
{
return getGasket();
}
public Object makeLunch()
{
return getPipe();
}
public Object makeDinner()
{
return getScrewNut();
}
}
// Client
public class Client
{
public static void eat(Object dish)
{ ... }
public static void main(String[] args)
{
Chief ch = new ChiefAdapter();
Object dish = ch.makeBreakfast();
eat(dish);
dish = ch.makeLunch();
eat(dish);
dish = ch.makeDinner();
eat(dish);
callAmbulance();
}
}
// Ֆայլ Chief.java
public interface Chief {
public Object makeBreakfast();
public Object makeDinner();
public Object makeSupper();
}
// Ֆայլ Plumber.java
public class Plumber {
public Object getPipe(){
return new Object();
}
public Object getKey(){
return new Object();
}
public Object getScrewDriver(){
return new Object();
}
}
// Ֆայլ ChiefAdapter.java
public class ChiefAdapter implements Chief{
private Plumber plumber = new Plumber();
@Override
public Object makeBreakfast() {
return plumber.getKey();
}
@Override
public Object makeDinner() {
return plumber.getScrewDriver();
}
@Override
public Object makeSupper() {
return plumber.getPipe();
}
}
// Ֆայլ Client.java
public class Client {
public static void main (String [] args){
Chief chief = new ChiefAdapter();
Object key = chief.makeDinner();
}
}
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.