From b41961fb2e22c177e6be0a9610171eac90e7054f Mon Sep 17 00:00:00 2001 From: limingyang <461284063@qq.com> Date: Tue, 20 Aug 2019 14:29:02 +0800 Subject: [PATCH 01/47] =?UTF-8?q?=E5=8A=A0=E5=85=A5ignore?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..dc0697d --- /dev/null +++ b/.gitignore @@ -0,0 +1,24 @@ +# Eclipse +.classpath +.project +.settings/ + +# Intellij +.idea/ +*.iml +*.iws + +# Mac +.DS_Store + +# SVN +.svn/ + +# Maven +log/ +target/ + +# Syswin +disconf/ +logs/ +/NewInnerAPI/ From 99b6aa0de12d5f6b8f66a5589ecad9b7ee15abe3 Mon Sep 17 00:00:00 2001 From: youlookwhat <770413277@qq.com> Date: Wed, 25 Sep 2019 22:00:21 +0800 Subject: [PATCH 02/47] update README.md --- DesignPattern.iml | 19 ------------------- README.md | 8 ++++---- 2 files changed, 4 insertions(+), 23 deletions(-) delete mode 100644 DesignPattern.iml diff --git a/DesignPattern.iml b/DesignPattern.iml deleted file mode 100644 index bb5b383..0000000 --- a/DesignPattern.iml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/README.md b/README.md index d9d964d..ffcc4e1 100644 --- a/README.md +++ b/README.md @@ -69,7 +69,7 @@ - 专题接口:[Subject.java](https://github.com/youlookwhat/DesignPattern/blob/master/app/src/main/java/com/example/jingbin/designpattern/observer/interfaces/Subject.java) ; - ```java + ```java /** * 注册一个观察者 */ @@ -84,7 +84,7 @@ * 通知所有观察者 */ public void notifyObservers(); - ``` + ``` - 3D服务号的实现类:[ObjectFor3D.java](https://github.com/youlookwhat/DesignPattern/blob/master/app/src/main/java/com/example/jingbin/designpattern/observer/classs/ObjectFor3D.java) @@ -117,7 +117,7 @@ - 所有观察者需要实现此接口:[Observer.java](https://github.com/youlookwhat/DesignPattern/blob/master/app/src/main/java/com/example/jingbin/designpattern/observer/interfaces/Observer.java) - ```java + ```java public ObserverUser1(Subject subject) { subject.registerObserver(this); } @@ -125,7 +125,7 @@ public void update(String msg) { Log.e("-----ObserverUser1 ", "得到 3D 号码:" + msg + ", 我要记下来。 "); } - ``` + ``` - 最后测试:[ObserverActivity.java](https://github.com/youlookwhat/DesignPattern/blob/master/app/src/main/java/com/example/jingbin/designpattern/observer/ObserverActivity.java) From d6ae88a490257585c92eb869297cce4df9b40bbb Mon Sep 17 00:00:00 2001 From: youlookwhat <770413277@qq.com> Date: Wed, 25 Sep 2019 22:02:13 +0800 Subject: [PATCH 03/47] update README.md --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index ffcc4e1..9a55514 100644 --- a/README.md +++ b/README.md @@ -118,12 +118,12 @@ - 所有观察者需要实现此接口:[Observer.java](https://github.com/youlookwhat/DesignPattern/blob/master/app/src/main/java/com/example/jingbin/designpattern/observer/interfaces/Observer.java) ```java - public ObserverUser1(Subject subject) { + public ObserverUser1(Subject subject) { subject.registerObserver(this); } @Override public void update(String msg) { - Log.e("-----ObserverUser1 ", "得到 3D 号码:" + msg + ", 我要记下来。 "); + Log.e("-----ObserverUser1 ", "得到 3D 号码:" + msg + ", 我要记下来。"); } ``` From 3b2d0abae9abf08645291fbc818682ca9906d28d Mon Sep 17 00:00:00 2001 From: youlookwhat <770413277@qq.com> Date: Wed, 25 Sep 2019 22:54:48 +0800 Subject: [PATCH 04/47] build gradle to 3.4.2 --- app/build.gradle | 21 +++++++++++---------- build.gradle | 8 ++++++-- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 18 insertions(+), 13 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index eb475a9..83ca775 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,11 +1,12 @@ apply plugin: 'com.android.application' + android { - compileSdkVersion 24 - buildToolsVersion "24.0.2" + compileSdkVersion 28 + buildToolsVersion "28.0.3" defaultConfig { applicationId "com.example.jingbin.designpattern" minSdkVersion 19 - targetSdkVersion 24 + targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -17,15 +18,15 @@ android { } } } -apply plugin: 'com.neenbedankt.android-apt'//增加这一句 + dependencies { - androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { + androidTestImplementation('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:24.2.1' - testCompile 'junit:junit:4.12' - compile fileTree(include: ['*.jar'], dir: 'libs') + implementation 'com.android.support:appcompat-v7:28.0.0' + testImplementation 'junit:junit:4.12' + implementation fileTree(include: ['*.jar'], dir: 'libs') //增加这二句 - compile 'com.jakewharton:butterknife:8.4.0' - apt 'com.jakewharton:butterknife-compiler:8.4.0' + implementation 'com.jakewharton:butterknife:8.8.1' + annotationProcessor "com.jakewharton:butterknife-compiler:8.8.1" } diff --git a/build.gradle b/build.gradle index 24750a2..2d8b70f 100644 --- a/build.gradle +++ b/build.gradle @@ -2,11 +2,13 @@ buildscript { repositories { + google() jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:2.2.0' - classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' //增加这一句 + classpath 'com.android.tools.build:gradle:3.4.2' + classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'//Added line + classpath 'com.jakewharton:butterknife-gradle-plugin:9.0.0-rc2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -14,6 +16,8 @@ buildscript { allprojects { repositories { + mavenCentral() + google() jcenter() } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 04e285f..3e94244 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.14.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.1.1-all.zip From 300e537a971a9b013e4a23c72dcdeabcf31a304a Mon Sep 17 00:00:00 2001 From: youlookwhat <770413277@qq.com> Date: Fri, 31 Jan 2020 16:31:43 +0800 Subject: [PATCH 05/47] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=20=E5=BB=BA=E9=80=A0?= =?UTF-8?q?=E8=80=85=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 +++-- app/build.gradle | 5 ++ app/src/main/AndroidManifest.xml | 7 ++- .../jingbin/designpattern/MainActivity.java | 7 +++ .../designpattern/app/AppConstant.java | 1 + .../designpattern/app/PatternApplication.java | 9 --- .../designpattern/builder/Builder.java | 12 ++++ .../builder/BuilderActivity.java | 62 +++++++++++++++++++ .../builder/ConcreteBuilder.java | 21 +++++++ .../designpattern/builder/Director.java | 20 ++++++ .../designpattern/builder/Product.java | 26 ++++++++ app/src/main/res/layout/activity_builder.xml | 59 ++++++++++++++++++ app/src/main/res/layout/activity_main.xml | 25 +++++++- 13 files changed, 255 insertions(+), 16 deletions(-) create mode 100644 app/src/main/java/com/example/jingbin/designpattern/builder/Builder.java create mode 100644 app/src/main/java/com/example/jingbin/designpattern/builder/BuilderActivity.java create mode 100644 app/src/main/java/com/example/jingbin/designpattern/builder/ConcreteBuilder.java create mode 100644 app/src/main/java/com/example/jingbin/designpattern/builder/Director.java create mode 100644 app/src/main/java/com/example/jingbin/designpattern/builder/Product.java create mode 100644 app/src/main/res/layout/activity_builder.xml diff --git a/README.md b/README.md index 9a55514..5eae9c5 100644 --- a/README.md +++ b/README.md @@ -1,16 +1,17 @@ # DesignPattern -> 参照Hongyang的CSDN博客所写。如有错误欢迎指正,如有侵权,请联系我删除。 -#### Java 设计模式(观察者模式、工厂模式、单例模式、策略模式、命令模式、装饰者模式、外观模式、模板方法模式、状态模式) +#### Java 设计模式(观察者模式、工厂模式、单例模式、策略模式、命令模式、装饰者模式、外观模式、模板方法模式、状态模式、建造者模式) -> 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 +设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 设计模式分为三种类型,共23种: - - **创建型模式**:[单例模式](https://github.com/youlookwhat/DesignPattern#3-单例设计模式)、抽象工厂模式、建造者模式、[工厂模式](https://github.com/youlookwhat/DesignPattern#2-工厂模式)、原型模式。 + - **创建型模式**:[单例模式](https://github.com/youlookwhat/DesignPattern#3-单例设计模式)、[抽象工厂模式](https://github.com/youlookwhat/DesignPattern#2-工厂模式)、建造者模式、[工厂模式](https://github.com/youlookwhat/DesignPattern#2-工厂模式)、原型模式。 - **结构型模式**:[适配器模式](https://github.com/youlookwhat/DesignPattern#5-适配器模式)、桥接模式、[装饰模式](https://github.com/youlookwhat/DesignPattern#7-装饰者模式)、组合模式、[外观模式](https://github.com/youlookwhat/DesignPattern#8-外观模式)、享元模式、代理模式。 - **行为型模式**:[模版方法模式](https://github.com/youlookwhat/DesignPattern#9-模板方法模式)、[命令模式](https://github.com/youlookwhat/DesignPattern#6-命令模式)、迭代器模式、[观察者模式](https://github.com/youlookwhat/DesignPattern#1-观察者模式)、中介者模式、备忘录模式、解释器模式、[状态模式](https://github.com/youlookwhat/DesignPattern#10-状态模式)、[策略模式](https://github.com/youlookwhat/DesignPattern#4-策略模式)、职责链模式(责任链模式)、访问者模式。 +> 参照Hongyang的CSDN博客所写。如有错误欢迎指正,如有侵权,请联系我删除。 + ---- @@ -35,6 +36,8 @@ - 9.[ 设计模式 模版方法模式(Template Method Pattern) 展现程序员的一天](http://blog.csdn.net/lmj623565791/article/details/26276093) - 10.[ 设计模式 状态模式(State Pattern) 以自动售货机为例](http://blog.csdn.net/lmj623565791/article/details/26350617) + + - 11.[ 设计模式 建造者模式(Builder Pattern) 以造汽车买汽车为例](https://wiki.jikexueyuan.com/project/java-design-pattern/builder-pattern.html) ## Source Code @@ -48,6 +51,7 @@ > - 8. [Facade](https://github.com/youlookwhat/DesignPattern/tree/master/app/src/main/java/com/example/jingbin/designpattern/facade) > - 9. [Template Method](https://github.com/youlookwhat/DesignPattern/tree/master/app/src/main/java/com/example/jingbin/designpattern/templatemethod) > - 10. [State](https://github.com/youlookwhat/DesignPattern/tree/master/app/src/main/java/com/example/jingbin/designpattern/state) +> - 11. [Builder](https://github.com/youlookwhat/DesignPattern/tree/master/app/src/main/java/com/example/jingbin/designpattern/builder) ## Project Picture @@ -470,6 +474,11 @@ machineBetter.turnCrank(); ``` + +### 11. 建造者模式 +> 建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。 + + ## Download - [DesignPattern.apk](http://download.csdn.net/detail/jingbin_/9684545) diff --git a/app/build.gradle b/app/build.gradle index 83ca775..e49d44c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -17,6 +17,11 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } + + // databinding + dataBinding { + enabled = true + } } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d3938c7..386ec0a 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,5 +1,6 @@ + android:theme="@style/AppTheme" + tools:ignore="GoogleAppIndexingWarning"> @@ -46,6 +48,9 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/example/jingbin/designpattern/MainActivity.java b/app/src/main/java/com/example/jingbin/designpattern/MainActivity.java index fa58191..12a18a7 100644 --- a/app/src/main/java/com/example/jingbin/designpattern/MainActivity.java +++ b/app/src/main/java/com/example/jingbin/designpattern/MainActivity.java @@ -7,6 +7,7 @@ import android.widget.Button; import com.example.jingbin.designpattern.adapter.AdapterActivity; +import com.example.jingbin.designpattern.builder.BuilderActivity; import com.example.jingbin.designpattern.command.CommandActivity; import com.example.jingbin.designpattern.decorator.DecoratorActivity; import com.example.jingbin.designpattern.facade.FacadeActivity; @@ -45,6 +46,8 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe Button btTemplateMethod; @BindView(R.id.bt_state) Button btState; + @BindView(R.id.bt_builder) + Button btBuilder; @Override protected void onCreate(Bundle savedInstanceState) { @@ -65,6 +68,7 @@ private void initListener() { btFacade.setOnClickListener(this); btTemplateMethod.setOnClickListener(this); btState.setOnClickListener(this); + btBuilder.setOnClickListener(this); } @Override @@ -100,6 +104,9 @@ public void onClick(View v) { case R.id.bt_state:// 状态模式 startActivity(new Intent(this, StateActivity.class)); break; + case R.id.bt_builder:// 建造者模式 + startActivity(new Intent(this, BuilderActivity.class)); + break; default: break; } diff --git a/app/src/main/java/com/example/jingbin/designpattern/app/AppConstant.java b/app/src/main/java/com/example/jingbin/designpattern/app/AppConstant.java index be3592a..6ac7a7c 100644 --- a/app/src/main/java/com/example/jingbin/designpattern/app/AppConstant.java +++ b/app/src/main/java/com/example/jingbin/designpattern/app/AppConstant.java @@ -14,6 +14,7 @@ public class AppConstant { public final static String DECORATOR_DEFINE = "装饰者模式(Decorator Pattern)定义:若要扩展功能,装饰者提供了比集成更有弹性的替代方案,动态地将责任附加到对象上。(先简单描述下装饰者模式发挥作用的地方,当我们设计好了一个类,我们需要给这个类添加一些辅助的功能,并且不希望改变这个类的代码,这时候就是装饰者模式大展雄威的时候了。这里还体现了一个原则:类应该对扩展开放,对修改关闭。))"; public final static String FACADE_DEFINE = "外观模式(Facade Pattern)定义:提供一个统一的接口,用来访问子系统中的一群接口,外观定义了一个高层的接口,让子系统更容易使用。其实就是为了方便客户的使用,把一群操作,封装成一个方法。)"; public final static String TEMPLATEMETHOD_DEFINE = "模板方法模式(Template Method Pattern)定义:定义了一个算法的骨架,而将一些步骤延迟到子类中,模版方法使得子类可以在不改变算法结构的情况下,重新定义算法的步骤。(模版方法定义了一个算法的步骤,并且允许子类为一个或多个步骤提供实现。)"; + public final static String BUILDER_DEFINE = "建造者模式(Builder Pattern)建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。"; public final static String JDGC_FACTORY_DEFINE = "简单工厂模式定义:通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。"; public final static String GCFF_FACTORY_DEFINE = "工厂方法模式定义:定义一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法模式把类实例化的过程推迟到子类。"; public final static String CXGC_FACTORY_DEFINE = "抽象工厂模式定义:提供一个接口,用于创建相关的或依赖对象的家族,而不需要明确指定具体类。"; diff --git a/app/src/main/java/com/example/jingbin/designpattern/app/PatternApplication.java b/app/src/main/java/com/example/jingbin/designpattern/app/PatternApplication.java index 8b99c02..cf13c8d 100644 --- a/app/src/main/java/com/example/jingbin/designpattern/app/PatternApplication.java +++ b/app/src/main/java/com/example/jingbin/designpattern/app/PatternApplication.java @@ -2,8 +2,6 @@ import android.app.Application; -import com.example.jingbin.designpattern.singleton.lanhan.SingletonLanHan; - /** * Created by jingbin on 2016/10/22. */ @@ -13,13 +11,6 @@ public class PatternApplication extends Application { private static PatternApplication patternApplication; public static PatternApplication getInstance() { - if (patternApplication == null) { - synchronized (PatternApplication.class) { - if (patternApplication == null) { - patternApplication = new PatternApplication(); - } - } - } return patternApplication; } diff --git a/app/src/main/java/com/example/jingbin/designpattern/builder/Builder.java b/app/src/main/java/com/example/jingbin/designpattern/builder/Builder.java new file mode 100644 index 0000000..8f14b0f --- /dev/null +++ b/app/src/main/java/com/example/jingbin/designpattern/builder/Builder.java @@ -0,0 +1,12 @@ +package com.example.jingbin.designpattern.builder; + +/** + * Created by jingbin on 2020-01-31. + * 抽象建造者 + */ +public abstract class Builder { + + public abstract void setPart(String name, String type); + + public abstract Product getProduct(); +} diff --git a/app/src/main/java/com/example/jingbin/designpattern/builder/BuilderActivity.java b/app/src/main/java/com/example/jingbin/designpattern/builder/BuilderActivity.java new file mode 100644 index 0000000..0496ecc --- /dev/null +++ b/app/src/main/java/com/example/jingbin/designpattern/builder/BuilderActivity.java @@ -0,0 +1,62 @@ +package com.example.jingbin.designpattern.builder; + +import android.databinding.DataBindingUtil; +import android.os.Bundle; +import android.support.v7.app.AppCompatActivity; +import android.view.View; + +import com.example.jingbin.designpattern.R; +import com.example.jingbin.designpattern.app.AppConstant; +import com.example.jingbin.designpattern.app.EMTagHandler; +import com.example.jingbin.designpattern.databinding.ActivityBuilderBinding; + +import butterknife.ButterKnife; + +/** + * @author jingbin + * 建造者模式(Builder Pattern) + * 建造模式是对象的创建模式。建造模式可以将一个产品的内部表象(internal representation)与产品的生产过程分割开来, + * 从而可以使一个建造过程生成具有不同的内部表象的产品对象。 + *

+ * Builder 类是关键,然后定义一个Builder实现类,再之后就是处理实现类的逻辑。 + *

+ * 优点: + * 1. 首先,建造者模式的封装性很好。使用建造者模式可以有效的封装变化,在使用建造者模式的场景中, + * 一般产品类和建造者类是比较稳定的,因此,将主要的业务逻辑封装在导演类中对整体而言可以取得比较好的稳定性。 + * 2. 其次,建造者模式很容易进行扩展。如果有新的需求,通过实现一个新的建造者类就可以完成, + * 基本上不用修改之前已经测试通过的代码,因此也就不会对原有功能引入风险。 + * 总结: + * 建造者模式与工厂模式类似,他们都是建造者模式,适用的场景也很相似。 + * 一般来说,如果产品的建造很复杂,那么请用工厂模式;如果产品的建造更复杂,那么请用建造者模式。 + */ +public class BuilderActivity extends AppCompatActivity { + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + ActivityBuilderBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_builder); + ButterKnife.bind(this); + setTitle("建造者模式"); + + binding.tvDefine.setText(EMTagHandler.fromHtml(AppConstant.BUILDER_DEFINE)); + + binding.btBuyAodi.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Director director = new Director(); + Product product = director.getAProduct(); + product.showProduct(); + } + }); + + binding.btBuyBaoma.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Director director = new Director(); + Product product = director.getBProduct(); + product.showProduct(); + } + }); + } + +} diff --git a/app/src/main/java/com/example/jingbin/designpattern/builder/ConcreteBuilder.java b/app/src/main/java/com/example/jingbin/designpattern/builder/ConcreteBuilder.java new file mode 100644 index 0000000..9d0396b --- /dev/null +++ b/app/src/main/java/com/example/jingbin/designpattern/builder/ConcreteBuilder.java @@ -0,0 +1,21 @@ +package com.example.jingbin.designpattern.builder; + +/** + * Created by jingbin on 2020-01-31. + * 具体建造者 + */ +public class ConcreteBuilder extends Builder { + + private Product product = new Product(); + + @Override + public void setPart(String name, String type) { + product.setName(name); + product.setType(type); + } + + @Override + public Product getProduct() { + return product; + } +} diff --git a/app/src/main/java/com/example/jingbin/designpattern/builder/Director.java b/app/src/main/java/com/example/jingbin/designpattern/builder/Director.java new file mode 100644 index 0000000..d3cc2ff --- /dev/null +++ b/app/src/main/java/com/example/jingbin/designpattern/builder/Director.java @@ -0,0 +1,20 @@ +package com.example.jingbin.designpattern.builder; + +/** + * Created by jingbin on 2020-01-31. + * 导演类 + */ +public class Director { + + private Builder builder = new ConcreteBuilder(); + + public Product getAProduct() { + builder.setPart("奥迪汽车", "Q5"); + return builder.getProduct(); + } + + public Product getBProduct() { + builder.setPart("宝马汽车", "X7"); + return builder.getProduct(); + } +} diff --git a/app/src/main/java/com/example/jingbin/designpattern/builder/Product.java b/app/src/main/java/com/example/jingbin/designpattern/builder/Product.java new file mode 100644 index 0000000..f715383 --- /dev/null +++ b/app/src/main/java/com/example/jingbin/designpattern/builder/Product.java @@ -0,0 +1,26 @@ +package com.example.jingbin.designpattern.builder; + +import android.util.Log; + +/** + * Created by jingbin on 2020-01-31. + * 产品类 + */ +public class Product { + + private String name; + private String type; + + public void showProduct() { + Log.e("---", "名称:" + name); + Log.e("---", "型号:" + type); + } + + public void setName(String name) { + this.name = name; + } + + public void setType(String type) { + this.type = type; + } +} diff --git a/app/src/main/res/layout/activity_builder.xml b/app/src/main/res/layout/activity_builder.xml new file mode 100644 index 0000000..cf56b32 --- /dev/null +++ b/app/src/main/res/layout/activity_builder.xml @@ -0,0 +1,59 @@ + + + + + + +