首页 > 其他 > 详细

可修改性战术分析

时间:2020-03-05 10:05:28      阅读:72      评论:0      收藏:0      [点我收藏+]

可修改性战术目标:控制实现、测试、和部署变更的时间和成本。

战术手段:1、局部化修改

                       A、维持语义的一致性。(*语义的一致性是指模块中责任之间的关系,目标是确保所有这些责任都能协同工作,不需要过多得依赖别的模块。子战术:”抽象通用模块“。)

                      B、预期期望的变更。(*子战术:泛化该模块;限制可能的选择。)

                     2、防止连锁反应

                       A、信息隐藏(*最大化实现模块分解,最大化的隐藏私有信息)

                       B、维持现有的接口。添加接口(*来维持现有接口签名);添加适配器(*包装原类,并提供原始签名);提供一个占位程序

                       C、限制通信路径(*减少共享数据数量)

                       D、使用仲裁者。

                      3、推迟绑定时间。

                         A、运行时注册(*即插即用)

                         B、配置文件(*启动时设置参数)

                         C、多态(*后期绑定)

                         D、组件更换(*允许载入时间绑定)

                         E、遵守已定义的协议(*允许独立进程的运行时绑定)

对于immutable string 来说, 能够从accessor 方法中安全返回。

@interface MYSimpleClass
{
  NSString        *_myStringValue;
}
- (NSString *)safeStringValue;
@end

@implementation MYSimpleClass
- (NSString *)safeStringValue
{
  // 安全返回实
 return    _myStringValue;
}
@end


但是, 如果是mutable string,下面的accessor 方法将破坏类的封装:

@interface MYSimpleClass
{
  NSMutableString        *_myStringValue;
}
- (NSMutableString *)unsafeStringValue;
@end

@implementation MYSimpleClass
- (NSMutableString *)unsafeStringValue
{
  / / myStringValue may be changed externally

  return myStringValue;
}
@end

安全返回mutabel 变量的解决办法:
1。 方法要强行 type casting返回变量. mutable -> immutable
2.  返回变量的一个 mutable copy.


@interface MYSimpleClass
{
  NSMutableString        *_myStringValue;
}
- (NSString *)safeStringValue1;
- (NSMutableString *)safeStringValue2;
}
@implementation MYSimpleClass
- (NSString *)safeStringValue1
{
  // 安全返回方案1 - type casting
  //
  return myStringValue;
}
- (NSMutableString *)safeStringValue2
{
  // 安全返回方案 2 - mutable copy
  return [[myStringValue mutableCopy] autorelease];
}

可修改性战术分析

原文:https://www.cnblogs.com/jbwen/p/12418240.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!