zoukankan      html  css  js  c++  java
  • iOS设计模式

    iOS设计模式 - 抽象工厂

    原理图

    说明

    1. 抽象工厂指的是提供一个创建一系列相关或者相互依赖对象的接口,而无需指定它们具体的类

    2. 如果多个类有相同的行为,但实际实现不同,则可能需要某种抽象类型作为其父类被继承,抽象类型定义了所有相关具体类将共有的共同行为

    源码

    https://github.com/YouXianMing/iOS-Design-Patterns

    //
    //  BrandingFactory.h
    //  AbstractFactoryPattern
    //
    //  Created by YouXianMing on 15/8/2.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import <Foundation/Foundation.h>
    #import <UIKit/UIKit.h>
    
    @interface BrandingFactory : NSObject
    
    /**
     *  抽象工厂方法
     *
     *  @return 具体的工厂
     */
    + (BrandingFactory *)factory;
    
    /**
     *  该工厂生产的brandedView(由具体工厂构造)
     *
     *  @return 生产好的brandedView
     */
    - (UIView *)brandedView;
    
    /**
     *  该工厂生产的brandedMainButton(由具体工厂构造)
     *
     *  @return 生产好的brandedMainButton
     */
    - (UIButton *)brandedMainButton;
    
    @end
    //
    //  BrandingFactory.m
    //  AbstractFactoryPattern
    //
    //  Created by YouXianMing on 15/8/2.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "BrandingFactory.h"
    #import "AcmeBrandingFactory.h"
    #import "SierraBrandingFactory.h"
    
    @implementation BrandingFactory
    
    + (BrandingFactory *)factory {
        
        if ([[self class] isSubclassOfClass:[AcmeBrandingFactory class]]) {
            
            return [AcmeBrandingFactory new];
            
        } else if ([[self class] isSubclassOfClass:[SierraBrandingFactory class]]) {
        
            return [SierraBrandingFactory new];
            
        } else {
        
            return nil;
        }
    }
    
    - (UIView *)brandedView {
    
        return nil;
    }
    
    - (UIButton *)brandedMainButton {
    
        return nil;
    }
    
    @end
    //
    //  AcmeBrandingFactory.h
    //  AbstractFactoryPattern
    //
    //  Created by YouXianMing on 15/8/2.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "BrandingFactory.h"
    
    @interface AcmeBrandingFactory : BrandingFactory
    
    @end
    //
    //  AcmeBrandingFactory.m
    //  AbstractFactoryPattern
    //
    //  Created by YouXianMing on 15/8/2.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "AcmeBrandingFactory.h"
    
    @implementation AcmeBrandingFactory
    
    - (UIView *)brandedView {
        
        NSLog(@"AcmeBrandedView");
        return nil;
    }
    
    - (UIButton *)brandedMainButton {
        
        NSLog(@"AcmeBrandedMainButton");
        return nil;
    }
    
    @end
    //
    //  SierraBrandingFactory.h
    //  AbstractFactoryPattern
    //
    //  Created by YouXianMing on 15/8/2.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "BrandingFactory.h"
    
    @interface SierraBrandingFactory : BrandingFactory
    
    @end
    //
    //  SierraBrandingFactory.m
    //  AbstractFactoryPattern
    //
    //  Created by YouXianMing on 15/8/2.
    //  Copyright (c) 2015年 YouXianMing. All rights reserved.
    //
    
    #import "SierraBrandingFactory.h"
    
    @implementation SierraBrandingFactory
    
    - (UIView *)brandedView {
        
        NSLog(@"SierraBrandedView");
        return nil;
    }
    
    - (UIButton *)brandedMainButton {
        
        NSLog(@"SierraBrandedMainButton");
        return nil;
    }
    
    @end

    分析

    关系原理图

  • 相关阅读:
    初识ABP vNext(8):ABP特征管理
    初识ABP vNext(7):vue身份认证管理&租户管理
    初识ABP vNext(6):vue+ABP实现国际化
    初识ABP vNext(5):ABP扩展实体
    初识ABP vNext(4):vue用户登录&菜单权限
    【Flutter 混合开发】嵌入原生View-iOS
    【Flutter 混合开发】嵌入原生View-Android
    使用Flutter完成10个商业项目后的经验教训
    谷歌发布Flutter Alpha:支持Windows
    【Flutter 实战】大量复杂数据持久化
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/4695045.html
Copyright © 2011-2022 走看看