Skip to content

Commit ff10c19

Browse files
uml 类图,部分设计模式
1 parent 19bae8c commit ff10c19

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

66 files changed

+2509
-0
lines changed

da-hua-she-ji-mo-shi/01-simple-factory/simple-factory.gliffy

Lines changed: 1 addition & 0 deletions
Large diffs are not rendered by default.
24.3 KB
Loading
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# 桥接模式
2+
3+
## 什么是桥接模式?
4+
将抽象部分与其他的实现部分分离,是它们都可以独立的变化
5+
6+
## 桥接模式有哪些优点?
7+
* 提高系统灵活性
8+
9+
## 桥接模式有哪些缺点?
10+
* 增大了系统的理解与设计难度
11+
12+
## 适用场景
13+
* 一个类存在多个独立变化的维度,且这些维度都有不同的扩展
14+
15+
## 合成/聚合复用原则
16+
尽量使用合成/聚合,尽量不要使用类继承(避免滥用继承)
17+
18+
19+
Lines changed: 329 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
// !$*UTF8*$!
2+
{
3+
archiveVersion = 1;
4+
classes = {
5+
};
6+
objectVersion = 50;
7+
objects = {
8+
9+
/* Begin PBXBuildFile section */
10+
DAA53DE121E5CE0400C6611F /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA53DE021E5CE0400C6611F /* main.m */; };
11+
DAA53DEC21E5CEF900C6611F /* HandsetGame.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA53DEB21E5CEF900C6611F /* HandsetGame.m */; };
12+
DAA53DEF21E5CF3600C6611F /* HandsetAddressList.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA53DEE21E5CF3600C6611F /* HandsetAddressList.m */; };
13+
DAA53DF221E5CFB000C6611F /* HandsetBrandN.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA53DF121E5CFB000C6611F /* HandsetBrandN.m */; };
14+
DAA53DF521E5CFEC00C6611F /* HandsetBrandM.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA53DF421E5CFEC00C6611F /* HandsetBrandM.m */; };
15+
DAA53DF821E5D24600C6611F /* HandsetBrandS.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA53DF721E5D24600C6611F /* HandsetBrandS.m */; };
16+
DAA53DFB21E5D28900C6611F /* HandsetMp3.m in Sources */ = {isa = PBXBuildFile; fileRef = DAA53DFA21E5D28900C6611F /* HandsetMp3.m */; };
17+
/* End PBXBuildFile section */
18+
19+
/* Begin PBXCopyFilesBuildPhase section */
20+
DAA53DDB21E5CE0400C6611F /* CopyFiles */ = {
21+
isa = PBXCopyFilesBuildPhase;
22+
buildActionMask = 2147483647;
23+
dstPath = /usr/share/man/man1/;
24+
dstSubfolderSpec = 0;
25+
files = (
26+
);
27+
runOnlyForDeploymentPostprocessing = 1;
28+
};
29+
/* End PBXCopyFilesBuildPhase section */
30+
31+
/* Begin PBXFileReference section */
32+
DAA53DDD21E5CE0400C6611F /* bridge */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = bridge; sourceTree = BUILT_PRODUCTS_DIR; };
33+
DAA53DE021E5CE0400C6611F /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; };
34+
DAA53DE821E5CE6400C6611F /* HandsetSoft.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandsetSoft.h; sourceTree = "<group>"; };
35+
DAA53DE921E5CE8600C6611F /* HandsetBrand.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandsetBrand.h; sourceTree = "<group>"; };
36+
DAA53DEA21E5CEF900C6611F /* HandsetGame.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandsetGame.h; sourceTree = "<group>"; };
37+
DAA53DEB21E5CEF900C6611F /* HandsetGame.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HandsetGame.m; sourceTree = "<group>"; };
38+
DAA53DED21E5CF3600C6611F /* HandsetAddressList.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandsetAddressList.h; sourceTree = "<group>"; };
39+
DAA53DEE21E5CF3600C6611F /* HandsetAddressList.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HandsetAddressList.m; sourceTree = "<group>"; };
40+
DAA53DF021E5CFB000C6611F /* HandsetBrandN.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandsetBrandN.h; sourceTree = "<group>"; };
41+
DAA53DF121E5CFB000C6611F /* HandsetBrandN.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HandsetBrandN.m; sourceTree = "<group>"; };
42+
DAA53DF321E5CFEC00C6611F /* HandsetBrandM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandsetBrandM.h; sourceTree = "<group>"; };
43+
DAA53DF421E5CFEC00C6611F /* HandsetBrandM.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HandsetBrandM.m; sourceTree = "<group>"; };
44+
DAA53DF621E5D24600C6611F /* HandsetBrandS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandsetBrandS.h; sourceTree = "<group>"; };
45+
DAA53DF721E5D24600C6611F /* HandsetBrandS.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HandsetBrandS.m; sourceTree = "<group>"; };
46+
DAA53DF921E5D28900C6611F /* HandsetMp3.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = HandsetMp3.h; sourceTree = "<group>"; };
47+
DAA53DFA21E5D28900C6611F /* HandsetMp3.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = HandsetMp3.m; sourceTree = "<group>"; };
48+
/* End PBXFileReference section */
49+
50+
/* Begin PBXFrameworksBuildPhase section */
51+
DAA53DDA21E5CE0400C6611F /* Frameworks */ = {
52+
isa = PBXFrameworksBuildPhase;
53+
buildActionMask = 2147483647;
54+
files = (
55+
);
56+
runOnlyForDeploymentPostprocessing = 0;
57+
};
58+
/* End PBXFrameworksBuildPhase section */
59+
60+
/* Begin PBXGroup section */
61+
DAA53DD421E5CE0400C6611F = {
62+
isa = PBXGroup;
63+
children = (
64+
DAA53DDF21E5CE0400C6611F /* bridge */,
65+
DAA53DDE21E5CE0400C6611F /* Products */,
66+
);
67+
sourceTree = "<group>";
68+
};
69+
DAA53DDE21E5CE0400C6611F /* Products */ = {
70+
isa = PBXGroup;
71+
children = (
72+
DAA53DDD21E5CE0400C6611F /* bridge */,
73+
);
74+
name = Products;
75+
sourceTree = "<group>";
76+
};
77+
DAA53DDF21E5CE0400C6611F /* bridge */ = {
78+
isa = PBXGroup;
79+
children = (
80+
DAA53DE721E5CE4B00C6611F /* bridge */,
81+
DAA53DE021E5CE0400C6611F /* main.m */,
82+
);
83+
path = bridge;
84+
sourceTree = "<group>";
85+
};
86+
DAA53DE721E5CE4B00C6611F /* bridge */ = {
87+
isa = PBXGroup;
88+
children = (
89+
DAA53DE821E5CE6400C6611F /* HandsetSoft.h */,
90+
DAA53DE921E5CE8600C6611F /* HandsetBrand.h */,
91+
DAA53DEA21E5CEF900C6611F /* HandsetGame.h */,
92+
DAA53DEB21E5CEF900C6611F /* HandsetGame.m */,
93+
DAA53DED21E5CF3600C6611F /* HandsetAddressList.h */,
94+
DAA53DEE21E5CF3600C6611F /* HandsetAddressList.m */,
95+
DAA53DF921E5D28900C6611F /* HandsetMp3.h */,
96+
DAA53DFA21E5D28900C6611F /* HandsetMp3.m */,
97+
DAA53DF021E5CFB000C6611F /* HandsetBrandN.h */,
98+
DAA53DF121E5CFB000C6611F /* HandsetBrandN.m */,
99+
DAA53DF321E5CFEC00C6611F /* HandsetBrandM.h */,
100+
DAA53DF421E5CFEC00C6611F /* HandsetBrandM.m */,
101+
DAA53DF621E5D24600C6611F /* HandsetBrandS.h */,
102+
DAA53DF721E5D24600C6611F /* HandsetBrandS.m */,
103+
);
104+
path = bridge;
105+
sourceTree = "<group>";
106+
};
107+
/* End PBXGroup section */
108+
109+
/* Begin PBXNativeTarget section */
110+
DAA53DDC21E5CE0400C6611F /* bridge */ = {
111+
isa = PBXNativeTarget;
112+
buildConfigurationList = DAA53DE421E5CE0400C6611F /* Build configuration list for PBXNativeTarget "bridge" */;
113+
buildPhases = (
114+
DAA53DD921E5CE0400C6611F /* Sources */,
115+
DAA53DDA21E5CE0400C6611F /* Frameworks */,
116+
DAA53DDB21E5CE0400C6611F /* CopyFiles */,
117+
);
118+
buildRules = (
119+
);
120+
dependencies = (
121+
);
122+
name = bridge;
123+
productName = bridge;
124+
productReference = DAA53DDD21E5CE0400C6611F /* bridge */;
125+
productType = "com.apple.product-type.tool";
126+
};
127+
/* End PBXNativeTarget section */
128+
129+
/* Begin PBXProject section */
130+
DAA53DD521E5CE0400C6611F /* Project object */ = {
131+
isa = PBXProject;
132+
attributes = {
133+
LastUpgradeCheck = 1010;
134+
ORGANIZATIONNAME = "王俊";
135+
TargetAttributes = {
136+
DAA53DDC21E5CE0400C6611F = {
137+
CreatedOnToolsVersion = 10.1;
138+
};
139+
};
140+
};
141+
buildConfigurationList = DAA53DD821E5CE0400C6611F /* Build configuration list for PBXProject "bridge" */;
142+
compatibilityVersion = "Xcode 9.3";
143+
developmentRegion = en;
144+
hasScannedForEncodings = 0;
145+
knownRegions = (
146+
en,
147+
);
148+
mainGroup = DAA53DD421E5CE0400C6611F;
149+
productRefGroup = DAA53DDE21E5CE0400C6611F /* Products */;
150+
projectDirPath = "";
151+
projectRoot = "";
152+
targets = (
153+
DAA53DDC21E5CE0400C6611F /* bridge */,
154+
);
155+
};
156+
/* End PBXProject section */
157+
158+
/* Begin PBXSourcesBuildPhase section */
159+
DAA53DD921E5CE0400C6611F /* Sources */ = {
160+
isa = PBXSourcesBuildPhase;
161+
buildActionMask = 2147483647;
162+
files = (
163+
DAA53DE121E5CE0400C6611F /* main.m in Sources */,
164+
DAA53DF821E5D24600C6611F /* HandsetBrandS.m in Sources */,
165+
DAA53DEF21E5CF3600C6611F /* HandsetAddressList.m in Sources */,
166+
DAA53DF221E5CFB000C6611F /* HandsetBrandN.m in Sources */,
167+
DAA53DF521E5CFEC00C6611F /* HandsetBrandM.m in Sources */,
168+
DAA53DEC21E5CEF900C6611F /* HandsetGame.m in Sources */,
169+
DAA53DFB21E5D28900C6611F /* HandsetMp3.m in Sources */,
170+
);
171+
runOnlyForDeploymentPostprocessing = 0;
172+
};
173+
/* End PBXSourcesBuildPhase section */
174+
175+
/* Begin XCBuildConfiguration section */
176+
DAA53DE221E5CE0400C6611F /* Debug */ = {
177+
isa = XCBuildConfiguration;
178+
buildSettings = {
179+
ALWAYS_SEARCH_USER_PATHS = NO;
180+
CLANG_ANALYZER_NONNULL = YES;
181+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
182+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
183+
CLANG_CXX_LIBRARY = "libc++";
184+
CLANG_ENABLE_MODULES = YES;
185+
CLANG_ENABLE_OBJC_ARC = YES;
186+
CLANG_ENABLE_OBJC_WEAK = YES;
187+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
188+
CLANG_WARN_BOOL_CONVERSION = YES;
189+
CLANG_WARN_COMMA = YES;
190+
CLANG_WARN_CONSTANT_CONVERSION = YES;
191+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
192+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
193+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
194+
CLANG_WARN_EMPTY_BODY = YES;
195+
CLANG_WARN_ENUM_CONVERSION = YES;
196+
CLANG_WARN_INFINITE_RECURSION = YES;
197+
CLANG_WARN_INT_CONVERSION = YES;
198+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
199+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
200+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
201+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
202+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
203+
CLANG_WARN_STRICT_PROTOTYPES = YES;
204+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
205+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
206+
CLANG_WARN_UNREACHABLE_CODE = YES;
207+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
208+
CODE_SIGN_IDENTITY = "Mac Developer";
209+
COPY_PHASE_STRIP = NO;
210+
DEBUG_INFORMATION_FORMAT = dwarf;
211+
ENABLE_STRICT_OBJC_MSGSEND = YES;
212+
ENABLE_TESTABILITY = YES;
213+
GCC_C_LANGUAGE_STANDARD = gnu11;
214+
GCC_DYNAMIC_NO_PIC = NO;
215+
GCC_NO_COMMON_BLOCKS = YES;
216+
GCC_OPTIMIZATION_LEVEL = 0;
217+
GCC_PREPROCESSOR_DEFINITIONS = (
218+
"DEBUG=1",
219+
"$(inherited)",
220+
);
221+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
222+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
223+
GCC_WARN_UNDECLARED_SELECTOR = YES;
224+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
225+
GCC_WARN_UNUSED_FUNCTION = YES;
226+
GCC_WARN_UNUSED_VARIABLE = YES;
227+
MACOSX_DEPLOYMENT_TARGET = 10.14;
228+
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
229+
MTL_FAST_MATH = YES;
230+
ONLY_ACTIVE_ARCH = YES;
231+
SDKROOT = macosx;
232+
};
233+
name = Debug;
234+
};
235+
DAA53DE321E5CE0400C6611F /* Release */ = {
236+
isa = XCBuildConfiguration;
237+
buildSettings = {
238+
ALWAYS_SEARCH_USER_PATHS = NO;
239+
CLANG_ANALYZER_NONNULL = YES;
240+
CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
241+
CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
242+
CLANG_CXX_LIBRARY = "libc++";
243+
CLANG_ENABLE_MODULES = YES;
244+
CLANG_ENABLE_OBJC_ARC = YES;
245+
CLANG_ENABLE_OBJC_WEAK = YES;
246+
CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
247+
CLANG_WARN_BOOL_CONVERSION = YES;
248+
CLANG_WARN_COMMA = YES;
249+
CLANG_WARN_CONSTANT_CONVERSION = YES;
250+
CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
251+
CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
252+
CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
253+
CLANG_WARN_EMPTY_BODY = YES;
254+
CLANG_WARN_ENUM_CONVERSION = YES;
255+
CLANG_WARN_INFINITE_RECURSION = YES;
256+
CLANG_WARN_INT_CONVERSION = YES;
257+
CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
258+
CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
259+
CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
260+
CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
261+
CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
262+
CLANG_WARN_STRICT_PROTOTYPES = YES;
263+
CLANG_WARN_SUSPICIOUS_MOVE = YES;
264+
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
265+
CLANG_WARN_UNREACHABLE_CODE = YES;
266+
CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
267+
CODE_SIGN_IDENTITY = "Mac Developer";
268+
COPY_PHASE_STRIP = NO;
269+
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
270+
ENABLE_NS_ASSERTIONS = NO;
271+
ENABLE_STRICT_OBJC_MSGSEND = YES;
272+
GCC_C_LANGUAGE_STANDARD = gnu11;
273+
GCC_NO_COMMON_BLOCKS = YES;
274+
GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
275+
GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
276+
GCC_WARN_UNDECLARED_SELECTOR = YES;
277+
GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
278+
GCC_WARN_UNUSED_FUNCTION = YES;
279+
GCC_WARN_UNUSED_VARIABLE = YES;
280+
MACOSX_DEPLOYMENT_TARGET = 10.14;
281+
MTL_ENABLE_DEBUG_INFO = NO;
282+
MTL_FAST_MATH = YES;
283+
SDKROOT = macosx;
284+
};
285+
name = Release;
286+
};
287+
DAA53DE521E5CE0400C6611F /* Debug */ = {
288+
isa = XCBuildConfiguration;
289+
buildSettings = {
290+
CODE_SIGN_STYLE = Automatic;
291+
DEVELOPMENT_TEAM = 7465LVKW35;
292+
PRODUCT_NAME = "$(TARGET_NAME)";
293+
};
294+
name = Debug;
295+
};
296+
DAA53DE621E5CE0400C6611F /* Release */ = {
297+
isa = XCBuildConfiguration;
298+
buildSettings = {
299+
CODE_SIGN_STYLE = Automatic;
300+
DEVELOPMENT_TEAM = 7465LVKW35;
301+
PRODUCT_NAME = "$(TARGET_NAME)";
302+
};
303+
name = Release;
304+
};
305+
/* End XCBuildConfiguration section */
306+
307+
/* Begin XCConfigurationList section */
308+
DAA53DD821E5CE0400C6611F /* Build configuration list for PBXProject "bridge" */ = {
309+
isa = XCConfigurationList;
310+
buildConfigurations = (
311+
DAA53DE221E5CE0400C6611F /* Debug */,
312+
DAA53DE321E5CE0400C6611F /* Release */,
313+
);
314+
defaultConfigurationIsVisible = 0;
315+
defaultConfigurationName = Release;
316+
};
317+
DAA53DE421E5CE0400C6611F /* Build configuration list for PBXNativeTarget "bridge" */ = {
318+
isa = XCConfigurationList;
319+
buildConfigurations = (
320+
DAA53DE521E5CE0400C6611F /* Debug */,
321+
DAA53DE621E5CE0400C6611F /* Release */,
322+
);
323+
defaultConfigurationIsVisible = 0;
324+
defaultConfigurationName = Release;
325+
};
326+
/* End XCConfigurationList section */
327+
};
328+
rootObject = DAA53DD521E5CE0400C6611F /* Project object */;
329+
}

da-hua-she-ji-mo-shi/22-bridge/bridge/bridge.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>
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
//
2+
// HandsetAddressList.h
3+
// bridge
4+
//
5+
// Created by 王俊 on 2019/1/9.
6+
// Copyright © 2019 王俊. All rights reserved.
7+
//
8+
9+
#import <Foundation/Foundation.h>
10+
#import "./HandsetSoft.h"
11+
12+
NS_ASSUME_NONNULL_BEGIN
13+
14+
@interface HandsetAddressList : NSObject<HandsetSoft>
15+
16+
@end
17+
18+
NS_ASSUME_NONNULL_END

0 commit comments

Comments
 (0)