zoukankan      html  css  js  c++  java
  • [IOS 下重温设计模式] AbstractFactory

    View Code
    @interface BrandingFactory : NSObject 
    {

    }

    + (BrandingFactory *) factory;

    - (UIView *) brandedView;
    - (UIButton *) brandedMainButton;
    - (UIToolbar *) brandedToolbar;

    @end
    View Code
    #define USE_ACME

    @implementation BrandingFactory

    + (BrandingFactory *) factory
    {
    #if defined (USE_ACME)
    return [[[AcmeBrandingFactory alloc] init] autorelease];
    #elif defined (USE_SIERRA)
    return [[[SierraBrandingFactory alloc] init] autorelease];
    #else
    return nil;
    #endif
    }

    - (UIView *) brandedView
    {
    return nil;
    }

    - (UIButton *) brandedMainButton
    {
    return nil;
    }

    - (UIToolbar *) brandedToolbar
    {
    return nil;
    }

    @end

    =============================

    View Code
    @interface SierraBrandingFactory : BrandingFactory
    {

    }

    - (UIView*) brandedView;
    - (UIButton*) brandedMainButton;
    - (UIToolbar*) brandedToolbar;
    View Code
    @implementation SierraBrandingFactory

    - (UIView*) brandedView
    {
    // returns a custom view for Sierra
    return [[[SierraView alloc] init] autorelease];
    }

    - (UIButton*) brandedMainButton
    {
    // returns a custom main button for Sierra
    return [[[SierraMainButton alloc] init] autorelease];
    }

    - (UIToolbar*) brandedToolbar
    {
    // returns a custom toolbar for Sierra
    return [[[SierraToolbar alloc] init] autorelease];
    }

    @end

    =============================

    View Code
    @interface AcmeBrandingFactory : BrandingFactory
    {

    }

    - (UIView *) brandedView;
    - (UIButton *) brandedMainButton;
    - (UIToolbar *) brandedToolbar;
    View Code
    @implementation AcmeBrandingFactory

    - (UIView *) brandedView
    {
    // returns a custom view for Acme
    return [[[AcmeView alloc] init] autorelease];
    }

    - (UIButton *) brandedMainButton
    {
    // returns a custom main button for Acme
    return [[[AcmeMainButton alloc] init] autorelease];
    }

    - (UIToolbar *) brandedToolbar
    {
    // returns a custom toolbar for Acme
    return [[[AcmeToolbar alloc] init] autorelease];
    }

    @end

    =============================

    客户端:

    View Code
    BrandingFactory * factory = [BrandingFactory factory];

    UIView * view = [factory brandedView];


    UIButton * button = [factory brandedMainButton];


    UIToolbar * toolbar = [factory brandedToolbar];









  • 相关阅读:
    Android网络开发的那些事儿
    first day to Ruby on rails
    [转]Windows SDK与DirectX SDK集成
    Windows8
    [转]MPI--MPI+VS2010 配置及编译
    codeblock添加头文件路径和静态库路径
    汇编笔记1:debug
    Eclipse Error
    Android SDk 离线安装方法
    求一程序员合租,回龙观东大街地铁站十分钟,精装次卧2000,无需押金,一共两家
  • 原文地址:https://www.cnblogs.com/GnagWang/p/2219935.html
Copyright © 2011-2022 走看看