miércoles, abril 05, 2006

El patrón de diseño singleton

Bueno antes de empezar a hablar como perico acerca de este patrón de diseño déjenme les doy el significado de singleton sacado de wilipedia (le enciclopedia del pobre).

“Generally, a singleton is something which exists alone in some way”

Para los que solo hablan perro ahí les va la traducción al español
“generalmente un singleton es algo que existe solo de cierta manera”

Ahora vamos a definir lo que es un patrón de diseño
a design pattern is a general repeatable solution to a commonly-occurring
problem
En perro
un patrón de diseño es una solución representada de manera generar para un
problema recurrente
Ok entonces juntando las dos definiciones tenemos que un patrón de diseño singleton es la manera en la cual podemos restringir la creación de una clase a uno o solo algunos objetos.
Pero que chingados quiere decir eso, bueno esto quiere decir que es una manera en la cual yo voy a diseñar mi clase para que solo se pueda crear una instancia de la misma o dicho de otro modo es la manera en la cual una clase solo puede crear un objeto.

Ya le van agarrando, bueno ya se que algunos de ustedes se están haciendo la siguiente pregunta --para que chingados quiero yo un madre de estas, de que me sirve que una clase tenga una instancia solamente. Para contestar la pregunta imaginemos esta situación,

Ustedes están a cargo de desarrollar el modulo de contabilidad de un programa administrativo el cual cuanta con una arquitectura de tres capas. La capa de usuario reside en la PC del usuario, los objetos del negocio residen en un servidor central el cual para acabarla de joder esta en la china o algún otro lugar bien lejos del usuario. Y la capa de datos esta en un servidor juntito a la base de datos. Ok tu como desarrollador necesitas validar ciertas reglas de negocio, para hacer esto necesitas crear un objeto de una clase llamada bisRuleEngine la cual como parte de su comportamiento carga todas las reglas de negocio en una colección interna.

Suponiendo que tu quieres usar ese objeto, lo que tendrías que hacer al cargar la forma seria algo como esto

rules = new bisRuleEngine ( );

y donde necesites evaluar la regla de negocio usarías algo así

if (rules.eval (“ruel0001”) == true ) {
…….
}


Pero o sorpresa el triste objeto cada ves que lo instancias se tiene que serializar desde el servidor en donde reside la clase con todo el montón de reglas de negocio (asumamos que el guey que lo diseño era un pendejo y que diseño el motor de reglas para que cargara TODAS la reglas de una base de datos,, que para dramatizar nuestro ejemplo son como 5000).
Ahora supongamos que tu desarrollo abarca varias pantallas las cuales están en diferentes dlls, jars, o cualquier otro tipo de librería que gustes y mandes, te imaginas que lentitud seria que cada vez que el usuario abra una pantalla, esta cree un objeto de reglas de negocio y que al hacer esto se tenga que serializar desde el servidor en china, y para colmo la serializada es en XML y tu triste usuario cuenta con una conexión daill up de 56k.. A mi me han mentado la madre por menos que eso.

Ahora ya vez la utilidad del patrón de diseño singleton, en teoría la instanciada solo se haría una vez y después esa instancia se podría reutilizar a lo largo de la vida de la aplicación. Y digo en teoria porque estas a la merced del alcnce de vida del objeto, aquí se tendria que implementar un diseño para que nos permitiera compartir los objetos entre formas o algo así, pero eso es arquitectura.

Ok suena chido pero como se le hace para implementar este patron de diseño? Bueno primero que nada necesitamos un lenguaje que soporte características orientadas a objetos. Y cual lenguaje creen ustedes que seleccione para mi ejemplo? brujos!!!! PHP.


  1. Para la implementación de este patrón de diseño vamos a seguir los siguientes pasos.
  2. Necesitamos descara una variable estática que contendrá la instancia de mi clase
    Hacemos el constructor la clase privado para prevenir que la clase se instancie directamente, o sea utilizando la palabra reservada new.
  3. Creamos un método publico con cualquier nombre (a mi me gusta usar getInstance porque se oye chingon y hasta parece que se lo que estoy haciendo) este método va a ser responsable de crear la instancia de la clase o de regresar la instancia existente.
    En lugar de crear la instancia con la palabra reservada new se crea con el método getInstance ya que si se utiliza new falla porque el constructor es privado.

    Y pues aquí esta el código

    class bisRuleEngine {
    // Necesitamos descara una variable estática que contendrá la instancia de mi clase
    private static $instance;
    private $messageText;

    // Hacemos el constructor la clase privado para prevenir que la clase se instancie directamente, o sea utilizando la palabra reservada new.

    private function __construct ( ) {
    }

    // Creamos un método publico con cualquier nombre
    public function getInstance ( ) {
    if ( self::$instance == NULL ) {
    self::$instance = new bisRuleEngine ( );
    }

    return self::$instance;
    }

    // metodos de prueba para demostrar que sigo usando la misma instancia
    public function Evaluate ( ruleNo ) {
    return true;
    }

    public function setMessageText ( $value ) {
    $this->messageText = $value;
    }

    public function getMessageText ( ) {
    return $this->messageText;
    }

    function Show ( $msgId ) {
    if ( $msgId == 1 ) {
    echo "Mensaje informativo 1 \n";
    }
    else if ( $msgId == 2 ) {
    echo "Mensaje de error 2 \n";
    }
    }

    }



    Eso es todo por el momento nos vemos luego, cuídense y no coman tierra.

    Saludos.

34 Comments:

At agosto 18, 2006 9:37 a.m., Anonymous Anónimo said...

El ejemplo es correcto pero un poco simplista ya que no es thread safe.
Dos diferentes threads evaluan la $instance == null como true.
chequea aqui http://www.yoda.arachsys.com/csharp/singleton.html
para ver distintas formas de implementar el pattern singleton

 
At septiembre 28, 2006 11:50 p.m., Anonymous Anónimo said...

Good design!
[url=http://owmafgjv.com/oekr/abso.html]My homepage[/url] | [url=http://sfissbpx.com/uuuy/wmmp.html]Cool site[/url]

 
At septiembre 28, 2006 11:50 p.m., Anonymous Anónimo said...

Nice site!
My homepage | Please visit

 
At septiembre 28, 2006 11:50 p.m., Anonymous Anónimo said...

Thank you!
http://owmafgjv.com/oekr/abso.html | http://hsqlnygw.com/ayei/qder.html

 
At septiembre 16, 2007 8:07 p.m., Blogger RhapsodyOfFire said...

Me gusto el post, muy fácil de comprender, aunque existen palabras que no las entendí como chingados, chingon, perro, Chihuahua, XD;
Saludos

 
At mayo 22, 2009 3:56 p.m., Blogger Gentle Lunatic said...

Una pregunta: Para que me sirve usar un constructor privado? Para que quiero un constructor que no se puede instanciar? Cual es la finalidad o utilidad del constructor privado?
Gracias =)

 
At enero 20, 2010 12:18 a.m., Anonymous Anónimo said...

[color=red]The Most Affordable XRUMER/BACKLINK SERVICE Online!
The EFFORTLESS and POWERFUL WAY TO BUILD MASSIVE # OF BACKLINKS
[color=black]
200,000 BLASTS of your URLs+ Anchor Tex, message, pictures (can be spinned) etc
$10 USD (shared with other clients like a carpool), or
$25/200k for exclusive!(you control EVERYTHING)
$50 Exclusive @ 500,000 blasts.
(Complete reports will be given to clients)

[IMG]http://img697.imageshack.us/img697/1540/arrowdownh.gif[/IMG]
For orders, questions or concerns? Email: [u]formless.void47 at gmail.com [/u]
Note:
1. For STRICT Whitehat sites, it is advised to create buffers to pass on linkjuice. i.e. social bookmarks, cloaked pages etc.
You can blast the site directly, but it entails risk.
Using buffers are 100% safe, speaking from experience.
2. Xrumer is a very technical tool. Just describe to me what sorts of effects you want and well make it happen!
If you want to buy Xrumer?
>>>>> http://cloakedlink.com/chzgykebsd <<<<<<

[color=black]
-------
CLIENT 2 SAMPLE SPACE FILLED WITH URLs,Pics and Keywords
seo websites website seo seo leeds seo book seo nz seo writing seo kolkata link buying Buy Pr5 Link to xrumer seo north london seo roi houston seo boston seo search engine optimization service minnesota seo seo gujarat seo network seo industry in house seo Xrumer Forum List seo company bangalore denver seo firm seo cv seo audit seo validator search engine optimization tutorial seo benefits seo seminar chicago seo pros submit to search engines ranking seo services seo rates seo management software seo software uk miami seo seo rochester ny seo optimise best keywords top seo xrumer 4 canadian seo seo lincolnshire french seo top seo tools blackhat seo surrey traffic travis seo seo doctor buy backlinks

-----
CLIENT 3 SAMPLE SPACE
[url=http://provenheightincrease.co.cc/ebook/height-growth-medicine]height growth medicine[/url] http://provenheightincrease.co.cc/ebook/height-growth-medicine

[url=http://herpescures.co.cc/drugs/Herpes-Cure-Future-Genital-Herpes-Testing-Child-Herpes.html]herpes cure future genital herpes testing child herpes[/url]

http://seedsfarmers.com/story.php?title=More_Web_Site_Traffic-11

[url=http://markjaquith.wordpress.com/2009/12/15/how-should-your-post-has-been-saved-view-post-links-open/]PleoUgobeBabyDinosaurPleoUgobeLifeFormRoboticInteractiveAutonomousDinosaur[/url]


-----
CLIENT 4 SAMPLE SPACE
[url=http://provenheightincrease.co.cc/ebook/installing-stair-rail]installing stair rail[/url] http://provenheightincrease.co.cc/ebook/installing-stair-rail

[url=http://growyourdick.co.cc/penile/extamax-male-enhancement]extamax male enhancement[/url] http://growyourdick.co.cc/penile/extamax-male-enhancement

http://www.discountperfumes.fragrance-direct.info/Where-to-Buy-Cologne-Mens-Cologne.html

http://buycheapplasmatv.info/cgi-bin/index.pl?=comparison-tv [url=http://buycheapplasmatv.info/cgi-bin/index.pl?=comparison-tv]comparison tv[/url]

[url=http://teethwhiteningstripsreviews.info/xr/blistering]toith whitening New Zealand utah teeth whitening Highland program North Battleford pain Bakersfield Coleraine lancaster ohio teeth whitening[/url]

-----
CLIENT 5 SAMPLE SPACE
[url=http://cheapxrumerservice.co.cc]Cheap Xrumer Service[/url]
[url=http://cheapxrumerservice.co.cc]Cheapest Xrumer Service[/url]
[url=http://cheapxrumerservice.co.cc]Best Xrumer Service[/url]
--------
http://buypleodinosaur.livejournal.com/data/rss

http://cheaphdtvplasma.co.cc/television/gateway-plasma-tv [url=http://cheaphdtvplasma.co.cc/television/gateway-plasma-tv]gateway plasma tv[/url]

[url=http://stopacaiberryscams.info/cgi-bin/index.pl/acai-berry-weight]acai berry weight[/url]

 
At febrero 06, 2010 9:28 a.m., Anonymous Anónimo said...

Yes undoubtedly, in some moments I can phrase that I approve of with you, but you may be inasmuch as other options.
to the article there is quiet a definitely as you did in the go over like a lead balloon a fall in love with delivery of this request www.google.com/ie?as_q=somatropin hgh side effects ?
I noticed the utter you procure not used. Or you use the dark methods of development of the resource. I take a week and do necheg

 
At febrero 07, 2010 7:41 p.m., Anonymous Anónimo said...

webmaster acute wrap relies faso constraints fjermestad dirty mathura chartered reshipment
lolikneri havaqatsu

 
At abril 07, 2010 10:16 a.m., Anonymous Anónimo said...

[url=http://citizenblogs.com/?u=videoseadamina5]SWiJ FLV to All Converter[/url] [url=http://www.drawingboard.org/blogs/?u=videoseariella3]PlayClaw[/url]
Xe-Encoder EX Allok 3GP PSP MP4 iPod Video Converter 4.8.0310
http://www.pinskerdream.com/bloghoster/?u=videosealyse7 dvdXsoft PSP Video Converter 1.0
[url=http://www.pinskerdream.com/bloghoster/?u=videosealanis6]WinMediaConverter[/url] [url=http://community.freeskier.com/profiles/profile.php?user_id=27434]JW Player for Silverlight[/url]
KingConvert HD Video Converter Network Recon DVD 2008 Pro
http://www.adulthostedblogs.com/?u=videoseariadne8 KingConvert DPG Video Converter
Plato Video to iPod Converter 5.86
my icq:858499940385

 
At noviembre 22, 2012 6:25 p.m., Anonymous Anónimo said...

Peyton Manning Broncos Jersey axiotakix
Larry Fitzgerald Authentic Jersey axiotakix
Demaryius Thomas Jersey axiotakix
http://www.nikechicagobearsshop.com

 
At diciembre 05, 2012 5:13 p.m., Anonymous Anónimo said...

[b][url=http://www.uggclearancewebsite.com/]ugg boots outlet[/url][/b] Owning reported that, it really is not that hard to discover very good bargains. But ensure you go early in the working day to stop crowds of holidaymakers and Under no circumstances go for anyone who is cranky, fatigued, or hungry. You can likewise just go back to your hotel and go early the next day. The shell is almost their epidermis that appears to be permanently hooked up to their bodies. This can be the really point that is certainly the most closest to them. It seems they can not live with no it.

[b][url=http://www.hotsalelouisvuittonstore.co.uk/]louis vuitton handbags[/url][/b] There are many goods which baby will want whilst they may be by, that include attire, swapping yoga physical exercise mat, diapers, foodstuff, playthings and lots of a lot more. Resilient - Some everyday nappy handbags are normally busted. Each one of these strong rewards you'll find at personalized designed purses can be suited ought to anybody ever ordinarily just take your toddler on excursions.

[b][url=http://www.uggclearancewebsite.com/]uggs clearance[/url][/b] We also really have to sustain our countrywide unity inside the south. Our chief, Salva Kiir Mayardit, has stored us all united. We simply cannot deny that we have now issues, however. One huge advantage of both of those disposable and non-disposable food stuff heaters is the fact they use no electrical energy, with no wires to journey more than. The sterno fuel burns for hours keeping food warm, no challenge. Because they high temperature water under your food, the moist heat is evenly dispersed and burning or drying is minimized..

[b][url=http://www.besthandbagstore.co.uk/]louis vuitton outlet[/url][/b] I am in no way into the Louis Vuitton monogram bags in profound colours as they are so gloomy but I just can not enable shedding myself from the pink realm wherever only cheer-up colours welcome my arrival. What is actually more, the Suede lining is while in the same pleasant pink. My regular essentials can lay fortunately on this excellent earth..

[b][url=http://www.louisvuittonsalesstoreus.com/]louis vuitton outlet[/url][/b] There outside of the a number of exceptional scientific approaches and also for bladder most cancers treatment: chemotherapy, intravesical treatment, radiotherapy ,and also surgical therapy. Amongst heading for being the various looked into and normally a fantastic option method and for bladder cancer therapy is definitely the fact that introducing a agent often known as BCG as element with the cancers impacted bladder. With regard to planning to be the really 1st 5 to master more details on 6 weeks, BCG may be the motive that operate since you've received any and all seven days pertaining to bladder most cancers remedy.

 
At enero 02, 2013 7:15 a.m., Anonymous Anónimo said...

It is two people in contact cheap ghd.
I really don't know cheap nfl jerseys china.
S4q0n botas ugg baratas
E2o4g ghd hair straighteners
this The Company shall not be returned purple ghd straighteners.

 
At enero 09, 2013 4:06 p.m., Anonymous Anónimo said...

dKym ghd hair
xRlj ugg boots uk
nWpj michael kors bags
5xUgk GHD
4gUdn burberry bags
5fJqi bottes ugg pas cher
0uFzp ghd
5wPte louis vuitton handbags
4pBgs michael kors purses
2gEdl ghd straighteners
3rGfn ugg uk
0xBnj nfl jerseys
9gZvv michael kors bags
1nIjl lisseur ghd pas cher
0yBkm ugg boots

 
At enero 09, 2013 9:22 p.m., Anonymous Anónimo said...

zKzi ghd hair
zEvn ugg sale
rKzm michael kors outlet
3vVej GHD Hair Straightener
0hOuv burberry purses
5rOdf bottes ugg
3yUxo ghd hair straighteners
3xCsz louis vuitton bags
8iCxo michael kors bags
1rXwv ghd hair straightener
8qMrd ugg boots uk
9jGcr cheap nfl jerseys
4sBgy michael kors outlet
1dAsv ghd france
7cJae discount ugg boots

 
At enero 10, 2013 10:11 p.m., Anonymous Anónimo said...

qZsa ghd
hHzc ugg boots sale uk
nKwu michael kors outlet
0cPsi cheap ugg boots
9qWho chi hair straightener
3zUsl michael kors sale
7hKyr nike nfl jerseys
2oZdb ghd
3pDva north face outlet
2sRhj ugg online
2dIzq ghd outlet
2hSrx michael kors purse
8sMdw nfl jerseys
9zQoo ghd baratas
4rQpk ugg sale

 
At enero 10, 2013 10:12 p.m., Anonymous Anónimo said...

nCvn cheap ghd
uCum cheap ugg boots uk
pNnp michael kors purses
2zUuc ugg uk
4nSys chi iron
6tQbk michael kors purses
6mIwt cheap nfl jerseys
8eSyy ghd hair straighteners
8nCmx cheap north face jackets
7mSlc ugg españa
0ePjd ghd iv
4lTox michael kors
6pTgi nfl shop canada
8aFxc ghd planchas
5xRvn cheap ugg

 
At enero 16, 2013 2:31 p.m., Anonymous Anónimo said...

Hello. Facebook takes a [url=http://www.onlinebaccarat.gd]baccarat[/url] stick on 888 casino grapple with: Facebook is expanding its efforts to introduce real-money gaming to millions of British users after announcing a wrestle with with the online gambling found search for 888 Holdings.And Bye.

 
At enero 21, 2013 10:23 a.m., Anonymous Anónimo said...

AnsFvo http://kuroebaggu.com/ BzlKsf [url=http://kuroebaggu.com/]クロエ バッグ[/url] ItwYjy http://saiyasunerubutan.com/ HpsLpm [url=http://saiyasunerubutan.com/]クリスチャンルブタン 財布[/url] WimPcd http://mcmhannbai.com/ YrfZbg [url=http://mcmhannbai.com/]MCM 長財布[/url] MgaPuq http://vuittonkakaku.com/ YwfRps [url=http://vuittonkakaku.com/]ヴィトン 長財布[/url] ZioGyt http://chloenihon.com/ BmiVkl [url=http://chloenihon.com/]クロエ 通販[/url] SieRgc http://louboutindendou.com/ QwzGsw [url=http://louboutindendou.com/]クリスチャンルブタン パリ[/url] NzvPap http://guccisenmon.com/ BbaUmc [url=http://guccisenmon.com/]グッチ 長財布[/url] LudRdo http://tuminihoo.com/ MixPiq [url=http://tuminihoo.com/]TUMI レザー[/url]

 
At marzo 02, 2013 6:48 p.m., Anonymous Anónimo said...

[url=http://longchampsacsa.blog.galeon.com/]sac longchamps[/url] Our company was originally set up in Shenzhen, China in 2007, aiming to operate the business-to-customer transactions with overseas consumers. Our operation capabilities cover favorable policy, instant and safe delivery, privacy protection and well-rounded customer support. Up-to-date Mulberry Elkington Natural Leather Briefcase Black for Men,Quality Guarantee Mulberry Handbags UK! Hope to build a business relationship with you.
[url=http://quizilla.teennick.com/user/longchampsoldesa/journal/]longchamp soldes[/url] Inflatable whitewater kayaks come as sit-in and sit-on kayaks. Experienced kayakers usually use sit-in kayaks, which have a small cockpit for sitting while paddling. Sit-in whitewater kayaks come in solo and tandem models. I am a fashon handbags designer, share you tsimple guidelines on purchasing a new vintage leather bags, messenger bags or canvas backpack. If you are a member of the fashion lovers who like adorning themselves with fashion accessories and are Mulberry Bags Has many Different Styles And Colors, Shop Favorite Mulberry Zip Printed Leather Purse Light Coffee for Women supply cheap looking for stylish handbags to compliment themselves, then designer hobo bags must be your essential choice. Based on the stylish exquisite ornaments, delicate Gucci hobo handbags are the most popular goods in the present market.
[url=http://longchampmoi.web.wox.cc/blog/]longchamp soldes[/url] Any time you get Private coach, acquire an extra chosen lifestyle solution, just not a very simple adornment. Dissimilar to cheaper accessories in addition to hand bags, Advisor Products and solutions essentially strengthen together with era. The right winnings can take your old twosome of comfortable jeans and stroll it into the equip Top Seller Mulberry Outlet Sale Women's Alexa Pebbled Beige Large Silky Snake Print Bags at auction of the century, while viewing off your actual discern of comfort.. DOB's head is white and has colors swirled and textured on top of the white. This then shifts the focus to the head because the white contrasts all the color surrounding Mr. DOB's head.. All girls' parents enjoy showing their teenage daughters their appreciation and teenage girls overjoyed when their own parents indicate that they really are giving attention to all that their little girls really want. Just right for gift-giving, special occasions or as a delightful surprise. Designer bags can make any girl so very happy.

 
At abril 03, 2013 11:12 p.m., Anonymous Anónimo said...

Aftеr I initially commentеԁ I appear to hаve clickeԁ on the -Notify me when nеw commеnts are
added- checkbox and now every time a comment is added I
recieve four emаils with thе ѕаmе cоmment.
Perhаps theге is an еasy method уou can rеmovе me from that serviсe?
Many thanks!

Taκe a look at mу web-site get no hands seo

 
At mayo 27, 2013 2:43 p.m., Anonymous Anónimo said...

When I initially commented I clicked the "Notify me when new comments are added" checkbox and now each time a comment
is added I get several e-mails with the same comment. Is there any way you can remove people from that service?
Appreciate it!

Look at my weblog ヴィトンバッグ

 
At mayo 27, 2013 2:47 p.m., Anonymous Anónimo said...

You can certainly see your skills within the article you write.
The sector hopes for more passionate writers such as you
who are not afraid to mention how they believe. At all times follow your
heart.

Here is my website; アバクロンビー

 
At mayo 27, 2013 2:50 p.m., Anonymous Anónimo said...

This blog was... how do I say it? Relevant!! Finally I've found something that helped me. Thanks a lot!

Have a look at my website; www.balchfamily.com

 
At mayo 27, 2013 2:51 p.m., Anonymous Anónimo said...

Hey there, You've done a fantastic job. I'll certainly digg it and personally recommend to my friends.
I am sure they'll be benefited from this website.

Also visit my web blog ... シャネル販売

 
At mayo 27, 2013 2:51 p.m., Anonymous Anónimo said...

Somebody essentially lend a hand to make seriously
posts I would state. That is the first time I frequented your website page and up
to now? I amazed with the research you made to make this actual submit extraordinary.
Great process!

my webpage erjon.write2me.nl

 
At mayo 27, 2013 2:59 p.m., Anonymous Anónimo said...

Very quickly this web page will be famous amid all blog people,
due to it's fastidious articles or reviews

Here is my web blog :: サングラスレイバン

 
At mayo 27, 2013 3:02 p.m., Anonymous Anónimo said...

It's actually a cool and helpful piece of information. I am satisfied that you just shared this useful info with us. Please stay us informed like this. Thank you for sharing.

Here is my blog post - monsterbeatsphones-vip.com

 
At mayo 27, 2013 3:04 p.m., Anonymous Anónimo said...

I love reading an article that will make men and
women think. Also, many thanks for allowing me to comment!


My page: ヴィトン財布

 
At mayo 27, 2013 3:04 p.m., Anonymous Anónimo said...

For most recent news you have to pay a visit web and
on the web I found this web page as a most excellent
site for latest updates.

My web-site: ヴィトンバッグ

 
At mayo 27, 2013 3:21 p.m., Anonymous Anónimo said...

I constantly spent my half an hour to read this blog's articles everyday along with a mug of coffee.

my blog post :: シャネル財布

 
At mayo 27, 2013 3:33 p.m., Anonymous Anónimo said...

It's wonderful that you are getting ideas from this paragraph as well as from our argument made at this place.

Visit my blog post: レイバン サングラス

 
At junio 03, 2013 6:00 a.m., Anonymous Anónimo said...

Hello mates, how is all, and what you want to say about this paragraph, in my view its truly amazing designed for me.



My weblog: シャネルバッグ新作

 
At junio 03, 2013 6:54 a.m., Anonymous Anónimo said...

I've been surfing on-line more than 3 hours these days, yet I never found any attention-grabbing article like yours. It's pretty worth enough for me.
Personally, if all website owners and bloggers made excellent content as
you probably did, the internet will be much more helpful than ever before.


Feel free to surf to my homepage - ヴィトンバッグ

 

Publicar un comentario

<< Home