Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lsh
patterns
提交
ed2609b8
P
patterns
项目概览
lsh
/
patterns
通知
7
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
patterns
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ed2609b8
编写于
11月 24, 2021
作者:
C
chenjianqiang
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
增加适配器模式 ☆*: .。. o(≧▽≦)o .。.:*☆
上级
46d3e4c3
变更
18
隐藏空白更改
内联
并排
Showing
18 changed file
with
181 addition
and
209 deletion
+181
-209
.idea/workspace.xml
.idea/workspace.xml
+0
-201
out/production/patterns/com/pattern/AdapterPattern/materials/AdapterMain.class
...ns/com/pattern/AdapterPattern/materials/AdapterMain.class
+0
-0
out/production/patterns/com/pattern/AdapterPattern/materials/README.md
...n/patterns/com/pattern/AdapterPattern/materials/README.md
+1
-0
out/production/patterns/com/pattern/AdapterPattern/materials/po/AdvancedMediaAdapt.class
...tern/AdapterPattern/materials/po/AdvancedMediaAdapt.class
+0
-0
out/production/patterns/com/pattern/AdapterPattern/materials/po/AdvancedMediaPlayer.class
...ern/AdapterPattern/materials/po/AdvancedMediaPlayer.class
+0
-0
out/production/patterns/com/pattern/AdapterPattern/materials/po/AudioAdapter.class
...om/pattern/AdapterPattern/materials/po/AudioAdapter.class
+0
-0
out/production/patterns/com/pattern/AdapterPattern/materials/po/MediaAdapter.class
...om/pattern/AdapterPattern/materials/po/MediaAdapter.class
+0
-0
out/production/patterns/com/pattern/AdapterPattern/materials/po/MediaPlayer.class
...com/pattern/AdapterPattern/materials/po/MediaPlayer.class
+0
-0
out/production/patterns/com/pattern/PatternApplication.class
out/production/patterns/com/pattern/PatternApplication.class
+0
-0
src/com/pattern/AdapterPattern/examples/README.md
src/com/pattern/AdapterPattern/examples/README.md
+0
-0
src/com/pattern/AdapterPattern/materials/AdapterMain.java
src/com/pattern/AdapterPattern/materials/AdapterMain.java
+24
-0
src/com/pattern/AdapterPattern/materials/README.md
src/com/pattern/AdapterPattern/materials/README.md
+1
-0
src/com/pattern/AdapterPattern/materials/po/AdvancedMediaAdapt.java
...ttern/AdapterPattern/materials/po/AdvancedMediaAdapt.java
+29
-0
src/com/pattern/AdapterPattern/materials/po/AdvancedMediaPlayer.java
...tern/AdapterPattern/materials/po/AdvancedMediaPlayer.java
+22
-0
src/com/pattern/AdapterPattern/materials/po/AudioAdapter.java
...com/pattern/AdapterPattern/materials/po/AudioAdapter.java
+29
-0
src/com/pattern/AdapterPattern/materials/po/MediaAdapter.java
...com/pattern/AdapterPattern/materials/po/MediaAdapter.java
+26
-0
src/com/pattern/AdapterPattern/materials/po/MediaPlayer.java
src/com/pattern/AdapterPattern/materials/po/MediaPlayer.java
+15
-0
src/com/pattern/PatternApplication.java
src/com/pattern/PatternApplication.java
+34
-8
未找到文件。
.idea/workspace.xml
已删除
100644 → 0
浏览文件 @
46d3e4c3
<?xml version="1.0" encoding="UTF-8"?>
<project
version=
"4"
>
<component
name=
"ChangeListManager"
>
<list
default=
"true"
id=
"e43e9168-5945-4f45-b4c2-1b6410d1eef8"
name=
"Changes"
comment=
"增加策略模式案例 Signed-off-by: chenjianqiang <wushanxi@gmail.com>"
>
<change
beforePath=
"$PROJECT_DIR$/src/com/pattern/PatternApplication.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/com/pattern/PatternApplication.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/com/pattern/ProxyPattern/ProxyMain.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/com/pattern/ProxyPattern/ProxyMain.java"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/com/pattern/ProxyPattern/materials/README.md"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/com/pattern/ProxyPattern/materials/README.md"
afterDir=
"false"
/>
<change
beforePath=
"$PROJECT_DIR$/src/com/pattern/ProxyPattern/materials/po/YellowBullHandler.java"
beforeDir=
"false"
afterPath=
"$PROJECT_DIR$/src/com/pattern/ProxyPattern/materials/po/YellowBullHandler.java"
afterDir=
"false"
/>
</list>
<option
name=
"SHOW_DIALOG"
value=
"false"
/>
<option
name=
"HIGHLIGHT_CONFLICTS"
value=
"true"
/>
<option
name=
"HIGHLIGHT_NON_ACTIVE_CHANGELIST"
value=
"false"
/>
<option
name=
"LAST_RESOLUTION"
value=
"IGNORE"
/>
</component>
<component
name=
"CodeInsightWorkspaceSettings"
>
<option
name=
"optimizeImportsOnTheFly"
value=
"true"
/>
</component>
<component
name=
"FileTemplateManagerImpl"
>
<option
name=
"RECENT_TEMPLATES"
>
<list>
<option
value=
"package-info"
/>
<option
value=
"Interface"
/>
<option
value=
"Class"
/>
</list>
</option>
</component>
<component
name=
"Git.Settings"
>
<option
name=
"RECENT_GIT_ROOT_PATH"
value=
"$PROJECT_DIR$"
/>
</component>
<component
name=
"ProjectId"
id=
"1zOe73GcNcKVHdZbMKVNmxcnwqc"
/>
<component
name=
"ProjectLevelVcsManager"
>
<ConfirmationsSetting
value=
"1"
id=
"Add"
/>
</component>
<component
name=
"ProjectView"
>
<navigator
currentView=
"ProjectPane"
proportions=
""
version=
"1"
splitterProportion=
"0.5"
>
<flattenPackages
/>
<showMembers
/>
<showModules
/>
<showLibraryContents
/>
<hideEmptyPackages
/>
<abbreviatePackageNames
/>
<autoscrollToSource
/>
<autoscrollFromSource
/>
<sortByType
/>
</navigator>
<panes>
<pane
id=
"Scope"
/>
<pane
id=
"PackagesPane"
/>
<pane
id=
"ProjectPane"
>
<subPane>
<PATH>
<PATH_ELEMENT>
<option
name=
"myItemId"
value=
"untitled104"
/>
<option
name=
"myItemType"
value=
"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode"
/>
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option
name=
"myItemId"
value=
"untitled104"
/>
<option
name=
"myItemType"
value=
"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode"
/>
</PATH_ELEMENT>
<PATH_ELEMENT>
<option
name=
"myItemId"
value=
"untitled104"
/>
<option
name=
"myItemType"
value=
"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode"
/>
</PATH_ELEMENT>
</PATH>
<PATH>
<PATH_ELEMENT>
<option
name=
"myItemId"
value=
"untitled104"
/>
<option
name=
"myItemType"
value=
"com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode"
/>
</PATH_ELEMENT>
<PATH_ELEMENT>
<option
name=
"myItemId"
value=
"untitled104"
/>
<option
name=
"myItemType"
value=
"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode"
/>
</PATH_ELEMENT>
<PATH_ELEMENT>
<option
name=
"myItemId"
value=
"src"
/>
<option
name=
"myItemType"
value=
"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode"
/>
</PATH_ELEMENT>
<PATH_ELEMENT>
<option
name=
"myItemId"
value=
"company"
/>
<option
name=
"myItemType"
value=
"com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode"
/>
</PATH_ELEMENT>
</PATH>
</subPane>
</pane>
</panes>
</component>
<component
name=
"ProjectViewState"
>
<option
name=
"autoscrollFromSource"
value=
"true"
/>
<option
name=
"hideEmptyMiddlePackages"
value=
"true"
/>
<option
name=
"showLibraryContents"
value=
"true"
/>
</component>
<component
name=
"PropertiesComponent"
>
<property
name=
"RunOnceActivity.OpenProjectViewOnStart"
value=
"true"
/>
<property
name=
"RunOnceActivity.ShowReadmeOnStart"
value=
"true"
/>
<property
name=
"WebServerToolWindowFactoryState"
value=
"false"
/>
<property
name=
"go.formatter.settings.were.checked"
value=
"true"
/>
<property
name=
"go.import.settings.migrated"
value=
"true"
/>
<property
name=
"last_opened_file_path"
value=
"$PROJECT_DIR$/src/com/pattern"
/>
<property
name=
"settings.editor.selected.configurable"
value=
"editor.preferences.import"
/>
<property
name=
"typescript.add.unambiguous.imports.on.the.fly"
value=
"true"
/>
<property
name=
"vue.rearranger.settings.migration"
value=
"true"
/>
</component>
<component
name=
"RecentsManager"
>
<key
name=
"CopyFile.RECENT_KEYS"
>
<recent
name=
"E:\chen\patterns\src\com\pattern"
/>
<recent
name=
"E:\chen\patterns\src\com\pattern\demo\materials"
/>
<recent
name=
"E:\chen\patterns\src\com\pattern\demo\examples"
/>
<recent
name=
"E:\chen\patterns\src\com\pattern\FactoryPattern\AbstractFactory\materials"
/>
<recent
name=
"E:\chen\patterns\src\com\pattern\FactoryPattern\AbstractFactory"
/>
</key>
<key
name=
"MoveClassesOrPackagesDialog.RECENTS_KEY"
>
<recent
name=
"com.pattern.demo"
/>
</key>
<key
name=
"CopyClassDialog.RECENTS_KEY"
>
<recent
name=
"com.pattern.ProxyPattern.materials.po"
/>
<recent
name=
"com.pattern.TemplatePattern.materials.po"
/>
<recent
name=
"com.pattern.SingletonPattern.materials"
/>
<recent
name=
"com.pattern.FactoryPattern.AbstractFactory.materials.factory"
/>
<recent
name=
"com.pattern.FactoryPattern.FunctionFactory.materials.factory"
/>
</key>
</component>
<component
name=
"RunManager"
selected=
"Application.PatternApplication"
>
<configuration
name=
"PatternApplication"
type=
"Application"
factoryName=
"Application"
temporary=
"true"
>
<option
name=
"MAIN_CLASS_NAME"
value=
"com.pattern.PatternApplication"
/>
<module
name=
"patterns"
/>
<RunnerSettings
RunnerId=
"Run"
/>
<ConfigurationWrapper
RunnerId=
"Run"
/>
<method
v=
"2"
>
<option
name=
"Make"
enabled=
"true"
/>
</method>
</configuration>
<configuration
name=
"generated-requests#2"
type=
"HttpClient.HttpRequestRunConfigurationType"
factoryName=
"HTTP Request"
temporary=
"true"
path=
"$APPLICATION_CONFIG_DIR$/scratches/generated-requests.http"
index=
"2"
runType=
"Run single request"
>
<method
v=
"2"
/>
</configuration>
<list>
<item
itemvalue=
"Application.PatternApplication"
/>
<item
itemvalue=
"HTTP Request.generated-requests#2"
/>
</list>
<recent_temporary>
<list>
<item
itemvalue=
"Application.PatternApplication"
/>
<item
itemvalue=
"HTTP Request.generated-requests#2"
/>
</list>
</recent_temporary>
</component>
<component
name=
"SpellCheckerSettings"
RuntimeDictionaries=
"0"
Folders=
"0"
CustomDictionaries=
"0"
DefaultDictionary=
"application-level"
UseSingleDictionary=
"true"
transferred=
"true"
/>
<component
name=
"TaskManager"
>
<task
active=
"true"
id=
"Default"
summary=
"Default task"
>
<changelist
id=
"e43e9168-5945-4f45-b4c2-1b6410d1eef8"
name=
"Changes"
comment=
""
/>
<created>
1634023392076
</created>
<option
name=
"number"
value=
"Default"
/>
<option
name=
"presentableId"
value=
"Default"
/>
<updated>
1634023392076
</updated>
<workItem
from=
"1634023393246"
duration=
"1045000"
/>
<workItem
from=
"1634026286938"
duration=
"1220000"
/>
<workItem
from=
"1634085227295"
duration=
"1967000"
/>
<workItem
from=
"1634087918450"
duration=
"3646000"
/>
<workItem
from=
"1634091679401"
duration=
"1323000"
/>
<workItem
from=
"1634093719115"
duration=
"14778000"
/>
<workItem
from=
"1634115899707"
duration=
"377000"
/>
<workItem
from=
"1634180031509"
duration=
"3704000"
/>
<workItem
from=
"1636338443252"
duration=
"4865000"
/>
<workItem
from=
"1636350581794"
duration=
"2679000"
/>
<workItem
from=
"1637721077456"
duration=
"1739000"
/>
</task>
<task
id=
"LOCAL-00001"
summary=
"增加策略模式案例 Signed-off-by: chenjianqiang <wushanxi@gmail.com>"
>
<created>
1634096220780
</created>
<option
name=
"number"
value=
"00001"
/>
<option
name=
"presentableId"
value=
"LOCAL-00001"
/>
<option
name=
"project"
value=
"LOCAL"
/>
<updated>
1634096220780
</updated>
</task>
<option
name=
"localTasksCounter"
value=
"2"
/>
<servers
/>
</component>
<component
name=
"TypeScriptGeneratedFilesManager"
>
<option
name=
"version"
value=
"3"
/>
</component>
<component
name=
"Vcs.Log.Tabs.Properties"
>
<option
name=
"TAB_STATES"
>
<map>
<entry
key=
"MAIN"
>
<value>
<State
/>
</value>
</entry>
</map>
</option>
<option
name=
"oldMeFiltersMigrated"
value=
"true"
/>
</component>
<component
name=
"VcsManagerConfiguration"
>
<MESSAGE
value=
"增加策略模式案例 Signed-off-by: chenjianqiang <wushanxi@gmail.com>"
/>
<option
name=
"LAST_COMMIT_MESSAGE"
value=
"增加策略模式案例 Signed-off-by: chenjianqiang <wushanxi@gmail.com>"
/>
</component>
<component
name=
"XSLT-Support.FileAssociations.UIState"
>
<expand
/>
<select
/>
</component>
</project>
\ No newline at end of file
out/production/patterns/com/pattern/AdapterPattern/materials/AdapterMain.class
0 → 100644
浏览文件 @
ed2609b8
文件已添加
out/production/patterns/com/pattern/AdapterPattern/materials/README.md
0 → 100644
浏览文件 @
ed2609b8
适配器模式
out/production/patterns/com/pattern/AdapterPattern/materials/po/AdvancedMediaAdapt.class
0 → 100644
浏览文件 @
ed2609b8
文件已添加
out/production/patterns/com/pattern/AdapterPattern/materials/po/AdvancedMediaPlayer.class
0 → 100644
浏览文件 @
ed2609b8
文件已添加
out/production/patterns/com/pattern/AdapterPattern/materials/po/AudioAdapter.class
0 → 100644
浏览文件 @
ed2609b8
文件已添加
out/production/patterns/com/pattern/AdapterPattern/materials/po/MediaAdapter.class
0 → 100644
浏览文件 @
ed2609b8
文件已添加
out/production/patterns/com/pattern/AdapterPattern/materials/po/MediaPlayer.class
0 → 100644
浏览文件 @
ed2609b8
文件已添加
out/production/patterns/com/pattern/PatternApplication.class
浏览文件 @
ed2609b8
无法预览此类型文件
src/com/pattern/AdapterPattern/examples/README.md
0 → 100644
浏览文件 @
ed2609b8
src/com/pattern/AdapterPattern/materials/AdapterMain.java
0 → 100644
浏览文件 @
ed2609b8
package
com.pattern.AdapterPattern.materials
;
import
com.pattern.AdapterPattern.materials.po.AudioAdapter
;
import
com.pattern.AdapterPattern.materials.po.MediaAdapter
;
import
com.pattern.AdapterPattern.materials.po.MediaPlayer
;
/**
* @author lx
* @date 2021/11/24 13:20
**/
public
class
AdapterMain
{
public
void
main
()
{
//原有的
MediaPlayer
m
=
new
MediaAdapter
();
m
.
play
(
"music"
,
"两只蝙蝠.mp3"
);
m
.
play
(
"docx"
,
"富婆通讯录.docx"
);
//拓展的
MediaPlayer
a
=
new
AudioAdapter
();
a
.
play
(
"music"
,
"两只蝙蝠.mp3"
);
a
.
play
(
"docx"
,
"富婆通讯录.docx"
);
}
}
src/com/pattern/AdapterPattern/materials/README.md
0 → 100644
浏览文件 @
ed2609b8
适配器模式
src/com/pattern/AdapterPattern/materials/po/AdvancedMediaAdapt.java
0 → 100644
浏览文件 @
ed2609b8
package
com.pattern.AdapterPattern.materials.po
;
/**
* 功能实现
*
* @author lx
*/
public
class
AdvancedMediaAdapt
implements
AdvancedMediaPlayer
{
/**
* 播放音乐
*
* @param fileName 文件名称
*/
@Override
public
void
playMusic
(
String
fileName
)
{
System
.
out
.
println
(
"正在播放的音乐名字叫做:"
+
fileName
);
}
/**
* 播放视频
*
* @param fileName 文件名称
*/
@Override
public
void
playVideo
(
String
fileName
)
{
System
.
out
.
println
(
"正在播放的视频名字叫做:"
+
fileName
);
}
}
src/com/pattern/AdapterPattern/materials/po/AdvancedMediaPlayer.java
0 → 100644
浏览文件 @
ed2609b8
package
com.pattern.AdapterPattern.materials.po
;
/**
* 功能抽象
*
* @author lx
*/
public
interface
AdvancedMediaPlayer
{
/**
* 播放音乐
*
* @param fileName 文件名称
*/
void
playMusic
(
String
fileName
);
/**
* 播放视频
*
* @param fileName 文件名称
*/
void
playVideo
(
String
fileName
);
}
src/com/pattern/AdapterPattern/materials/po/AudioAdapter.java
0 → 100644
浏览文件 @
ed2609b8
package
com.pattern.AdapterPattern.materials.po
;
/**
* 扩宽功能
* @author lx
* @date 2021/11/24 13:24
**/
public
class
AudioAdapter
implements
MediaPlayer
{
/**
* 运行
*
* @param audioType 类型
* @param fileName 文件名称
*/
@Override
public
void
play
(
String
audioType
,
String
fileName
)
{
AdvancedMediaPlayer
advancedMusicPlayer
=
new
AdvancedMediaAdapt
();
if
(
audioType
.
equals
(
"music"
)
||
audioType
.
equals
(
"video"
))
{
MediaAdapter
mediaAdapter
=
new
MediaAdapter
();
mediaAdapter
.
play
(
audioType
,
fileName
);
}
else
if
(
audioType
.
equals
(
"docx"
)){
System
.
out
.
println
(
"docx 文件类型"
);
}
else
{
System
.
out
.
println
(
"不支持的类型"
);
}
}
}
src/com/pattern/AdapterPattern/materials/po/MediaAdapter.java
0 → 100644
浏览文件 @
ed2609b8
package
com.pattern.AdapterPattern.materials.po
;
/**
*实现了基础功能
* @author lx
* @date 2021/11/24 13:24
**/
public
class
MediaAdapter
implements
MediaPlayer
{
/**
* 运行
*
* @param audioType 类型
* @param fileName 文件名称
*/
@Override
public
void
play
(
String
audioType
,
String
fileName
)
{
AdvancedMediaPlayer
advancedMusicPlayer
=
new
AdvancedMediaAdapt
();
if
(
audioType
.
equals
(
"music"
))
{
advancedMusicPlayer
.
playMusic
(
fileName
);
}
else
if
(
audioType
.
equals
(
"video"
))
{
advancedMusicPlayer
.
playVideo
(
fileName
);
}
else
{
System
.
out
.
println
(
"不支持的类型"
);
}
}
}
src/com/pattern/AdapterPattern/materials/po/MediaPlayer.java
0 → 100644
浏览文件 @
ed2609b8
package
com.pattern.AdapterPattern.materials.po
;
/**
* 播放器
* @author lx
* @date 2021/11/24 13:20
**/
public
interface
MediaPlayer
{
/**
* 运行
* @param audioType 类型
* @param fileName 文件名称
*/
void
play
(
String
audioType
,
String
fileName
);
}
src/com/pattern/PatternApplication.java
浏览文件 @
ed2609b8
...
...
@@ -8,7 +8,7 @@ public class PatternApplication {
public
static
void
main
(
String
[]
args
)
{
/*
解释器模式
1.
解释器模式
new InterpreterMain().main();
2021-10-14:制作多个计算规则,用这些规则去拼装组合来实现某些需求
2021-11-24:一个接口很多实例的类,其中一个类是终端计算规则,剩下的类传入一个或多个终端计算,并把每一个终端计算结果再进行计算,成为一个单独的计算规则
...
...
@@ -17,7 +17,7 @@ public class PatternApplication {
/*
策略模式
2.
策略模式
new StrategyMain().main();
2021-10-14:通过构造context传入不同的规则,再给context执行方法传入不同的值进行不同的计算
2021-11-24:context作为触发器,传进来不同的策略,然后执行策略里面的方法
...
...
@@ -26,7 +26,7 @@ public class PatternApplication {
/*
工厂模式 -- 简单工厂
3.
工厂模式 -- 简单工厂
new SimpleFactoryMain().main();
2021-10-14:通过factory区分你确切需要的类,返回该类,执行内涵的方法
...
...
@@ -35,7 +35,7 @@ public class PatternApplication {
/*
工厂模式 -- 方法工厂
3.
工厂模式 -- 方法工厂
new FunctionFactoryMain().main();
2021-10-14: 一个工厂只能造一种产品,也就是一个方法工厂返回一个对象,想要多个对象就要多个工厂
...
...
@@ -44,7 +44,7 @@ public class PatternApplication {
/*
工厂模式 -- 抽象工厂
3.
工厂模式 -- 抽象工厂
new AbstractFactoryMain().main();
2021-10-14: 把工厂抽象,实例化一个工厂定义多个对象的产出,然后实例化这个工厂就可以拿到多个产品
...
...
@@ -52,7 +52,7 @@ public class PatternApplication {
/*
单例模式
4.
单例模式
new SingleMain().main();
2021-10-14:
...
...
@@ -61,7 +61,7 @@ public class PatternApplication {
/*
模板模式
5.
模板模式
new TemplateMain().main();
2021-10-14:
...
...
@@ -70,13 +70,39 @@ public class PatternApplication {
/*
代理模式 ---动态代理
6.
代理模式 ---动态代理
new ProxyMain().reflectMain();
代理模式 ---静态代理
new ProxyMain().staticMain();
2021-10-14:
*/
/*
7.适配器模式
new AdapterMain().main();
2021-11-24:
*/
/*
8.适配器模式
new AdapterMain().main();
2021-11-24:
*/
/*
9.桥接模式
new AdapterMain().main();
2021-11-24:
*/
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录