工厂模式

工厂模式

[TOC]

  工厂模式分为简单工厂和抽象工厂,抽象工厂只是在简单工厂上面多加了一个封装层。

  • 优点:职责单一,实现了接口隔离,有利用解耦合。
  • 缺点:违反了高内聚职责分配原则,也违背了开放封闭原则,所以适应于简单的类。

简单工厂

  简单工厂是一个具体的类,制造对象,简化流程并且封装对外不可见。

封装按钮的Demo

#import <UIKit/UIKit.h>
/**
 用户界面工厂类 
 作用: 负责创建用户界面需要的视图
 设计: 简单工厂模式
 */
@interface CDUIFactory : NSObject

+ (UIButton *) createButtonWithRect:(CGRect) rect title:(NSString *) title image:(NSString *) imageName bgImage:(NSString *) bgImageName target:(id) target action:(SEL) sel;

@end
//实现部分用了一些已经封装好的方法
#import "CDUIFactory.h"

@implementation CDUIFactory

+ (UIButton *)createButtonWithRect:(CGRect)rect title:(NSString *)title image:(NSString *)imageName bgImage:(NSString *)bgImageName target:(id)target action:(SEL)sel {
    // 创建自定义类型的按钮
    UIButton *button = [UIButton buttonWithType:UIButtonTypeCustom];
    
    // 指定按钮的尺寸和位置
    button.frame = rect;
    
    // 根据参数定制按钮
    if (title) {
        [button setTitle:title forState:UIControlStateNormal];
    }
    if (imageName) {
        if ([imageName hasPrefix:@"http"]) {
            [button sd_setImageWithURL:[NSURL URLWithString:imageName] forState:UIControlStateNormal];
        }
        else {
            [button setImage:[UIImage imageNamed:imageName] forState:UIControlStateNormal];
        }
    }
    if (bgImageName) {
        if ([bgImageName hasPrefix:@"http"]) {
            [button sd_setBackgroundImageWithURL:[NSURL URLWithString:bgImageName] forState:UIControlStateNormal];
        }
        [button setBackgroundImage:[UIImage imageNamed:bgImageName] forState:UIControlStateNormal];
    }
    if (target && sel) {
        [button addTarget:target action:sel forControlEvents:UIControlEventTouchUpInside];
    }
    
    // 设置按钮标题颜色
    [button setTitleColor:[UIColor buttonTitleColor] forState:UIControlStateNormal];
    // 设置按钮标题字体
    button.titleLabel.font = [UIFont defaultFont];
    
    return button;
}

@end

抽象工厂

  抽象工厂比简单工厂多了一个抽象层,下面是一堆得简单工厂。当简单工厂继承抽象工厂时重写父类的方法。抽象工厂是面向接口编程。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容