可修改性战术目标:控制实现、测试、和部署变更的时间和成本。
战术手段: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