• [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];









  • 相关阅读:
    Can't locate ... in @INC
    c++写一个类后编译发现class重定义
    python with
    遍历Java Map
    mod_jk notes
    NPM使用总结
    Yeoman
    Java中的Marker Interfaces有什么用
    有关Ehcache的内容的引用和Java的deep copy
    JDBC的PreparedStatement语句使用记录
  • 原文地址:https://www.cnblogs.com/GnagWang/p/2219935.html
Copyright © 2020-2023  润新知