2008-10-15 11 views
6

¿Cuál es el término para este diseño?¿Cuál es el término para design ala "object.method1(). Method2(). Method3()"?

object.method1().method2().method3() 

..cuando todos los métodos devuelven * esto?

Encontré el término para esto hace un tiempo, pero lo perdí mientras tanto. No tengo ni idea de cómo buscar esto en google :) Además, si alguien puede pensar en un título mejor para la pregunta, no dude en cambiarlo.

Gracias

Actualización-Gishu: Después de leer sobre él, siento que tu pregunta es engañosa w.r.t. fragmento de código proporcionado .. (Siéntase libre de deshacer)

método de encadenamiento

object.method1().method2().method3() 

interfaces fluidas

private void makeFluent(Customer customer) { 
     customer.newOrder() 
       .with(6, "TAL") 
       .with(5, "HPK").skippable() 
       .with(3, "LGV") 
       .priorityRush(); 
    } 
+1

Gishu, en lugar de responder en línea como este, debe dejar un comentario o agregar otra respuesta. http://stackoverflow.com/questions/14593/what-is-the-etiquette-for-modifying-posts#14608 –

Respuesta

10

Me parece que usted está describiendo una interfaz fluida. También he oído hablar de canalización o encadenamiento.

Actualización-Gishu: http://martinfowler.com/bliki/FluentInterface.html

+0

"Interfaz fluida" está mal ...ese es un enfoque particular para la especificación concisa, legible y fluida de llamadas a través de invocaciones sucesivas contra el valor de retorno de la función miembro anterior, pero cada función miembro no necesita devolver una referencia a '* this': podría ser alguna otra clase por completo. La programación fluida utiliza el método de encadenamiento como una técnica, pero cualquiera puede existir sin la otra. –

+0

@TonyD Dado que esta es la respuesta aceptada, tal vez la pregunta estaba mal redactada y el OP realmente se refería a la programación de API que se usan de forma muy similar. Esto es bastante típico de las API denominadas "fluidas". – jpmc26

+0

@ jpmc26: eso es posible, y las interfaces fluidas son dignas de mencionarse como un caso de uso particular de encadenamiento de métodos (junto con el idioma del parámetro nombrado), pero no ayuda a los futuros visitantes a esta pregunta ... la respuesta debería abordar la pregunta en realidad preguntó. Eso es particularmente importante ya que otras preguntas se han cerrado como duplicados de esta, por lo que no es solo el OP aquí con un interés en tener una respuesta de sonido. –

10

encadena estas llamadas de método, por lo que este se llama method chaining

8

Por lo general, se llama método de encadenamiento. Un ejemplo de su aplicación es el Named Parameter Idiom.

Por otro lado, me parece divertido que la búsqueda en Google de "object method1 method2" aparezca exactamente en la página que estaba buscando. :)

2

encadenamiento es un nombre más común en la industria y la mayoría de los desarrolladores al menos han oído hablar de él, mientras que la interfaz fluida es más académica y mucha gente no tendrá idea de qué estás hablando.

3

Se llama Method Chaining. A modo de ejemplo, hay una biblioteca de impulso que proporciona una forma de encadenamiento de asignar en un envase antes corsé-inicialización dio la vuelta (Boost.Assignment):

vector<int> v; 
v += 1,2,3,4,5,6,7,8,9; 

typedef pair< string,string > str_pair; 
deque<str_pair> deq; 
push_front(deq)("foo", "bar")("boo", "far"); 

Por lo general, sin embargo, se ve más en otros idiomas que hacer cosas como el abastecimiento un fluent interface:

FluentGlutApp(argc, argv) 
    .withDoubleBuffer().withRGBA().withAlpha().withDepth() 
    .at(200, 200).across(500, 500) 
    .named("My OpenGL/GLUT App") 
    .create(); 

no veo que sea mucho en C++ personalmente, fuera del streaming.

Cuestiones relacionadas