The use of design patterns in ANDROID-create-mode

Source: Internet
Author: User
<span id="Label3"></p><span style="font-size:14px"><span style="font-size:14px"></span></span><span style="font-family:宋体; font-size:14px"><span style="font-family:宋体; font-size:14px"></span></span><p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">A pattern is a fixed way of solving a problem in a Situation.</span></p></p><p><p></p></p><span style="font-family:Microsoft YaHei; font-size:14px"><span style="font-family:Microsoft YaHei; font-size:14px"></span></span><p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">All of the created patterns are used as a workaround for object creation or Instantiation.</span></p></p><span style="font-family:Microsoft YaHei; font-size:18px"><span style="font-family:Microsoft YaHei; font-size:18px"><strong></strong></span></span><span style="font-size:14px"><span style="font-size:14px"><span style="font-family:Microsoft YaHei"> <span lang="EN-US">1<span> </span> </span> simple Factory mode</span></span></span><span style="font-family:Microsoft YaHei; font-size:14px"><span style="font-family:Microsoft YaHei; font-size:14px"></span></span> <blockquote> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">The simplest way to create an object is to use <span lang="EN-US">new</span> to create an object, assuming that you create only a fixed object <span lang="EN-US">, and</span> that you can use <span lang="EN-US">new</span> to create the Object.</span></p></p> <span style="font-family:Microsoft YaHei; font-size:14px"><span style="font-family:Microsoft YaHei; font-size:14px"></span></span> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">If you want to create different types of objects based on different scenarios, you may need to use different methods to make use of different patterns and summarize them.</span></p></p> <p><p><span style="font-family:Microsoft YaHei"><span style="font-size:14px">such as the <span lang="EN-US">ANDROID</span> Media frame in order to achieve the playback of different media sources, you need to implement a variety of player objects, and may need to base on the support of the media type additions, the Player object is constantly added.</span></span></p></p> <p><p><span style="font-size:10.5pt"></span><span style="font-size:10.5pt"></span><br></p></p> <span style="font-family:宋体; font-size:10.5pt"><span style="font-family:宋体; font-size:10.5pt"></span></span> <p><p></p></p> <pre class="html" name="code" code_snippet_id="432966" snippet_file_name="blog_20140722_1_6366041"> Sp<mediaplayerbase> p; Switch (playertype) {case sonivox_player:alogv ("create MidiFile"); p = new MidiFile (); Break Case STAGEFRIGHT_PLAYER:ALOGV ("create stagefrightplayer"); p = new stagefrightplayer; Break Case NU_PLAYER:ALOGV ("create nuplayer"); p = new nuplayerdriver; Break Case TEST_PLAYER:ALOGV ("Create TEST PLAYER stub"); p = new Testplayerstub (); Break Case AAH_RX_PLAYER:ALOGV ("create [email protected] RX PLAYER"); p = Createaah_rxplayer (); Break Case AAH_TX_PLAYER:ALOGV ("create [email protected] TX PLAYER"); p = Createaah_txplayer (); break, #ifdef build_with_mst case MST_PLAYER:ALOGV ("create mstplayer"); p = new mstplayer; break; #endif default:aLOGE ("Unknown player type:%d", playertype); Return NULL; }</pre> <span style="font-size:14px"><span style="font-size:14px"></span></span> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">The above code may need to be constantly changed as the media type supported for playback is Added. therefore, in order to meet the "open and close design principle" (the change is closed to the expansion of opening). It is necessary to implement the creation function of the media Player object in different Mode.</span></p></p> <p><p></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">An easy way to do this is to put the above code in a function that creates a player. This is also the model used by <span lang="EN-US">ANDROID4.2</span> 's version number, also known as the static Factory mode of the simple factory.</span></p></p> <p><p>As you can see in the Following:</p></p> <p><p><span style="font-size:14px"></span></p></p> <pre class="html" name="code" code_snippet_id="432966" snippet_file_name="blog_20140722_2_4304727">Static sp<mediaplayerbase> createplayer (player_type playertype, void* cookie, notify_callback_f NotifyFunc) { Sp<mediaplayerbase> p; Switch (playertype) {case sonivox_player:alogv ("create MidiFile"); p = new MidiFile (); Break Case STAGEFRIGHT_PLAYER:ALOGV ("create stagefrightplayer"); p = new stagefrightplayer; Break Case NU_PLAYER:ALOGV ("create nuplayer"); p = new nuplayerdriver; Break Case TEST_PLAYER:ALOGV ("Create TEST PLAYER stub"); p = new Testplayerstub (); Break Case AAH_RX_PLAYER:ALOGV ("create [email protected] RX PLAYER"); p = Createaah_rxplayer (); Break Case AAH_TX_PLAYER:ALOGV ("create [email protected] TX PLAYER"); p = Createaah_txplayer (); break, #ifdef BUILD_WITH_MST Case mst_player: ALOGV ("create mstplayer"); p = new mstplayer; break; #endif default:aloge ("Unknown player type:%d", playertype); Return NULL; } sp<mediaplayerbase> p; Switch (playertype) {case sonivox_player:alogv ("create MidiFile"); p = new MidiFile (); Break Case STAGEFRIGHT_PLAYER:ALOGV ("create stagefrightplayer"); p = new stagefrightplayer; Break Case NU_PLAYER:ALOGV ("create nuplayer"); p = new nuplayerdriver; Break Case TEST_PLAYER:ALOGV ("Create TEST PLAYER stub"); p = new Testplayerstub (); Break Case AAH_RX_PLAYER:ALOGV ("create [email protected] RX PLAYER"); p = Createaah_rxplayer (); Break Case AAH_TX_PLAYER:ALOGV ("create [email protected] TX PLAYER"); p = Createaah_Txplayer (); break, #ifdef build_with_mst case MST_PLAYER:ALOGV ("create mstplayer"); p = new mstplayer; break; #endif default:aloge ("Unknown player type:%d", playertype); Return NULL; }</pre> <span style="font-size:14px"><span style="font-size:14px"></span></span> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"><span style="font-family:Calibri"><span></span></span> of <span style="font-family:Microsoft YaHei">course, You can also put the code above to create the player object into a factory class. </span></span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"><span style="font-family:Microsoft YaHei">The <span lang="EN-US">phonefactory</span> class in the <span lang="EN-US">ANDROID</span> system is a simple factory class that provides <span lang="EN-US">Makedefaultphones</span>,<span lang="EN-US">getgsmphone</span>, <span lang="EN-US">getcdmaphone</span>,<span lang="EN-US">getdefaultphone</span>,<span lang="EN-US">makesipphone</span> and other factory functions to create and obtain different types of <span lang="EN-US">Phone</span> Objects.</span></span></p></p> <p><p></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">The Simple factory model above, Although able to change the code in one place, but still does not meet the "open and close design principle", also does not meet the design principles for interface programming, So in the extension of the function or need to change the relevant Code.</span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"><span style="font-family:Microsoft YaHei">the <span lang="EN-US">Phonefactory</span> Factory class also has a problem: in order to create different types of <span lang="EN-US">phone</span> objects, You need to call different factory functions of the <span lang="EN-US">phonefactory</span> factory class, Even though they create the <span lang="EN-US">phone </span>objects are subclasses of the <span lang="EN-US">Phone</span> .</span></span></p></p> <p><p></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">To solve the problem of the simple factory pattern Above. It is necessary to use another two factory models: the factory method and the abstract factory <span lang="EN-US">,</span> a way of inheriting the class <span lang="EN-US">, and</span> a combination of objects.</span></p></p> <span style="font-family:Cambria"><span style="font-family:Cambria"><span lang="EN-US">2<span> </span> </span></span></span>Factory method of Plant mode <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt">the <span style="font-family:宋体"><span style="font-family:Microsoft YaHei; font-size:14px">Factory method pattern defines a common abstract interface in the common parent class where the object is to be created</span></span> <span style="font-family:Microsoft YaHei; font-size:14px">to return the object created by the detail class. The detailed object returned by the interface is actually created in the creation function of the implementation public abstract interface of the detail class. </span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"><span style="font-family:Microsoft YaHei"><span style="font-size:14px"><span lang="EN-US"></span> intent: defines an interface for creating an object in an abstract class. Let the detail class create detailed Objects.</span></span></span></p></p> <p><p><span style="font-family:Microsoft YaHei; font-size:14px">The <span lang="EN-US">UML</span> structure class diagram for the factory method is:</span></p></p> <p><p><span style="font-family:Microsoft YaHei"><span style="font-size:14px"><span style="font-size:10.5pt"></span></span></span><br></p></p> <p><p><span style="font-family:Microsoft YaHei; font-size:14px">The <span lang="EN-US">Mediarouteprovider</span> class in the media routing framework of the <span lang="EN-US">ANDROID</span> system is the use of the factory method Pattern.</span></p></p> <p><p><span style="font-family:宋体"></span></p></p> <p><p><span style="font-family:宋体"><br></span></p></p> <p style="margin:0cm 0cm 0pt"><span style="font-size:14px"><span style="font-family:Microsoft YaHei">Abstract class<span lang="EN-US"><span lang="EN-US">Mediarouteprovider</span></span>Provides a Create<span lang="EN-US"><span lang="EN-US">Routecontroller</span></span>Public interface of the object<span lang="EN-US"><span lang="EN-US">Oncreateroutecontroller</span></span>, used to return a<span lang="EN-US"><span lang="EN-US">Mediarouteprovider.routecontroller</span></span>Object<span lang="EN-US"><span lang="EN-US">Mediarouteprovider.routecontroller</span></span>The details of the object are actually determined by<span lang="EN-US"><span lang="EN-US">Mediarouteprovider</span></span>The details of the derived class in its<span lang="EN-US"><span lang="EN-US">Oncreateroutecontroller</span></span>The function is responsible for creating The. Such as<span lang="EN-US"><span lang="EN-US">Mediarouteprovider</span></span>The derived class<span lang="EN-US"><span lang="EN-US">Registeredmediarouteprovider</span></span>In its<span lang="EN-US"><span lang="EN-US">Oncreateroutecontroller</span></span>The function creates a detailed type of<span lang="EN-US"><span lang="EN-US">Registeredmediarouteprovider.controller</span></span>Of<span lang="EN-US"><span lang="EN-US">Mediarouteprovider.routecontroller</span></span>Object<span lang="EN-US"><span lang="EN-US">Mediarouteprovider</span></span>The indirect derived class<span lang="EN-US"><span lang="EN-US">Systemmediarouteprovider.legacyimpl</span></span>And<span lang="EN-US"><span lang="EN-US">Systemmediarouteprovider.jellybeanimpl</span></span>In the respective<span lang="EN-US"><span lang="EN-US">Oncreateroutecontroller</span></span>function to create a separate<span lang="EN-US"><span lang="EN-US">Mediarouteprovider.routecontroller</span></span>The two detailed objects:<span lang="EN-US"><span lang="EN-US">Systemmediarouteprovider.defaultroutecontroller</span></span>And<span lang="EN-US"><span lang="EN-US">Systemmediarouteprovider.systemroutecontroller</span></span>。<span style="font-size:14px"><span style="font-size:14px"></span></span></span></span><span style="font-size:14px"><span style="font-size:14px"></span></span></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:宋体; font-size:14px"><br></span></p></p> <span lang="EN-US"><span lang="EN-US">3</span></span>Factory Model Abstract Factory <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">The abstract factory pattern is responsible for creating a detailed product or product family by implementing a detailed factory that derives from the abstract factory. Abstract Factory mode can create different products or series by implementing different detailed factories, and can also create different products through different methods of detailed Factories. And users only deal with abstract Factories. And don't care which factory created the detailed Product.</span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:宋体"><span style="font-family:Microsoft YaHei; font-size:14px">The intent of the abstract factory pattern is to provide an interface for creating a series of related or dependent objects, through which the user can create a series of related Objects.</span></span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:宋体"><span style="font-family:Microsoft YaHei; font-size:14px"></span></span></p></p> <p><p>watermark/2/text/ahr0cdovl2jsb2cuy3nkbi5uzxqvr29vsg9uzw==/font/5a6l5l2t/fontsize/400/fill/i0jbqkfcma==/ Dissolve/70/gravity/center "></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><br></p></p> <span style="font-family:宋体"><span style="font-family:宋体"></span></span> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"><strong><br></strong></span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">In the latest version of the <span lang="EN-US">ANDROID</span> system in the media frame above the creation of the media Player is the use of abstract factory Mode.</span></p></p> <p><p>Class diagrams such as the Following:</p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"></span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:宋体"><br></span></p></p> <p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">Of<span lang="EN-US"><span lang="EN-US">mediaplayerfactory</span></span>For<span lang="EN-US"><span lang="EN-US">mediaplayerfactory:ifactory</span></span>of Customers.<span lang="EN-US"><span lang="EN-US">mediaplayerfactory</span></span>Through its included abstract factory<span lang="EN-US"><span lang="EN-US">mediaplayerfactory:ifactory</span></span>The abstract interface<span lang="EN-US"><span lang="EN-US">Createplayer</span></span>To create a different player. Each detailed player is created by each detailed factory. Such as<span lang="EN-US"><span lang="EN-US">Stagefrightplayer</span></span>Player by<span lang="EN-US"><span lang="EN-US">stagefrightplayerfactory</span></span>Factory created,<span lang="EN-US"><span lang="EN-US">nuplayerfactory</span></span>Factory creation<span lang="EN-US"><span lang="EN-US">Nuplayerdriver</span></span>Player.<span lang="EN-US"><span lang="EN-US">sonivoxplayerfactory</span></span>Factory creation<span lang="EN-US"><span lang="EN-US">MidiFile</span></span>Player.<span lang="EN-US"><span lang="EN-US">testplayerfactory</span></span>Factory creates a player for testing<span lang="EN-US"><span lang="EN-US">testplayerstub</span></span>。 In<span lang="EN-US"><span lang="EN-US">mediaplayerfactory</span></span>Each of the detailed player factories in the<span lang="EN-US"><span lang="EN-US">mediaplayerfactory</span></span>Of<span lang="EN-US"><span lang="EN-US">registerfactory_l</span></span>Or<span lang="EN-US"><span lang="EN-US">registerfactory</span></span>function is registered to<span lang="EN-US"><span lang="EN-US">mediaplayerfactory</span></span>Class. To<span lang="EN-US"><span lang="EN-US">mediaplayerfactory</span></span>Class in its factory method can obtain a detailed playback factory based on different playback types to create a detailed type of player.</span></p> <p><p></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">The key difference between an abstract factory and a factory method pattern is that the abstract factory needs to create a detailed factory that derives from the abstract factory. The responsibility of the factory object is to create a detailed product by using an instance method of the factory object in detail, and the factory method pattern is to provide a framework in which the product is created through a factory method in the subclass of the product to be created, and creating the product is only a task in the many responsibilities of the SUBCLASS.</span></p></p> <span style="font-size:10.5pt"><span style="font-size:10.5pt"></span></span> <span style="font-family:Cambria"><span style="font-family:Cambria"><span lang="EN-US"><span>4</span></span></span></span>Generator <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">Sometimes the creation of objects needs to be done in steps. In this case, you can use the generator mode,<span lang="EN-US">UML</span> class diagram such as the Following:</span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"></span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"><span style="font-family:Microsoft YaHei">There is also a large number of generator patterns in the <span lang="EN-US">ANDROID</span> system.</span></span></p></p> <p><p>such as <span lang="EN-US">Alertdialog</span>,<span lang="EN-US">Uri</span>,<span lang="EN-US">Notification</span> , and other objects are Created. For example, The following <span lang="EN-US">is a sample creation of an Alertdialog Object. </span></p></p> <p><p></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"></p></p> <pre class="html" name="code" code_snippet_id="432966" snippet_file_name="blog_20140722_3_9528197"><pre class="html" name="code" code_snippet_id="432966" snippet_file_name="blog_20140722_3_9528197"> Alertdialog dialog = new Alertdialog.builder (mcontext). settitle (r.getstring (r.string.wifi_p2p_invitation_sent _title) . setview (textentryview). setpositivebutton (r.getstring (r.string.ok), null) . Create ();</pre></pre> <br> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <span lang="EN-US"><span lang="EN-US"></span></span>5. Prototype <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-size:14px"><span style="font-family:宋体"></span><span style="font-family:Microsoft YaHei">Suppose you need to clone an existing object to create a new object, you should use the prototype Pattern. <span lang="EN-US">UML</span> <span style="font-family:宋体; font-size:10.5pt">class diagrams such as the Following:</span></span></span></p></p> <p><p><span style="font-family:宋体; font-size:14px"></span></p></p> <p><p><br></p></p> <span style="font-family:宋体"><span style="font-family:宋体"></span></span> <p><p><span style="font-size:14px"><br></span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">All classes that implement the <span lang="EN-US">cloneable</span> interface in the <span lang="EN-US">Android</span> system support the creation of their objects in prototype mode, such as <span lang="EN-US">Intent</span>,<span lang="EN-US">Animation</span>, <span lang="EN-US"> Bundles</span>,<span lang="EN-US">componentname</span>, and<span lang="EN-US">Event</span> objects.</span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:宋体"><span style="font-family:Microsoft YaHei; font-size:14px">For example, The following example creates a code snippet for the intent object whose objects are created in prototype Mode:</span></span></p></p> <p><p><br></p></p> <span style="font-size:14px"><span style="font-size:14px"></span></span> <p><p></p></p> <pre class="html" name="code" code_snippet_id="432966" snippet_file_name="blog_20140722_4_8513658"><pre class="html" name="code" code_snippet_id="432966" snippet_file_name="blog_20140722_4_8513658">/** * Copy constructor. * /public Intent (Intent o) { this.maction = o.maction; This.mdata = o.mdata; This.mtype = o.mtype; This.mpackage = o.mpackage; This.mcomponent = o.mcomponent; This.mflags = o.mflags; If (o.mcategories! = Null) { this.mcategories = new arrayset<string> (o.mcategories); } If (o.mextras! = Null) { This.mextras = new Bundle (o.mextras); } If (o.msourcebounds! = Null) { this.msourcebounds = new Rect (o.msourcebounds); } If (o.mselector! = Null) { this.mselector = new Intent (o.mselector); } If (o.mclipdata! = Null) { this.mclipdata = new Clipdata (o.mclipdata);} } @Override public Object clone () { return new Intent (this); }</pre></pre> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p>6 single-piece Mode <p><p><span style="font-family:宋体"><span style="font-family:Microsoft YaHei; font-size:14px">Suppose that in a process a class simply needs to create an instance, it needs to take a single-piece pattern, such as the Following:</span></span><br></p></p> <p><p><span style="font-size:14px"></span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">In an <span lang="EN-US">android</span> system, A single-piece mode is also commonly used to maintain a unique instance of a class within a process.</span></p></p> <p style="margin:0cm 0cm 0pt"><p style="margin:0cm 0cm 0pt"><span style="font-family:Microsoft YaHei; font-size:14px">such as many hardware-related system service management classes and Services:<span lang="EN-US">ServiceManager</span>,<span lang="EN-US">sensormanager</span>,<span lang="EN-US">windowmanagerglobal</span>, <span lang="EN-US"> Wallpapermanager</span>,<span lang="EN-US">accessibilitymanager</span>,<span lang="EN-US">usermanagerservice</span>,<span lang="EN-US">downloadmanager</span> ,<span lang="EN-US">batteryservice</span>,<span lang="EN-US">connectivitymanager</span> and so On.</span></p></p> <p><p></p></p> <p><p><span style="font-family:Microsoft YaHei; font-size:14px">For example, The following code uses a single-piece mode to obtain a single instance of the <span lang="EN-US">ServiceManager</span> class.</span></p></p> <p><p><span style="font-size:14px"></span></p></p> <pre class="html" name="code" code_snippet_id="432966" snippet_file_name="blog_20140722_5_1261894"><pre class="html" name="code" code_snippet_id="432966" snippet_file_name="blog_20140722_5_1261894">private static Iservicemanager sservicemanager;private static Iservicemanager Getiservicemanager () { if ( sservicemanager! = Null) { return sservicemanager; } Find the service Manager Sservicemanager = servicemanagernative.asinterface (binderinternal.getcontextobject () ); return sservicemanager; }</pre></pre> <br> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p></p></p> <p><p><br></p></p> <p><p><strong> <span style="font-size:14px">All Rights reserved. Please reprint when respecting the copyright clearly marked the source and link, thank you!</span></strong><br></p></p> <p><p><span style="font-size:14px"><br></span></p></p> </blockquote>  <p><p>The use of design patterns in ANDROID-create-mode</p></p></span>

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.