当前位置: 首页 > news >正文

iOS设计模式 - 外观

iOS设计模式 - 外观

 

原理图

 

 

说明

1. 当客服端需要使用一个复杂的子系统(子系统之间关系错综复杂),但又不想和他们扯上关系时,我们需要单独的写出一个类来与子系统交互,隔离客户端与子系统之间的联系,客户端只与这个单独写出来的类交互

2. 外观模式实质为为系统中的一组接口提供一个统一的接口,外观定义了一个高层接口,让子系统易于使用

 

源码

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

//
//  ShapeMaker.h
//  FacadePattern
//
//  Created by YouXianMing on 15/7/28.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Shape.h"

#import "Circle.h"
#import "Rectangle.h"
#import "Square.h"

@interface ShapeMaker : NSObject

+ (void)drawCircleAndRectangle;
+ (void)drawCircleAndSquare;
+ (void)drawAll;

@end


//
//  ShapeMaker.m
//  FacadePattern
//
//  Created by YouXianMing on 15/7/28.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "ShapeMaker.h"

@implementation ShapeMaker

+ (void)drawCircleAndRectangle {

    Shape *circle    = [Circle new];
    Shape *rectangle = [Rectangle new];
    
    [circle draw];
    [rectangle draw];
    NSLog(@"\n");
}

+ (void)drawCircleAndSquare {

    Shape *circle    = [Circle new];
    Shape *square    = [Square new];
    
    [circle draw];
    [square draw];
    NSLog(@"\n");
}

+ (void)drawAll {

    Shape *circle    = [Circle new];
    Shape *rectangle = [Rectangle new];
    Shape *square    = [Square new];
    
    [circle draw];
    [rectangle draw];
    [square draw];
    NSLog(@"\n");
}

@end


//
//  Shape.h
//  FacadePattern
//
//  Created by YouXianMing on 15/7/28.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import <Foundation/Foundation.h>

@interface Shape : NSObject

/**
 *  绘制
 */
- (void)draw;

@end

//
//  Shape.m
//  FacadePattern
//
//  Created by YouXianMing on 15/7/28.
//  Copyright (c) 2015年 YouXianMing. All rights reserved.
//

#import "Shape.h"

@implementation Shape

- (void)draw {

    // 由子类重写
}

@end

分析

详细对比示意图


相关文章:

  • 大厂面试题:你知道JUC中的Semaphore、CyclicBarrier、CountDownLatch吗
  • 勤能补挫-简单But易错的JSCSS问题总结
  • Java16都快上线了,你该不会连Java8的特性都不会用吧?
  • ubuntu 更改密码
  • 从考研失败到最具成长力员工,这个2020就像过山车一样
  • 解析MySQL权限表
  • 图解Mysql索引的数据结构!看不懂你来找我
  • 如何用Java写一个规范的http接口?
  • Getting started with Java EE 8 MVC(1)
  • 产品经理问我:手动创建线程不香吗,为什么非要用线程池呢?
  • 将桌面上的硬盘移除
  • 白话Mysql的锁和事务隔离级别!死锁、间隙锁你都知道吗?
  • Jquery datatables 使用方法
  • 基于SpringBoot实现文件的上传下载
  • 作为一个后端开发,你需要了解多少Nginx的知识?
  • 时间复杂度分析经典问题——最大子序列和
  • “大数据应用场景”之隔壁老王(连载四)
  • 【Amaple教程】5. 插件
  • angular组件开发
  • Asm.js的简单介绍
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • el-input获取焦点 input输入框为空时高亮 el-input值非法时
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Java基本数据类型之Number
  • java中的hashCode
  • tensorflow学习笔记3——MNIST应用篇
  • Vue.js-Day01
  • vue:响应原理
  • Web Storage相关
  • yii2权限控制rbac之rule详细讲解
  • 聚簇索引和非聚簇索引
  • 数组大概知多少
  • 消息队列系列二(IOT中消息队列的应用)
  • 一个SAP顾问在美国的这些年
  • 东超科技获得千万级Pre-A轮融资,投资方为中科创星 ...
  • 关于Android全面屏虚拟导航栏的适配总结
  • ​Spring Boot 分片上传文件
  • # 深度解析 Socket 与 WebSocket:原理、区别与应用
  • ###STL(标准模板库)
  • #android不同版本废弃api,新api。
  • #define
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • $refs 、$nextTic、动态组件、name的使用
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (3)STL算法之搜索
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (含react-draggable库以及相关BUG如何解决)固定在左上方某盒子内(如按钮)添加可拖动功能,使用react hook语法实现
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (十一)JAVA springboot ssm b2b2c多用户商城系统源码:服务网关Zuul高级篇
  • ../depcomp: line 571: exec: g++: not found
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .net refrector
  • .NET 反射的使用
  • .NET/C# 项目如何优雅地设置条件编译符号?