Skip to content

Commit 057b194

Browse files
state 模式
1 parent 8a297ba commit 057b194

File tree

20 files changed

+733
-0
lines changed

20 files changed

+733
-0
lines changed
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# 状态模式
2+
3+
## 什么是状态模式?
4+
当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类
5+
6+
## 状态模式有哪些优点?
7+
* 当控制一个对象状态转换的条件过于复杂时,将状态的判断逻辑转移到表示不同状态的一系列类中,简化复杂的判断逻辑
8+
* 将于特定状态相关的行为局部化,并且将不同状态的行为分割开来
9+
10+
## 状态模式有哪些缺点?
11+
12+
13+
## 适用场景
14+
* 当一个对象的行为取决于其状态,并且它必须在运行时刻根据状态改变它的行为时
15+
16+
17+
Lines changed: 333 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,333 @@
1+
// !$*UTF8*$!
2+
{
3+
archiveVersion = 1;
4+
classes = {
5+
};
6+
objectVersion = 50;
7+
objects = {
8+
9+
/* Begin PBXBuildFile section */
10+
DAE9B0BD21D3AE1B00A61F1D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE9B0BC21D3AE1B00A61F1D /* main.m */; };
11+
DAE9B0C721D3AE8C00A61F1D /* Work.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE9B0C621D3AE8C00A61F1D /* Work.m */; };
12+
DAE9B0CA21D3AECA00A61F1D /* ForenoonState.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE9B0C921D3AECA00A61F1D /* ForenoonState.m */; };
13+
DAE9B0CD21D3AEDB00A61F1D /* NoonState.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE9B0CC21D3AEDB00A61F1D /* NoonState.m */; };
14+
DAE9B0D021D3AEF300A61F1D /* AfternoonState.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE9B0CF21D3AEF300A61F1D /* AfternoonState.m */; };
15+
DAE9B0D321D3AF1200A61F1D /* EveningState.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE9B0D221D3AF1200A61F1D /* EveningState.m */; };
16+
DAE9B0D621D3AF2900A61F1D /* SleepingState.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE9B0D521D3AF2900A61F1D /* SleepingState.m */; };
17+
DAE9B0D921D3AF3400A61F1D /* RestState.m in Sources */ = {isa = PBXBuildFile; fileRef = DAE9B0D821D3AF3400A61F1D /* RestState.m */; };
18+
/* End PBXBuildFile section */
19+
20+
/* Begin PBXCopyFilesBuildPhase section */
21+
DAE9B0B721D3AE1B00A61F1D /* CopyFiles */ = {
22+
isa = PBXCopyFilesBuildPhase;
23+
buildActionMask = 2147483647;
24+
dstPath = /usr/share/man/man1/;
25+
dstSubfolderSpec = 0;
26+
files = (
27+
);
28+
runOnlyForDeploymentPostprocessing = 1;
29+
};
30+
/* End PBXCopyFilesBuildPhase section */
31+
32+
/* Begin PBXFileReference section */
33+
DAE9B0B921D3AE1B00A61F1D /* state */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = state; sourceTree = BUILT_PRODUCTS_DIR; };
34+
DAE9B0BC21D3AE1B00A61F1D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
35+
DAE9B0C421D3AE3E00A61F1D /* State.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = State.h; sourceTree = "<group>"; };
36+
DAE9B0C521D3AE8C00A61F1D /* Work.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = Work.h; sourceTree = "<group>"; };
37+
DAE9B0C621D3AE8C00A61F1D /* Work.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = Work.m; sourceTree = "<group>"; };
38+
DAE9B0C821D3AECA00A61F1D /* ForenoonState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ForenoonState.h; sourceTree = "<group>"; };
39+
DAE9B0C921D3AECA00A61F1D /* ForenoonState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = ForenoonState.m; sourceTree = "<group>"; };
40+
DAE9B0CB21D3AEDB00A61F1D /* NoonState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = NoonState.h; sourceTree = "<group>"; };
41+
DAE9B0CC21D3AEDB00A61F1D /* NoonState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = NoonState.m; sourceTree = "<group>"; };
42+
DAE9B0CE21D3AEF300A61F1D /* AfternoonState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AfternoonState.h; sourceTree = "<group>"; };
43+
DAE9B0CF21D3AEF300A61F1D /* AfternoonState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AfternoonState.m; sourceTree = "<group>"; };
44+
DAE9B0D121D3AF1200A61F1D /* EveningState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = EveningState.h; sourceTree = "<group>"; };
45+
DAE9B0D221D3AF1200A61F1D /* EveningState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = EveningState.m; sourceTree = "<group>"; };
46+
DAE9B0D421D3AF2900A61F1D /* SleepingState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SleepingState.h; sourceTree = "<group>"; };
47+
DAE9B0D521D3AF2900A61F1D /* SleepingState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SleepingState.m; sourceTree = "<group>"; };
48+
DAE9B0D721D3AF3400A61F1D /* RestState.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RestState.h; sourceTree = "<group>"; };
49+
DAE9B0D821D3AF3400A61F1D /* RestState.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = RestState.m; sourceTree = "<group>"; };
50+
/* End PBXFileReference section */
51+
52+
/* Begin PBXFrameworksBuildPhase section */
53+
DAE9B0B621D3AE1B00A61F1D /* Frameworks */ = {
54+
isa = PBXFrameworksBuildPhase;
55+
buildActionMask = 2147483647;
56+
files = (
57+
);
58+
runOnlyForDeploymentPostprocessing = 0;
59+
};
60+
/* End PBXFrameworksBuildPhase section */
61+
62+
/* Begin PBXGroup section */
63+
DAE9B0B021D3AE1B00A61F1D = {
64+
isa = PBXGroup;
65+
children = (
66+
DAE9B0BB21D3AE1B00A61F1D /* state */,
67+
DAE9B0BA21D3AE1B00A61F1D /* Products */,
68+
);
69+
sourceTree = "<group>";
70+
};
71+
DAE9B0BA21D3AE1B00A61F1D /* Products */ = {
72+
isa = PBXGroup;
73+
children = (
74+
DAE9B0B921D3AE1B00A61F1D /* state */,
75+
);
76+
name = Products;
77+
sourceTree = "<group>";
78+
};
79+
DAE9B0BB21D3AE1B00A61F1D /* state */ = {
80+
isa = PBXGroup;
81+
children = (
82+
DAE9B0C321D3AE2A00A61F1D /* state */,
83+
DAE9B0BC21D3AE1B00A61F1D /* main.m */,
84+
);
85+
path = state;
86+
sourceTree = "<group>";
87+
};
88+
DAE9B0C321D3AE2A00A61F1D /* state */ = {
89+
isa = PBXGroup;
90+
children = (
91+
DAE9B0C421D3AE3E00A61F1D /* State.h */,
92+
DAE9B0C821D3AECA00A61F1D /* ForenoonState.h */,
93+
DAE9B0C921D3AECA00A61F1D /* ForenoonState.m */,
94+
DAE9B0CB21D3AEDB00A61F1D /* NoonState.h */,
95+
DAE9B0CC21D3AEDB00A61F1D /* NoonState.m */,
96+
DAE9B0CE21D3AEF300A61F1D /* AfternoonState.h */,
97+
DAE9B0CF21D3AEF300A61F1D /* AfternoonState.m */,
98+
DAE9B0D121D3AF1200A61F1D /* EveningState.h */,
99+
DAE9B0D221D3AF1200A61F1D /* EveningState.m */,
100+
DAE9B0D421D3AF2900A61F1D /* SleepingState.h */,
101+
DAE9B0D521D3AF2900A61F1D /* SleepingState.m */,
102+
DAE9B0D721D3AF3400A61F1D /* RestState.h */,
103+
DAE9B0D821D3AF3400A61F1D /* RestState.m */,
104+
DAE9B0C521D3AE8C00A61F1D /* Work.h */,
105+
DAE9B0C621D3AE8C00A61F1D /* Work.m */,
106+
);
107+
path = state;
108+
sourceTree = "<group>";
109+
};
110+
/* End PBXGroup section */
111+
112+
/* Begin PBXNativeTarget section */
113+
DAE9B0B821D3AE1B00A61F1D /* state */ = {
114+
isa = PBXNativeTarget;
115+
buildConfigurationList = DAE9B0C021D3AE1B00A61F1D /* Build configuration list for PBXNativeTarget "state" */;
116+
buildPhases = (
117+
DAE9B0B521D3AE1B00A61F1D /* Sources */,
118+
DAE9B0B621D3AE1B00A61F1D /* Frameworks */,
119+
DAE9B0B721D3AE1B00A61F1D /* CopyFiles */,
120+
);
121+
buildRules = (
122+
);
123+
dependencies = (
124+
);
125+
name = state;
126+
productName = state;
127+
productReference = DAE9B0B921D3AE1B00A61F1D /* state */;
128+
productType = "com.apple.product-type.tool";
129+
};
130+
/* End PBXNativeTarget section */
131+
132+
/* Begin PBXProject section */
133+
DAE9B0B121D3AE1B00A61F1D /* Project object */ = {
134+
isa = PBXProject;
135+
attributes = {
136+
LastUpgradeCheck = 1010;
137+
ORGANIZATIONNAME = "王俊";
138+
TargetAttributes = {
139+
DAE9B0B821D3AE1B00A61F1D = {
140+
CreatedOnToolsVersion = 10.1;
141+
};
142+
};
143+
};
144+
buildConfigurationList = DAE9B0B421D3AE1B00A61F1D /* Build configuration list for PBXProject "state" */;
145+
compatibilityVersion = "Xcode 9.3";
146+
developmentRegion = en;
147+
hasScannedForEncodings = 0;
148+
knownRegions = (
149+
en,
150+
);
151+
mainGroup = DAE9B0B021D3AE1B00A61F1D;
152+
productRefGroup = DAE9B0BA21D3AE1B00A61F1D /* Products */;
153+
projectDirPath = "";
154+
projectRoot = "";
155+
targets = (
156+
DAE9B0B821D3AE1B00A61F1D /* state */,
157+
);
158+
};
159+
/* End PBXProject section */
160+
161+
/* Begin PBXSourcesBuildPhase section */
162+
DAE9B0B521D3AE1B00A61F1D /* Sources */ = {
163+
isa = PBXSourcesBuildPhase;
164+
buildActionMask = 2147483647;
165+
files = (
166+
DAE9B0D621D3AF2900A61F1D /* SleepingState.m in Sources */,
167+
DAE9B0D021D3AEF300A61F1D /* AfternoonState.m in Sources */,
168+
DAE9B0C721D3AE8C00A61F1D /* Work.m in Sources */,
169+
DAE9B0CD21D3AEDB00A61F1D /* NoonState.m in Sources */,
170+
DAE9B0BD21D3AE1B00A61F1D /* main.m in Sources */,
171+
DAE9B0D921D3AF3400A61F1D /* RestState.m in Sources */,
172+
DAE9B0D321D3AF1200A61F1D /* EveningState.m in Sources */,
173+
DAE9B0CA21D3AECA00A61F1D /* ForenoonState.m in Sources */,
174+
);
175+
runOnlyForDeploymentPostprocessing = 0;
176+
};
177+
/* End PBXSourcesBuildPhase section */
178+
179+
/* Begin XCBuildConfiguration section */
180+
DAE9B0BE21D3AE1B00A61F1D /* Debug */ = {
181+
isa = XCBuildConfiguration;
182+
buildSettings = {
183+
ALWAYS_SEARCH_USER_PATHS = NO;
184+
CLANG_ANALYZER_NONNULL = YES;
185+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
186+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
187+
CLANG_CXX_LIBRARY = "libc++";
188+
CLANG_ENABLE_MODULES = YES;
189+
CLANG_ENABLE_OBJC_ARC = YES;
190+
CLANG_ENABLE_OBJC_WEAK = YES;
191+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
192+
CLANG_WARN_BOOL_CONVERSION = YES;
193+
CLANG_WARN_COMMA = YES;
194+
CLANG_WARN_CONSTANT_CONVERSION = YES;
195+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
196+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
197+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
198+
CLANG_WARN_EMPTY_BODY = YES;
199+
CLANG_WARN_ENUM_CONVERSION = YES;
200+
CLANG_WARN_INFINITE_RECURSION = YES;
201+
CLANG_WARN_INT_CONVERSION = YES;
202+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
203+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
204+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
205+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
206+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
207+
CLANG_WARN_STRICT_PROTOTYPES = YES;
208+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
209+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
210+
CLANG_WARN_UNREACHABLE_CODE = YES;
211+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
212+
CODE_SIGN_IDENTITY = "Mac Developer";
213+
COPY_PHASE_STRIP = NO;
214+
DEBUG_INFORMATION_FORMAT = dwarf;
215+
ENABLE_STRICT_OBJC_MSGSEND = YES;
216+
ENABLE_TESTABILITY = YES;
217+
GCC_C_LANGUAGE_STANDARD = gnu11;
218+
GCC_DYNAMIC_NO_PIC = NO;
219+
GCC_NO_COMMON_BLOCKS = YES;
220+
GCC_OPTIMIZATION_LEVEL = 0;
221+
GCC_PREPROCESSOR_DEFINITIONS = (
222+
"DEBUG=1",
223+
"$(inherited)",
224+
);
225+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
226+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
227+
GCC_WARN_UNDECLARED_SELECTOR = YES;
228+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
229+
GCC_WARN_UNUSED_FUNCTION = YES;
230+
GCC_WARN_UNUSED_VARIABLE = YES;
231+
MACOSX_DEPLOYMENT_TARGET = 10.14;
232+
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
233+
MTL_FAST_MATH = YES;
234+
ONLY_ACTIVE_ARCH = YES;
235+
SDKROOT = macosx;
236+
};
237+
name = Debug;
238+
};
239+
DAE9B0BF21D3AE1B00A61F1D /* Release */ = {
240+
isa = XCBuildConfiguration;
241+
buildSettings = {
242+
ALWAYS_SEARCH_USER_PATHS = NO;
243+
CLANG_ANALYZER_NONNULL = YES;
244+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
245+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
246+
CLANG_CXX_LIBRARY = "libc++";
247+
CLANG_ENABLE_MODULES = YES;
248+
CLANG_ENABLE_OBJC_ARC = YES;
249+
CLANG_ENABLE_OBJC_WEAK = YES;
250+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
251+
CLANG_WARN_BOOL_CONVERSION = YES;
252+
CLANG_WARN_COMMA = YES;
253+
CLANG_WARN_CONSTANT_CONVERSION = YES;
254+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
255+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
256+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
257+
CLANG_WARN_EMPTY_BODY = YES;
258+
CLANG_WARN_ENUM_CONVERSION = YES;
259+
CLANG_WARN_INFINITE_RECURSION = YES;
260+
CLANG_WARN_INT_CONVERSION = YES;
261+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
262+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
263+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
264+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
265+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
266+
CLANG_WARN_STRICT_PROTOTYPES = YES;
267+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
268+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
269+
CLANG_WARN_UNREACHABLE_CODE = YES;
270+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
271+
CODE_SIGN_IDENTITY = "Mac Developer";
272+
COPY_PHASE_STRIP = NO;
273+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
274+
ENABLE_NS_ASSERTIONS = NO;
275+
ENABLE_STRICT_OBJC_MSGSEND = YES;
276+
GCC_C_LANGUAGE_STANDARD = gnu11;
277+
GCC_NO_COMMON_BLOCKS = YES;
278+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
279+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
280+
GCC_WARN_UNDECLARED_SELECTOR = YES;
281+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
282+
GCC_WARN_UNUSED_FUNCTION = YES;
283+
GCC_WARN_UNUSED_VARIABLE = YES;
284+
MACOSX_DEPLOYMENT_TARGET = 10.14;
285+
MTL_ENABLE_DEBUG_INFO = NO;
286+
MTL_FAST_MATH = YES;
287+
SDKROOT = macosx;
288+
};
289+
name = Release;
290+
};
291+
DAE9B0C121D3AE1B00A61F1D /* Debug */ = {
292+
isa = XCBuildConfiguration;
293+
buildSettings = {
294+
CODE_SIGN_STYLE = Automatic;
295+
DEVELOPMENT_TEAM = 7465LVKW35;
296+
PRODUCT_NAME = "$(TARGET_NAME)";
297+
};
298+
name = Debug;
299+
};
300+
DAE9B0C221D3AE1B00A61F1D /* Release */ = {
301+
isa = XCBuildConfiguration;
302+
buildSettings = {
303+
CODE_SIGN_STYLE = Automatic;
304+
DEVELOPMENT_TEAM = 7465LVKW35;
305+
PRODUCT_NAME = "$(TARGET_NAME)";
306+
};
307+
name = Release;
308+
};
309+
/* End XCBuildConfiguration section */
310+
311+
/* Begin XCConfigurationList section */
312+
DAE9B0B421D3AE1B00A61F1D /* Build configuration list for PBXProject "state" */ = {
313+
isa = XCConfigurationList;
314+
buildConfigurations = (
315+
DAE9B0BE21D3AE1B00A61F1D /* Debug */,
316+
DAE9B0BF21D3AE1B00A61F1D /* Release */,
317+
);
318+
defaultConfigurationIsVisible = 0;
319+
defaultConfigurationName = Release;
320+
};
321+
DAE9B0C021D3AE1B00A61F1D /* Build configuration list for PBXNativeTarget "state" */ = {
322+
isa = XCConfigurationList;
323+
buildConfigurations = (
324+
DAE9B0C121D3AE1B00A61F1D /* Debug */,
325+
DAE9B0C221D3AE1B00A61F1D /* Release */,
326+
);
327+
defaultConfigurationIsVisible = 0;
328+
defaultConfigurationName = Release;
329+
};
330+
/* End XCConfigurationList section */
331+
};
332+
rootObject = DAE9B0B121D3AE1B00A61F1D /* Project object */;
333+
}

da-hua-she-ji-mo-shi/16-state/state/state.xcodeproj/project.xcworkspace/contents.xcworkspacedata

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3+
<plist version="1.0">
4+
<dict>
5+
<key>IDEDidComputeMac32BitWarning</key>
6+
<true/>
7+
</dict>
8+
</plist>

0 commit comments

Comments
 (0)