├── .gitignore ├── .idea ├── .gitignore ├── compiler.xml ├── dictionaries ├── gradle.xml ├── inspectionProfiles │ └── Project_Default.xml ├── jarRepositories.xml ├── misc.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── build.gradle ├── proguard-rules.pro └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── newtrip │ │ └── designdemoproject │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── java │ │ └── com │ │ │ └── newtrip │ │ │ └── designdemoproject │ │ │ ├── MainActivity.java │ │ │ ├── adapterpattern │ │ │ ├── Adaptee.java │ │ │ ├── Adapter.java │ │ │ ├── Client.java │ │ │ ├── ConcreteTarget.java │ │ │ ├── Target.java │ │ │ └── img.png │ │ │ ├── builderpattern │ │ │ ├── Builder.java │ │ │ ├── Client.java │ │ │ ├── ConcreteProduct.java │ │ │ ├── Director.java │ │ │ └── Product.java │ │ │ ├── chainofresponsibilitypattern │ │ │ ├── common │ │ │ │ ├── Client.java │ │ │ │ ├── ConcreteHandler1.java │ │ │ │ ├── ConcreteHandler2.java │ │ │ │ ├── Handler.java │ │ │ │ ├── Level.java │ │ │ │ ├── Request.java │ │ │ │ ├── Response.java │ │ │ │ └── responsibility_common.png │ │ │ └── womenrequestuse │ │ │ │ ├── Client.java │ │ │ │ ├── Father.java │ │ │ │ ├── Handler.java │ │ │ │ ├── Husband.java │ │ │ │ ├── IWomen.java │ │ │ │ ├── Son.java │ │ │ │ ├── Women.java │ │ │ │ └── responsibility.png │ │ │ ├── commandpattern │ │ │ ├── businessuse │ │ │ │ ├── 1.png │ │ │ │ ├── AddRequirementCommand.java │ │ │ │ ├── Client.java │ │ │ │ ├── CodeGroup.java │ │ │ │ ├── Command.java │ │ │ │ ├── Group.java │ │ │ │ ├── Invoker.java │ │ │ │ ├── PageGroup.java │ │ │ │ ├── RequirementGroup.java │ │ │ │ └── 完美类图.png │ │ │ └── commonuse │ │ │ │ ├── Client.java │ │ │ │ ├── Command.java │ │ │ │ ├── ConcretReceiver.java │ │ │ │ ├── ConcreteCommand.java │ │ │ │ ├── Invoker.java │ │ │ │ ├── Receiver.java │ │ │ │ └── commoncommand.png │ │ │ ├── compositepattern │ │ │ ├── branchandleaf │ │ │ │ ├── Branch.java │ │ │ │ ├── Client.java │ │ │ │ ├── Corp.java │ │ │ │ ├── Leaf.java │ │ │ │ └── composite.png │ │ │ ├── common_safe_mode │ │ │ │ ├── Client.java │ │ │ │ ├── Component.java │ │ │ │ ├── Composite.java │ │ │ │ ├── Leaf.java │ │ │ │ └── common.png │ │ │ └── common_transparent_mode │ │ │ │ ├── Component.java │ │ │ │ ├── Leaf.java │ │ │ │ └── transparent.png │ │ │ ├── decoratepattern │ │ │ ├── common │ │ │ │ ├── Client.java │ │ │ │ ├── Component.java │ │ │ │ ├── ConcreteComponent.java │ │ │ │ ├── ConcreteDecorator.java │ │ │ │ ├── Decorator.java │ │ │ │ └── commondecorator.png │ │ │ └── decoratescore │ │ │ │ ├── Client.java │ │ │ │ ├── Decorator.java │ │ │ │ ├── FouthGradeSchoolReport.java │ │ │ │ ├── HighScoreDecrator.java │ │ │ │ ├── SchoolReport.java │ │ │ │ ├── SortScoreDecorator.java │ │ │ │ └── decorate_score.png │ │ │ ├── facadepattern │ │ │ └── common │ │ │ │ ├── ClassA.java │ │ │ │ ├── ClassB.java │ │ │ │ ├── ClassC.java │ │ │ │ └── Facade.java │ │ │ ├── factory │ │ │ ├── AbstractHumanFactory.java │ │ │ ├── BlackHuman.java │ │ │ ├── HumanFactory.java │ │ │ ├── IHuman.java │ │ │ ├── NvWa.java │ │ │ ├── WhiteHuman.java │ │ │ ├── factorysingleton │ │ │ │ ├── Client.java │ │ │ │ ├── SingeltonFactory2.java │ │ │ │ ├── Singleton.java │ │ │ │ └── SingletonFactory.java │ │ │ └── simplefactorypattern │ │ │ │ └── HumanFactory.java │ │ │ ├── interfacesegretionprinciple │ │ │ ├── AbstractSearcher.java │ │ │ ├── IGoodBodyGirl.java │ │ │ ├── IGreatTemperamentGirl.java │ │ │ ├── PrettyGril.java │ │ │ └── Searcher.java │ │ │ ├── iteratorpattern │ │ │ ├── common │ │ │ │ ├── Aggregate.java │ │ │ │ ├── Client.java │ │ │ │ ├── ConcreteAggregate.java │ │ │ │ ├── ConcreteIterator.java │ │ │ │ ├── Iterator.java │ │ │ │ └── commoniterator.pdf │ │ │ └── projectinfo │ │ │ │ ├── Boss.java │ │ │ │ ├── IProject.java │ │ │ │ ├── IProjectIterator.java │ │ │ │ ├── Project.java │ │ │ │ ├── ProjectIterator.java │ │ │ │ └── iterator.pdf │ │ │ ├── mediatorpattern │ │ │ ├── commonmediator │ │ │ │ ├── Colleague.java │ │ │ │ ├── ConcreteColleague1.java │ │ │ │ ├── ConcreteColleague2.java │ │ │ │ ├── ConcreteMediator.java │ │ │ │ ├── Mediator.java │ │ │ │ ├── note │ │ │ │ └── 中介者模式通用类图.jpg │ │ │ └── stockpurchaseandsale │ │ │ │ ├── AbstractColleague.java │ │ │ │ ├── AbstractMediator.java │ │ │ │ ├── Client.java │ │ │ │ ├── Mediator.java │ │ │ │ ├── Purchase.java │ │ │ │ ├── Sale.java │ │ │ │ ├── Stock.java │ │ │ │ ├── 中介者前的复杂业务.png │ │ │ │ ├── 修改后的进销存.jpg │ │ │ │ └── 修改后的进销存类图.jpg │ │ │ ├── mementopattern │ │ │ ├── clone │ │ │ │ ├── Client.java │ │ │ │ ├── Originator.java │ │ │ │ └── cloned_memento.png │ │ │ ├── common │ │ │ │ ├── Caretaker.java │ │ │ │ ├── Client.java │ │ │ │ ├── Memento.java │ │ │ │ ├── Originator.java │ │ │ │ └── common_memento.png │ │ │ └── multistate │ │ │ │ ├── BeanInfo.java │ │ │ │ ├── BeanUtils.java │ │ │ │ ├── Memento.java │ │ │ │ ├── Originator.java │ │ │ │ └── multistate.png │ │ │ ├── observerpattern │ │ │ ├── common │ │ │ │ ├── ConcreteObserver.java │ │ │ │ ├── ConcreteSubject.java │ │ │ │ ├── Observer.java │ │ │ │ ├── Subject.java │ │ │ │ └── common_observer.png │ │ │ └── hanfeizilisi │ │ │ │ ├── Client.java │ │ │ │ ├── HanFeiZi.java │ │ │ │ ├── IHanFeiZi.java │ │ │ │ ├── LiSi.java │ │ │ │ └── hanfeizilisi.png │ │ │ ├── prototypepattern │ │ │ ├── PrototypeClass.java │ │ │ └── Thing.java │ │ │ ├── proxypattern │ │ │ ├── commondynamicproxy │ │ │ │ ├── BeforeAdvice.java │ │ │ │ ├── Client.java │ │ │ │ ├── Client2.java │ │ │ │ ├── DynamicProxy.java │ │ │ │ ├── IAdvice.java │ │ │ │ ├── MyInvocationHandler.java │ │ │ │ ├── RealSubject.java │ │ │ │ ├── Subject.java │ │ │ │ ├── SubjectDynamicProxy.java │ │ │ │ └── common.png │ │ │ ├── dynamicproxy │ │ │ │ ├── Client.java │ │ │ │ ├── GamePlayIH.java │ │ │ │ ├── GamePlayer.java │ │ │ │ ├── IGamePlayer.java │ │ │ │ └── dynamic.png │ │ │ ├── force │ │ │ │ ├── ForceClient.java │ │ │ │ ├── GamePlayer.java │ │ │ │ ├── GamePlayerProxy.java │ │ │ │ ├── IGamePlayer.java │ │ │ │ └── force.png │ │ │ └── normal │ │ │ │ ├── Client.java │ │ │ │ ├── GamPlayer.java │ │ │ │ ├── GamePlayerProxy.java │ │ │ │ ├── IGamePlayer.java │ │ │ │ ├── IProxy.java │ │ │ │ ├── normal.png │ │ │ │ └── self.png │ │ │ ├── strategypattern │ │ │ ├── addandsub │ │ │ │ ├── Add.java │ │ │ │ ├── Caculator.java │ │ │ │ ├── Context.java │ │ │ │ └── Sub.java │ │ │ ├── common │ │ │ │ ├── Client.java │ │ │ │ ├── ConcreteStrategy.java │ │ │ │ ├── Context.java │ │ │ │ ├── Strategy.java │ │ │ │ └── strategycommon.png │ │ │ └── strategyenum │ │ │ │ ├── Client.java │ │ │ │ └── EnumCaculator.java │ │ │ └── templatemethodpadttern │ │ │ ├── HumerClient.java │ │ │ ├── HumerH1Model.java │ │ │ └── HumerModel.java │ └── res │ │ ├── drawable-v24 │ │ └── ic_launcher_foreground.xml │ │ ├── drawable │ │ └── ic_launcher_background.xml │ │ ├── layout │ │ └── activity_main.xml │ │ ├── mipmap-anydpi-v26 │ │ ├── ic_launcher.xml │ │ └── ic_launcher_round.xml │ │ ├── mipmap-hdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-mdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── mipmap-xxxhdpi │ │ ├── ic_launcher.png │ │ └── ic_launcher_round.png │ │ ├── values-night │ │ └── themes.xml │ │ └── values │ │ ├── colors.xml │ │ ├── strings.xml │ │ └── themes.xml │ └── test │ └── java │ └── com │ └── newtrip │ └── designdemoproject │ ├── ExampleUnitTest.java │ └── TestOne.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/caches 5 | /.idea/libraries 6 | /.idea/modules.xml 7 | /.idea/workspace.xml 8 | /.idea/navEditor.xml 9 | /.idea/assetWizardSettings.xml 10 | .DS_Store 11 | /build 12 | /captures 13 | .externalNativeBuild 14 | .cxx 15 | local.properties 16 | -------------------------------------------------------------------------------- /.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/dictionaries: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 20 | 21 | -------------------------------------------------------------------------------- /.idea/inspectionProfiles/Project_Default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 36 | -------------------------------------------------------------------------------- /.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | 29 | 30 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 9 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # DesignDemoProject 2 | 设计模式的demo 3 | 项目初衷:便于理解和记忆。希望无论在面试环节还是实际的项目应用开发中,都能帮到爱学习的你。 4 | 本项目会集合所有涉及到的设计模式的精简demo,项目还在逐步完善中。 5 | 项目阅读使用: 6 | src下面不同的包代表了不同的设计模式,client类为应用场景类 7 | 适合经常拿粗来玩味 8 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /app/build.gradle: -------------------------------------------------------------------------------- 1 | plugins { 2 | id 'com.android.application' 3 | } 4 | 5 | android { 6 | compileSdkVersion 30 7 | buildToolsVersion "30.0.3" 8 | 9 | defaultConfig { 10 | applicationId "com.newtrip.designdemoproject" 11 | minSdkVersion 19 12 | targetSdkVersion 30 13 | versionCode 1 14 | versionName "1.0" 15 | 16 | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" 17 | } 18 | 19 | buildTypes { 20 | release { 21 | minifyEnabled false 22 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' 23 | } 24 | } 25 | compileOptions { 26 | sourceCompatibility JavaVersion.VERSION_1_8 27 | targetCompatibility JavaVersion.VERSION_1_8 28 | } 29 | } 30 | 31 | dependencies { 32 | 33 | implementation 'androidx.appcompat:appcompat:1.2.0' 34 | implementation 'com.google.android.material:material:1.2.1' 35 | implementation 'androidx.constraintlayout:constraintlayout:2.0.1' 36 | testImplementation 'junit:junit:4.+' 37 | androidTestImplementation 'androidx.test.ext:junit:1.1.2' 38 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' 39 | } -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /app/src/androidTest/java/com/newtrip/designdemoproject/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.newtrip.designdemoproject", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | 5 | import android.os.Bundle; 6 | 7 | public class MainActivity extends AppCompatActivity { 8 | 9 | @Override 10 | protected void onCreate(Bundle savedInstanceState) { 11 | super.onCreate(savedInstanceState); 12 | setContentView(R.layout.activity_main); 13 | } 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/adapterpattern/Adaptee.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.adapterpattern; 2 | /*** 3 | *@Author: WinterSweett 4 | *@Date: 5 | *@Description: 源角色 6 | */ 7 | public class Adaptee { 8 | public void doSomething(){ 9 | System.out.printf("Adaptee"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/adapterpattern/Adapter.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.adapterpattern; 2 | 3 | public class Adapter extends Adaptee implements Target{ 4 | @Override 5 | public void request() { 6 | super.doSomething(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/adapterpattern/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.adapterpattern; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Target target = new ConcreteTarget(); 6 | target.request(); 7 | Target target1 = new Adapter(); 8 | target1.request(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/adapterpattern/ConcreteTarget.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.adapterpattern; 2 | 3 | public class ConcreteTarget implements Target{ 4 | @Override 5 | public void request() { 6 | System.out.printf("ConcreteTarget::"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/adapterpattern/Target.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.adapterpattern; 2 | 3 | public interface Target { 4 | //目标角色有自己的方法 5 | public void request(); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/adapterpattern/img.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/adapterpattern/img.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/builderpattern/Builder.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.builderpattern; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | abstract class Builder { 8 | public abstract void setPart(); 9 | public abstract Product buildProduct(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/builderpattern/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.builderpattern; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client { 8 | public static void main(String[] args) { 9 | Director director = new Director(); 10 | Product product = director.setAProduct(); 11 | product.doSomthing(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/builderpattern/ConcreteProduct.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.builderpattern; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class ConcreteProduct extends Builder { 8 | private Product product = new Product(); 9 | @Override 10 | public void setPart() { 11 | 12 | } 13 | 14 | @Override 15 | public Product buildProduct() { 16 | return product; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/builderpattern/Director.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.builderpattern; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Director { 8 | private Builder builder = new ConcreteProduct(); 9 | public Product setAProduct(){ 10 | builder.setPart(); 11 | return builder.buildProduct(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/builderpattern/Product.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.builderpattern; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Product { 8 | public void doSomthing(){ 9 | System.out.println("product dosomthing"); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client { 8 | public static void main(String[] args) { 9 | Handler handler = new ConcreteHandler1(); 10 | Handler handler2 = new ConcreteHandler2(); 11 | handler.setNext(handler2); 12 | Response response = handler.handleMessage(new Request()); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/ConcreteHandler1.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class ConcreteHandler1 extends Handler { 8 | @Override 9 | protected Level getHandlerLevel() { 10 | return null; 11 | } 12 | 13 | @Override 14 | protected Response echo(Request request) { 15 | return null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/ConcreteHandler2.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class ConcreteHandler2 extends Handler{ 8 | @Override 9 | protected Level getHandlerLevel() { 10 | return null; 11 | } 12 | 13 | @Override 14 | protected Response echo(Request request) { 15 | return null; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/Handler.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public abstract class Handler { 8 | private Handler nextHandler ; 9 | protected abstract Level getHandlerLevel(); 10 | protected abstract Response echo(Request request) ; 11 | public void setNext(Handler handler){ 12 | this.nextHandler = handler ; 13 | } 14 | public final Response handleMessage(Request request){ 15 | Response response = null ; 16 | if(getHandlerLevel().equals(request.getRequestLevel())){ 17 | response = this.echo(request); 18 | }else { 19 | if(this.nextHandler != null){ 20 | response = this.nextHandler.echo(request); 21 | }else { 22 | System.out.println("没有下一个处理者,业务自行处理"); 23 | } 24 | } 25 | return response ; 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/Level.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Level { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/Request.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.common; 2 | 3 | import java.net.URLEncoder; 4 | 5 | /** 6 | * @author : WinterSweett 7 | * @time : {DATE} 8 | */ 9 | class Request { 10 | public Level getRequestLevel(){ 11 | return null ; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/Response.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Response { 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/responsibility_common.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/common/responsibility_common.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.Random; 6 | 7 | /** 8 | * @author : WinterSweett 9 | * @time : {DATE} 10 | */ 11 | class Client { 12 | public static void main(String[] args) { 13 | Random random = new Random(); 14 | List list = new ArrayList<>(); 15 | for(int i= 0 ;i < 5 ;i++){ 16 | list.add(new Women(random.nextInt(4),"我要逛街")); 17 | } 18 | Handler father = new Father(); 19 | Handler son = new Son(); 20 | Handler husband = new Husband(); 21 | father.setNext(husband); 22 | husband.setNext(son); 23 | for(IWomen women : list){ 24 | father.handleMsg(women); 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/Father.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Father extends Handler{ 8 | public Father() { 9 | super(Handler.FATHER_LEVEL_REQUEST); 10 | } 11 | 12 | @Override 13 | protected void response(IWomen women) { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/Handler.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse; 2 | 3 | public abstract class Handler { 4 | public final static int FATHER_LEVEL_REQUEST = 1 ; 5 | public final static int HUSBAND_LEVEL_REQUEST = 2 ; 6 | public final static int SON_LEVEL_REQUEST = 3 ; 7 | private int level = 0 ; 8 | private Handler nextHandler ; 9 | public Handler(int level){ 10 | this.level = level ; 11 | } 12 | public void setNext(Handler handler){ 13 | this.nextHandler = handler ; 14 | } 15 | protected abstract void response(IWomen women); 16 | public final void handleMsg(IWomen women){ 17 | if(women.getType() == this.level){ 18 | this.response(women); 19 | }else { 20 | if(this.nextHandler != null){ 21 | this.nextHandler.handleMsg(women); 22 | }else { 23 | System.out.println("没地方请示了,按不同意处理。。。。"); 24 | } 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/Husband.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse; 2 | 3 | import com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse.Handler; 4 | import com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse.IWomen; 5 | 6 | /** 7 | * @author : WinterSweett 8 | * @time : {DATE} 9 | */ 10 | class Husband extends Handler { 11 | public Husband() { 12 | super(Handler.HUSBAND_LEVEL_REQUEST); 13 | } 14 | 15 | @Override 16 | protected void response(IWomen women) { 17 | 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/IWomen.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse; 2 | 3 | public interface IWomen { 4 | public int getType(); 5 | public String getRequest(); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/Son.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Son extends Handler{ 8 | public Son() { 9 | super(Handler.SON_LEVEL_REQUEST); 10 | } 11 | 12 | @Override 13 | protected void response(IWomen women) { 14 | 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/Women.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.chainofresponsibilitypattern.womenrequestuse; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Women implements IWomen{ 8 | private int type = 0 ; 9 | private String request = ""; 10 | public Women(int type ,String request){ 11 | this.type = type ; 12 | this.request = request ; 13 | } 14 | @Override 15 | public int getType() { 16 | return this.type; 17 | } 18 | 19 | @Override 20 | public String getRequest() { 21 | return this.request; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/responsibility.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/chainofresponsibilitypattern/womenrequestuse/responsibility.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/1.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/AddRequirementCommand.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.businessuse; 2 | 3 | public class AddRequirementCommand extends Command{ 4 | @Override 5 | public void execute() { 6 | super.requirementGroup.find(); 7 | super.requirementGroup.add(); 8 | super.requirementGroup.plan(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.businessuse; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Invoker invoker = new Invoker(); 6 | Command command = new AddRequirementCommand(); 7 | invoker.setCommand(command); 8 | invoker.action(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/CodeGroup.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.businessuse; 2 | 3 | public class CodeGroup extends Group{ 4 | @Override 5 | public void find() { 6 | 7 | } 8 | 9 | @Override 10 | public void add() { 11 | 12 | } 13 | 14 | @Override 15 | public void delete() { 16 | 17 | } 18 | 19 | @Override 20 | public void change() { 21 | 22 | } 23 | 24 | @Override 25 | public void plan() { 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/Command.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.businessuse; 2 | 3 | public abstract class Command { 4 | protected RequirementGroup requirementGroup = new RequirementGroup(); 5 | protected PageGroup pageGroup = new PageGroup() ; 6 | protected CodeGroup codeGroup = new CodeGroup(); 7 | public abstract void execute(); 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/Group.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.businessuse; 2 | 3 | public abstract class Group { 4 | public abstract void find(); 5 | public abstract void add(); 6 | public abstract void delete(); 7 | public abstract void change(); 8 | public abstract void plan(); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/Invoker.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.businessuse; 2 | 3 | public class Invoker { 4 | private Command command ; 5 | public void setCommand(Command command){ 6 | this.command = command ; 7 | } 8 | public void action(){ 9 | this.command.execute(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/PageGroup.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.businessuse; 2 | 3 | public class PageGroup extends Group{ 4 | @Override 5 | public void find() { 6 | 7 | } 8 | 9 | @Override 10 | public void add() { 11 | 12 | } 13 | 14 | @Override 15 | public void delete() { 16 | 17 | } 18 | 19 | @Override 20 | public void change() { 21 | 22 | } 23 | 24 | @Override 25 | public void plan() { 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/RequirementGroup.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.businessuse; 2 | 3 | public class RequirementGroup extends Group{ 4 | @Override 5 | public void find() { 6 | 7 | } 8 | 9 | @Override 10 | public void add() { 11 | 12 | } 13 | 14 | @Override 15 | public void delete() { 16 | 17 | } 18 | 19 | @Override 20 | public void change() { 21 | 22 | } 23 | 24 | @Override 25 | public void plan() { 26 | 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/完美类图.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/commandpattern/businessuse/完美类图.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/commonuse/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.commonuse; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Invoker invoker = new Invoker(); 6 | Command command = new ConcreteCommand(); 7 | invoker.setCommand(command); 8 | invoker.action(); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/commonuse/Command.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.commonuse; 2 | 3 | public abstract class Command { 4 | protected final Receiver receiver ; 5 | public Command(Receiver receiver){ 6 | this.receiver = receiver ; 7 | } 8 | public abstract void execute(); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/commonuse/ConcretReceiver.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.commonuse; 2 | 3 | public class ConcretReceiver extends Receiver{ 4 | @Override 5 | public void doSomething() { 6 | System.out.printf("do it"); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/commonuse/ConcreteCommand.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.commonuse; 2 | 3 | public class ConcreteCommand extends Command{ 4 | //声明默认接收者 5 | public ConcreteCommand(){ 6 | super(new ConcretReceiver()); 7 | } 8 | //设置新的接收者 9 | public ConcreteCommand(Receiver receiver){ 10 | super(receiver); 11 | } 12 | @Override 13 | public void execute() { 14 | super.receiver.doSomething(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/commonuse/Invoker.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.commonuse; 2 | 3 | public class Invoker { 4 | private Command command ; 5 | public void setCommand(Command command){ 6 | this.command = command ; 7 | } 8 | public void action(){ 9 | this.command.execute(); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/commonuse/Receiver.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.commandpattern.commonuse; 2 | 3 | public abstract class Receiver { 4 | public abstract void doSomething(); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/commandpattern/commonuse/commoncommand.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/commandpattern/commonuse/commoncommand.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/branchandleaf/Branch.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.branchandleaf; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | public class Branch extends Corp{ 7 | List list = new ArrayList<>(); 8 | public Branch(String name, String position, int salary) { 9 | super(name, position, salary); 10 | } 11 | public void addSubordinate(Corp corp){ 12 | corp.setParent(this); 13 | list.add(corp); 14 | } 15 | public List getSubordinate(){ 16 | return list ; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/branchandleaf/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.branchandleaf; 2 | 3 | import java.util.List; 4 | 5 | public class Client { 6 | public static void main(String[] args) { 7 | 8 | } 9 | 10 | public static String getTreeInfo(Branch root){ 11 | List subordinateList = root.getSubordinate(); 12 | String info = ""; 13 | for(Corp corp : subordinateList){ 14 | if(corp instanceof Leaf){ 15 | info = info +root.getInfo()+"\n"; 16 | }else if(corp instanceof Branch){ 17 | info = info+root.getInfo()+"\n"+getTreeInfo((Branch) corp); 18 | } 19 | } 20 | return info ; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/branchandleaf/Corp.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.branchandleaf; 2 | 3 | public abstract class Corp { 4 | private String name = ""; 5 | private String position = ""; 6 | private int salary = 0 ; 7 | private Corp parent ; 8 | 9 | public Corp getParent() { 10 | return parent; 11 | } 12 | 13 | public void setParent(Corp parent) { 14 | this.parent = parent; 15 | } 16 | 17 | public Corp(String name , String position , int salary){ 18 | this.name = name ; 19 | this.position = position ; 20 | this.salary = salary ; 21 | } 22 | public String getInfo(){ 23 | StringBuilder stringBuilder = new StringBuilder(); 24 | stringBuilder.append("name:").append(name) 25 | .append("position:").append(position) 26 | .append("salary:").append(salary); 27 | return stringBuilder.toString(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/branchandleaf/Leaf.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.branchandleaf; 2 | 3 | public class Leaf extends Corp{ 4 | public Leaf(String name, String position, int salary) { 5 | super(name, position, salary); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/branchandleaf/composite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/compositepattern/branchandleaf/composite.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_safe_mode/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.common_safe_mode; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Composite root = new Composite(); 6 | Composite branch = new Composite(); 7 | root.add(branch); 8 | Leaf leaf = new Leaf() ; 9 | branch.add(leaf); 10 | display(root); 11 | } 12 | public static void display(Composite root){ 13 | for(Component component : root.getChildren()){ 14 | if( component instanceof Leaf){ 15 | component.doSomething(); 16 | }else { 17 | display(root); 18 | } 19 | } 20 | } 21 | 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_safe_mode/Component.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.common_safe_mode; 2 | /*** 3 | *@Author: WinterSweett 4 | *@Date: 5 | *@Description:抽象构件 6 | */ 7 | public abstract class Component { 8 | public void doSomething(){ 9 | 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_safe_mode/Composite.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.common_safe_mode; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /*** 7 | *@Author: WinterSweett 8 | *@Date: 9 | *@Description:树枝构件 10 | */ 11 | public class Composite extends Component{ 12 | List list = new ArrayList<>(); 13 | public void add(Component component){ 14 | list.add(component); 15 | } 16 | public void remove(Component component){ 17 | list.remove(component); 18 | } 19 | public List getChildren(){ 20 | return list ; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_safe_mode/Leaf.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.common_safe_mode; 2 | 3 | public class Leaf extends Component{ 4 | @Override 5 | public void doSomething() { 6 | super.doSomething(); 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_safe_mode/common.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_safe_mode/common.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_transparent_mode/Component.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.common_transparent_mode; 2 | 3 | import java.util.List; 4 | 5 | public abstract class Component { 6 | public void doSomething(){ 7 | 8 | } 9 | abstract void add(Component component); 10 | abstract void delete(Component component); 11 | abstract List getChildren(); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_transparent_mode/Leaf.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.compositepattern.common_transparent_mode; 2 | 3 | import java.util.List; 4 | 5 | public class Leaf extends Component{ 6 | @Deprecated 7 | @Override 8 | void add(Component component) { 9 | 10 | } 11 | @Deprecated 12 | @Override 13 | void delete(Component component) { 14 | 15 | } 16 | @Deprecated 17 | @Override 18 | List getChildren() { 19 | return null; 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_transparent_mode/transparent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/compositepattern/common_transparent_mode/transparent.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/common/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client { 8 | public static void main(String[] args) { 9 | Component component = new ConcreteComponent(); 10 | component = new ConcreteDecorator(component); 11 | component.operate(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/common/Component.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | abstract class Component { 8 | public abstract void operate(); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/common/ConcreteComponent.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class ConcreteComponent extends Component{ 8 | @Override 9 | public void operate() { 10 | System.out.println("do somthing"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/common/ConcreteDecorator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class ConcreteDecorator extends Decorator { 8 | public ConcreteDecorator(Component component) { 9 | super(component); 10 | } 11 | 12 | public void method(){ 13 | System.out.println("method decorate"); 14 | } 15 | 16 | @Override 17 | public void operate() { 18 | this.method(); 19 | super.operate(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/common/Decorator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 抽象装饰者 7 | */ 8 | abstract class Decorator extends Component { 9 | private Component component ; 10 | //通过构造函数传递被装饰者 11 | public Decorator(Component component){ 12 | this.component = component ; 13 | } 14 | 15 | /** 16 | * @param: 17 | * 委托给被修饰者执行 18 | */ 19 | @Override 20 | public void operate() { 21 | this.component.operate(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/common/commondecorator.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/decoratepattern/common/commondecorator.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/decoratescore/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.decoratescore; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client { 8 | public static void main(String[] args) { 9 | SchoolReport schoolReport ; 10 | schoolReport = new FouthGradeSchoolReport(); 11 | schoolReport = new HighScoreDecrator(schoolReport) ; 12 | schoolReport = new SortScoreDecorator(schoolReport); 13 | schoolReport.report(); 14 | schoolReport.sign("ss"); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/decoratescore/Decorator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.decoratescore; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | abstract class Decorator extends SchoolReport { 8 | private SchoolReport sr ; 9 | public Decorator(SchoolReport schoolReport){ 10 | this.sr = schoolReport ; 11 | } 12 | @Override 13 | public void report(){ 14 | this.sr.report(); 15 | } 16 | 17 | @Override 18 | public void sign(String name) { 19 | this.sr.sign(name); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/decoratescore/FouthGradeSchoolReport.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.decoratescore; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class FouthGradeSchoolReport extends SchoolReport { 8 | @Override 9 | public void report() { 10 | System.out.println("语文65"); 11 | } 12 | 13 | @Override 14 | public void sign(String name) { 15 | System.out.println("家长签名为:"+name); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/decoratescore/HighScoreDecrator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.decoratescore; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class HighScoreDecrator extends Decorator { 8 | public HighScoreDecrator(SchoolReport schoolReport) { 9 | super(schoolReport); 10 | } 11 | private void reportHighScore(){ 12 | System.out.println("我们这次 最高75"); 13 | } 14 | 15 | @Override 16 | public void report() { 17 | reportHighScore(); 18 | super.report(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/decoratescore/SchoolReport.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.decoratescore; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | abstract class SchoolReport { 8 | public abstract void report(); 9 | public abstract void sign(String name); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/decoratescore/SortScoreDecorator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.decoratepattern.decoratescore; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class SortScoreDecorator extends Decorator { 8 | public SortScoreDecorator(SchoolReport schoolReport) { 9 | super(schoolReport); 10 | } 11 | private void reportSort(){ 12 | System.out.println("我排38名"); 13 | } 14 | 15 | @Override 16 | public void report() { 17 | super.report(); 18 | reportSort(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/decoratepattern/decoratescore/decorate_score.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/decoratepattern/decoratescore/decorate_score.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/facadepattern/common/ClassA.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.facadepattern.common; 2 | 3 | public class ClassA { 4 | public void doSomething(){ 5 | 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/facadepattern/common/ClassB.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.facadepattern.common; 2 | 3 | public class ClassB { 4 | public void doSomething(){ 5 | 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/facadepattern/common/ClassC.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.facadepattern.common; 2 | 3 | public class ClassC { 4 | public void doSomething(){ 5 | 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/facadepattern/common/Facade.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.facadepattern.common; 2 | 3 | public class Facade { 4 | private ClassA a = new ClassA(); 5 | private ClassB b = new ClassB(); 6 | private ClassC c = new ClassC(); 7 | public void methodA(){ 8 | a.doSomething(); 9 | } 10 | public void methodB(){ 11 | b.doSomething(); 12 | } 13 | public void methodC(){ 14 | c.doSomething(); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/AbstractHumanFactory.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public abstract class AbstractHumanFactory { 8 | public abstract T createHuman(Class c); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/BlackHuman.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class BlackHuman implements IHuman{ 8 | @Override 9 | public void getColor() { 10 | System.out.println("black"); 11 | } 12 | 13 | @Override 14 | public void getTalk() { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/HumanFactory.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class HumanFactory extends AbstractHumanFactory{ 8 | @Override 9 | public T createHuman(Class c) { 10 | IHuman human = null; 11 | try { 12 | human = (T) Class.forName(c.getName()).newInstance(); 13 | } catch (IllegalAccessException e) { 14 | e.printStackTrace(); 15 | } catch (InstantiationException e) { 16 | e.printStackTrace(); 17 | } catch (ClassNotFoundException e) { 18 | e.printStackTrace(); 19 | } 20 | return (T) human; 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/IHuman.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public interface IHuman { 8 | void getColor(); 9 | void getTalk(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/NvWa.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class NvWa { 8 | public static void main(String[] args) { 9 | AbstractHumanFactory factory = new HumanFactory(); 10 | IHuman human = factory.createHuman(BlackHuman.class); 11 | human.getColor(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/WhiteHuman.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class WhiteHuman implements IHuman{ 8 | @Override 9 | public void getColor() { 10 | System.out.println("white"); 11 | } 12 | 13 | @Override 14 | public void getTalk() { 15 | 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/factorysingleton/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory.factorysingleton; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client { 8 | public static void main(String[] args) { 9 | Singleton singleton = SingeltonFactory2.getInstance(Singleton.class); 10 | System.out.println(singleton.hashCode()); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/factorysingleton/SingeltonFactory2.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory.factorysingleton; 2 | 3 | import java.lang.reflect.Constructor; 4 | import java.lang.reflect.InvocationTargetException; 5 | import java.util.Map; 6 | import java.util.concurrent.ConcurrentHashMap; 7 | 8 | /** 9 | * @author : WinterSweett 10 | * @time : {DATE} 11 | */ 12 | class SingeltonFactory2 { 13 | private static Map sInstanceCache = new ConcurrentHashMap<>(); 14 | public static T getInstance(Class clazz){ 15 | Object cache = sInstanceCache.get(clazz); 16 | if(cache == null){ 17 | synchronized (SingeltonFactory2.class){ 18 | if(cache == null){ 19 | T o = null; 20 | try { 21 | Class cl = Class.forName(clazz.getName()); 22 | Constructor constructor = cl.getConstructor(); 23 | constructor.setAccessible(true); 24 | o = (T) constructor.newInstance(); 25 | sInstanceCache.put(clazz,o); 26 | } catch (ClassNotFoundException e) { 27 | e.printStackTrace(); 28 | } catch (NoSuchMethodException e) { 29 | e.printStackTrace(); 30 | } catch (IllegalAccessException e) { 31 | e.printStackTrace(); 32 | } catch (InstantiationException e) { 33 | e.printStackTrace(); 34 | } catch (InvocationTargetException e) { 35 | e.printStackTrace(); 36 | } 37 | return o; 38 | } 39 | } 40 | 41 | } 42 | return (T) cache; 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/factorysingleton/Singleton.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory.factorysingleton; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public class Singleton { 8 | private Singleton(){ 9 | 10 | } 11 | public void doSomthing(){} 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/factorysingleton/SingletonFactory.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory.factorysingleton; 2 | 3 | import java.lang.reflect.Constructor; 4 | import java.lang.reflect.InvocationTargetException; 5 | 6 | /** 7 | * @author : WinterSweett 8 | * @time : {DATE} 9 | */ 10 | class SingletonFactory { 11 | private static Singleton singleton ; 12 | static { 13 | try { 14 | Class cl = Class.forName(Singleton.class.getName()); 15 | Constructor constructor = cl.getDeclaredConstructor(); 16 | constructor.setAccessible(true); 17 | singleton = (Singleton) constructor.newInstance(); 18 | 19 | } catch (ClassNotFoundException e) { 20 | e.printStackTrace(); 21 | } catch (NoSuchMethodException e) { 22 | e.printStackTrace(); 23 | } catch (IllegalAccessException e) { 24 | e.printStackTrace(); 25 | } catch (InstantiationException e) { 26 | e.printStackTrace(); 27 | } catch (InvocationTargetException e) { 28 | e.printStackTrace(); 29 | } 30 | } 31 | public static Singleton getSingleton(){ 32 | return singleton; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/factory/simplefactorypattern/HumanFactory.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.factory.simplefactorypattern; 2 | 3 | import com.newtrip.designdemoproject.factory.IHuman; 4 | 5 | /** 6 | * @author : WinterSweett 7 | * @time : {DATE} 8 | */ 9 | class HumanFactory { 10 | public static T createHuman(Class tClass){ 11 | IHuman human = null; 12 | try { 13 | human = (T) Class.forName(tClass.getName()).newInstance(); 14 | } catch (IllegalAccessException e) { 15 | e.printStackTrace(); 16 | } catch (InstantiationException e) { 17 | e.printStackTrace(); 18 | } catch (ClassNotFoundException e) { 19 | e.printStackTrace(); 20 | } 21 | return (T) human; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/interfacesegretionprinciple/AbstractSearcher.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.interfacesegretionprinciple; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public abstract class AbstractSearcher { 8 | IGoodBodyGirl iGoodBodyGirl ; 9 | IGreatTemperamentGirl iGreatTemperamentGirl ; 10 | public AbstractSearcher(IGoodBodyGirl iGoodBodyGirl) { 11 | this.iGoodBodyGirl = iGoodBodyGirl ; 12 | } 13 | 14 | public AbstractSearcher(IGreatTemperamentGirl iGreatTemperamentGirl) { 15 | this.iGreatTemperamentGirl = iGreatTemperamentGirl ; 16 | } 17 | 18 | public abstract void show(); 19 | 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/interfacesegretionprinciple/IGoodBodyGirl.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.interfacesegretionprinciple; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public interface IGoodBodyGirl { 8 | void goodLooking(); 9 | void niceFigure(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/interfacesegretionprinciple/IGreatTemperamentGirl.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.interfacesegretionprinciple; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public interface IGreatTemperamentGirl { 8 | void greatTemperament(); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/interfacesegretionprinciple/PrettyGril.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.interfacesegretionprinciple; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public class PrettyGril implements IGreatTemperamentGirl,IGoodBodyGirl{ 8 | 9 | @Override 10 | public void goodLooking() { 11 | System.out.println("goodLooking"); 12 | } 13 | 14 | @Override 15 | public void niceFigure() { 16 | System.out.println("niceFigure"); 17 | } 18 | 19 | @Override 20 | public void greatTemperament() { 21 | System.out.println("greatTemperament"); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/interfacesegretionprinciple/Searcher.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.interfacesegretionprinciple; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | public class Searcher extends AbstractSearcher{ 8 | PrettyGril prettyGril ; 9 | public Searcher(PrettyGril prettyGril) { 10 | super((IGoodBodyGirl) prettyGril); 11 | this.prettyGril = prettyGril ; 12 | } 13 | 14 | @Override 15 | public void show() { 16 | prettyGril.goodLooking(); 17 | prettyGril.niceFigure(); 18 | prettyGril.greatTemperament(); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/common/Aggregate.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.common; 2 | /*** 3 | *@Author: WinterSweett 4 | *@Date: 5 | *@Description:抽象容器 6 | */ 7 | public interface Aggregate { 8 | public void add(Object object); 9 | public void remove(Object object); 10 | public Iterator iterator(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/common/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.common; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Aggregate aggregate = new ConcreteAggregate(); 6 | aggregate.add("abc"); 7 | Iterator iterator = aggregate.iterator(); 8 | while (iterator.hasNext()){ 9 | System.out.printf(""+iterator.next()); 10 | } 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/common/ConcreteAggregate.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.common; 2 | 3 | import java.util.Vector; 4 | 5 | /*** 6 | *@Author: WinterSweett 7 | *@Date: 8 | *@Description:具体容器 9 | */ 10 | public class ConcreteAggregate implements Aggregate{ 11 | Vector vector = new Vector(); 12 | @Override 13 | public void add(Object object) { 14 | vector.add(object); 15 | } 16 | 17 | @Override 18 | public void remove(Object object) { 19 | remove(object); 20 | } 21 | 22 | @Override 23 | public Iterator iterator() { 24 | return new ConcreteIterator(vector); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/common/ConcreteIterator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.common; 2 | 3 | import java.util.Vector; 4 | 5 | public class ConcreteIterator implements Iterator{ 6 | Vector vector = new Vector(); 7 | public int cursor = 0 ; 8 | public ConcreteIterator(Vector vector){ 9 | this.vector = vector ; 10 | } 11 | @Override 12 | public Object next() { 13 | Object result = null ; 14 | if(this.hasNext()){ 15 | result = vector.get(cursor++); 16 | }else { 17 | result = null ; 18 | } 19 | return result; 20 | } 21 | 22 | @Override 23 | public boolean hasNext() { 24 | if(this.cursor == vector.size()){ 25 | return false; 26 | }else { 27 | return true ; 28 | } 29 | } 30 | 31 | @Override 32 | public boolean remove() { 33 | vector.remove(this.cursor); 34 | return true; 35 | } 36 | } 37 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/common/Iterator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.common; 2 | /*** 3 | *@Author: WinterSweett 4 | *@Date: 5 | *@Description: 抽象迭代器 6 | */ 7 | public interface Iterator { 8 | public Object next(); 9 | public boolean hasNext(); 10 | public boolean remove(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/common/commoniterator.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/common/commoniterator.pdf -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/projectinfo/Boss.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.projectinfo; 2 | 3 | public class Boss { 4 | public static void main(String[] args) { 5 | IProject project = new Project() ; 6 | project.add("android进阶",10,100); 7 | IProjectIterator projectIterator = project.iterator(); 8 | while (projectIterator.hasNext()){ 9 | IProject p = (IProject) projectIterator.next(); 10 | System.out.printf(p.getProjectInfo()); 11 | 12 | } 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/projectinfo/IProject.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.projectinfo; 2 | 3 | public interface IProject { 4 | public void add(String name , int num , int cost); 5 | public String getProjectInfo(); 6 | public IProjectIterator iterator(); 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/projectinfo/IProjectIterator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.projectinfo; 2 | 3 | import java.util.Iterator; 4 | 5 | public interface IProjectIterator extends Iterator { 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/projectinfo/Project.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.projectinfo; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | /*** 6 | *@Author: WinterSweett 7 | *@Date: 8 | *@Description:项目信息 9 | */ 10 | public class Project implements IProject{ 11 | private List projectList = new ArrayList<>(); 12 | private String name ; 13 | private int num = 0 ; 14 | private int cost = 0 ; 15 | public Project(){ 16 | 17 | } 18 | private Project(String name , int num, int cost){ 19 | this.name = name ; 20 | this.num = num ; 21 | this.cost = cost ; 22 | } 23 | 24 | @Override 25 | public void add(String name, int num, int cost) { 26 | projectList.add(new Project(name,num,cost)); 27 | 28 | } 29 | 30 | @Override 31 | public String getProjectInfo() { 32 | StringBuilder stringBuilder = new StringBuilder(); 33 | stringBuilder.append(this.name).append(" ").append(this.num).append(" ").append(this.cost); 34 | return stringBuilder.toString(); 35 | } 36 | 37 | @Override 38 | public IProjectIterator iterator() { 39 | return new ProjectIterator(projectList); 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/projectinfo/ProjectIterator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.iteratorpattern.projectinfo; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | 6 | /*** 7 | *@Author: WinterSweett 8 | *@Date: 9 | *@Description:迭代器的实现类 10 | */ 11 | public class ProjectIterator implements IProjectIterator{ 12 | private List projectList = new ArrayList<>(); 13 | private int currentItem = 0 ; 14 | public ProjectIterator(List projectList){ 15 | this.projectList = projectList ; 16 | } 17 | @Override 18 | public boolean hasNext() { 19 | boolean b = true ; 20 | if(currentItem >= projectList.size() ){ 21 | b = false ; 22 | } 23 | return b; 24 | } 25 | 26 | @Override 27 | public IProject next() { 28 | return this.projectList.get(currentItem++); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/projectinfo/iterator.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/iteratorpattern/projectinfo/iterator.pdf -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/Colleague.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.commonmediator; 2 | /*** 3 | *@Author: WinterSweett 4 | *@Date: 5 | *@Description: 6 | */ 7 | public abstract class Colleague { 8 | protected Mediator mediator ; 9 | public Colleague(Mediator mediator){ 10 | this.mediator = mediator ; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/ConcreteColleague1.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.commonmediator; 2 | 3 | public class ConcreteColleague1 extends Colleague{ 4 | public ConcreteColleague1(Mediator mediator) { 5 | super(mediator); 6 | } 7 | //自有方法 8 | public void selfMethod(){ 9 | 10 | } 11 | //依赖方法 12 | public void depMethod(){ 13 | super.mediator.doSomething1(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/ConcreteColleague2.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.commonmediator; 2 | 3 | public class ConcreteColleague2 extends Colleague{ 4 | public ConcreteColleague2(Mediator mediator) { 5 | super(mediator); 6 | } 7 | public void selfMethod2(){ 8 | 9 | } 10 | public void depMethod2(){ 11 | super.mediator.doSomething2(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/ConcreteMediator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.commonmediator; 2 | 3 | public class ConcreteMediator extends Mediator{ 4 | @Override 5 | public void doSomething1() { 6 | super.c1.selfMethod(); 7 | super.c2.selfMethod2(); 8 | } 9 | 10 | @Override 11 | public void doSomething2() { 12 | super.c1.selfMethod(); 13 | super.c2.selfMethod2(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/Mediator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.commonmediator; 2 | 3 | public abstract class Mediator { 4 | protected ConcreteColleague1 c1; 5 | protected ConcreteColleague2 c2 ; 6 | 7 | public ConcreteColleague1 getC1() { 8 | return c1; 9 | } 10 | 11 | public void setC1(ConcreteColleague1 c1) { 12 | this.c1 = c1; 13 | } 14 | 15 | public ConcreteColleague2 getC2() { 16 | return c2; 17 | } 18 | 19 | public void setC2(ConcreteColleague2 c2) { 20 | this.c2 = c2; 21 | } 22 | public abstract void doSomething1(); 23 | public abstract void doSomething2(); 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/note: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/note -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/中介者模式通用类图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/commonmediator/中介者模式通用类图.jpg -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/AbstractColleague.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.stockpurchaseandsale; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 抽象同事类 7 | */ 8 | class AbstractColleague { 9 | protected AbstractMediator mediator ; 10 | public AbstractColleague(AbstractMediator mediator){ 11 | this.mediator = mediator ; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/AbstractMediator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.stockpurchaseandsale; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 抽象中介者 7 | */ 8 | abstract class AbstractMediator { 9 | protected Purchase purchase ; 10 | protected Sale sale ; 11 | protected Stock stock ; 12 | public AbstractMediator(){ 13 | purchase = new Purchase(this); 14 | sale = new Sale(this) ; 15 | stock = new Stock(this); 16 | } 17 | public abstract void excute(String str , Object...objects); 18 | 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.stockpurchaseandsale; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client { 8 | public static void main(String[] args) { 9 | AbstractMediator mediator = new Mediator(); 10 | Purchase purchase = new Purchase(mediator); 11 | purchase.buyIBMComputer(100); 12 | Sale sale = new Sale(mediator); 13 | sale.sellIBMComputer(1); 14 | Stock stock = new Stock(mediator) ; 15 | stock.clearStock(); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/Mediator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.stockpurchaseandsale; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Mediator extends AbstractMediator{ 8 | @Override 9 | public void excute(String str, Object... objects) { 10 | if(str.equals("purchase.buy")){ 11 | this.buyComputer((Integer) objects[0]); 12 | }else if(str.equals("sale.sell")){ 13 | this.sellComputer((Integer) objects[0]); 14 | }else if(str.equals("sale.offsell")){ 15 | this.offSell(); 16 | }else if(str.equals("stock.clear")){ 17 | this.clearStock(); 18 | } 19 | } 20 | private void buyComputer(int num){ 21 | int saleStatus = sale.getSaleStatus() ; 22 | if(saleStatus > 80){ 23 | System.out.println("采购电脑:"+num+"台"); 24 | super.stock.increase(num); 25 | }else { 26 | int buyNum =num/2 ; 27 | System.out.println("采购电脑:"+num+"台"); 28 | } 29 | } 30 | 31 | private void sellComputer(int num){ 32 | if(super.stock.getStockNum() < num){ 33 | super.purchase.buyIBMComputer(num); 34 | } 35 | super.stock.decrease(num); 36 | } 37 | private void offSell(){ 38 | System.out.println("折价销售电脑:"+stock.getStockNum()+"台"); 39 | } 40 | private void clearStock(){ 41 | super.sale.offSale(); 42 | super.purchase.refuseBuy(); 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/Purchase.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.stockpurchaseandsale; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 采购管理 7 | */ 8 | class Purchase extends AbstractColleague{ 9 | public Purchase(AbstractMediator mediator) { 10 | super(mediator); 11 | } 12 | public void buyIBMComputer(int num){ 13 | super.mediator.excute("purchase.buy",num); 14 | } 15 | public void refuseBuy(){ 16 | System.out.println("不再采购IBM"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/Sale.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.stockpurchaseandsale; 2 | 3 | import com.newtrip.designdemoproject.R; 4 | 5 | import java.util.Random; 6 | 7 | /** 8 | * @author : WinterSweett 9 | * @time : {DATE} 10 | */ 11 | class Sale extends AbstractColleague { 12 | public Sale(AbstractMediator mediator) { 13 | super(mediator); 14 | } 15 | public void sellIBMComputer(int num){ 16 | super.mediator.excute("sale.sell",num); 17 | System.out.println("销售电脑:"+num+"台"); 18 | 19 | } 20 | public int getSaleStatus(){ 21 | Random random = new Random(System.currentTimeMillis()); 22 | int saleStatus = random.nextInt(100); 23 | System.out.println("电脑的销售情况:"+saleStatus); 24 | return saleStatus; 25 | } 26 | 27 | public void offSale(){ 28 | super.mediator.excute("sale.offsell"); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/Stock.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mediatorpattern.stockpurchaseandsale; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Stock extends AbstractColleague{ 8 | public Stock(AbstractMediator mediator) { 9 | super(mediator); 10 | } 11 | private static int COMPUTER_NUM = 100 ; 12 | public void increase(int num){ 13 | COMPUTER_NUM += num ; 14 | System.out.println("库存数量为:"+COMPUTER_NUM); 15 | } 16 | public void decrease(int num){ 17 | COMPUTER_NUM -= num ; 18 | System.out.println("库存数量为:"+COMPUTER_NUM); 19 | } 20 | public int getStockNum(){ 21 | return COMPUTER_NUM ; 22 | } 23 | public void clearStock(){ 24 | System.out.println("清理存货数量为:"+COMPUTER_NUM); 25 | super.mediator.excute("stock.clear"); 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/中介者前的复杂业务.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/中介者前的复杂业务.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/修改后的进销存.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/修改后的进销存.jpg -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/修改后的进销存类图.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/mediatorpattern/stockpurchaseandsale/修改后的进销存类图.jpg -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/clone/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.clone; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Originator originator = new Originator(); 6 | originator.setState("初始状态:"); 7 | try { 8 | originator.createMento(); 9 | } catch (Exception e) { 10 | e.printStackTrace(); 11 | } 12 | originator.setState("修改后的"); 13 | originator.restoreMemento(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/clone/Originator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.clone; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | public class Originator { 6 | private Originator backup ; 7 | private String state = ""; 8 | 9 | public String getState() { 10 | return state; 11 | } 12 | 13 | public void setState(String state) { 14 | this.state = state; 15 | } 16 | public void createMento() throws Exception { 17 | backup = (Originator) this.clone(); 18 | } 19 | 20 | @NonNull 21 | @Override 22 | protected Object clone() { 23 | try { 24 | return super.clone(); 25 | } catch (CloneNotSupportedException e) { 26 | e.printStackTrace(); 27 | } 28 | return null ; 29 | } 30 | public void restoreMemento(){ 31 | this.setState(this.backup.getState()); 32 | } 33 | } 34 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/clone/cloned_memento.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/mementopattern/clone/cloned_memento.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/common/Caretaker.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.common; 2 | /*** 3 | *@Author: WinterSweett 4 | *@Date: 5 | *@Description:备忘录管理员角色 6 | */ 7 | public class Caretaker { 8 | private Memento memento ; 9 | 10 | public Memento getMemento() { 11 | return memento; 12 | } 13 | 14 | public void setMemento(Memento memento) { 15 | this.memento = memento; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/common/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.common; 2 | 3 | public class Client { 4 | public static void main(String[] args) { 5 | Originator originator = new Originator(); 6 | Caretaker caretaker = new Caretaker(); 7 | caretaker.setMemento(originator.createMemento()); 8 | originator.restoreMemento(caretaker.getMemento()); 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/common/Memento.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.common; 2 | 3 | public class Memento { 4 | private String state = ""; 5 | public Memento(String state){ 6 | this.state = state ; 7 | } 8 | public String getState(){ 9 | return state ; 10 | } 11 | public void setState(String state){ 12 | this.state = state ; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/common/Originator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.common; 2 | 3 | public class Originator { 4 | private String state = ""; 5 | 6 | public String getState() { 7 | return state; 8 | } 9 | 10 | public void setState(String state) { 11 | this.state = state; 12 | } 13 | public Memento createMemento(){ 14 | return new Memento(state); 15 | } 16 | public void restoreMemento(Memento memento){ 17 | this.setState(memento.getState()); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/common/common_memento.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/mementopattern/common/common_memento.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/multistate/BeanInfo.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.multistate; 2 | 3 | public class BeanInfo { 4 | public String name ; 5 | public String value ; 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/multistate/BeanUtils.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.multistate; 2 | 3 | import java.util.HashMap; 4 | 5 | public class BeanUtils { 6 | public static HashMap backupProp(BeanInfo bean){ 7 | HashMap result = new HashMap<>(); 8 | result.put(bean.name,bean.value); 9 | return result ; 10 | } 11 | public static void restoreProp(BeanInfo info , HashMap map){ 12 | 13 | } 14 | 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/multistate/Memento.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.multistate; 2 | 3 | import java.util.HashMap; 4 | 5 | public class Memento { 6 | private HashMap stateMap ; 7 | public Memento(HashMap map){ 8 | this.stateMap = map ; 9 | } 10 | public HashMap getStateMap(){ 11 | return stateMap ; 12 | } 13 | public void setStateMap(HashMap stateMap){ 14 | this.stateMap = stateMap ; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/multistate/Originator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.mementopattern.multistate; 2 | 3 | public class Originator { 4 | private String state1 ; 5 | private String state2 ; 6 | private String state3 ; 7 | 8 | public String getState1() { 9 | return state1; 10 | } 11 | 12 | public void setState1(String state1) { 13 | this.state1 = state1; 14 | } 15 | 16 | public String getState2() { 17 | return state2; 18 | } 19 | 20 | public void setState2(String state2) { 21 | this.state2 = state2; 22 | } 23 | 24 | public String getState3() { 25 | return state3; 26 | } 27 | 28 | public void setState3(String state3) { 29 | this.state3 = state3; 30 | } 31 | public Memento createMemo(){ 32 | return new Memento(BeanUtils.backupProp(new BeanInfo())); 33 | } 34 | public void restoreMemo(Memento memento){ 35 | //BeanUtils.restoreProp(this,memento.getStateMap()); 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/mementopattern/multistate/multistate.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/mementopattern/multistate/multistate.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/common/ConcreteObserver.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.observerpattern.common; 2 | 3 | public class ConcreteObserver implements Observer{ 4 | @Override 5 | public void update() { 6 | 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/common/ConcreteSubject.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.observerpattern.common; 2 | 3 | public class ConcreteSubject extends Subject{ 4 | public void doSomething(){ 5 | super.notifyObservers(); 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/common/Observer.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.observerpattern.common; 2 | 3 | public interface Observer { 4 | public void update(); 5 | } 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/common/Subject.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.observerpattern.common; 2 | 3 | import java.util.Observable; 4 | import java.util.Observer; 5 | import java.util.Vector; 6 | 7 | public abstract class Subject { 8 | private Vector observers = new Vector<>(); 9 | public void addObserver(Observer o){ 10 | this.observers.add(o); 11 | } 12 | public void delObserver(Observer o){ 13 | this.observers.remove(o); 14 | } 15 | public void notifyObservers(){ 16 | for(Observer observer : observers){ 17 | observer.update(new Observable(),""); 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/common/common_observer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/observerpattern/common/common_observer.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/hanfeizilisi/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.observerpattern.hanfeizilisi; 2 | 3 | import java.util.Observer; 4 | 5 | public class Client { 6 | public static void main(String[] args) { 7 | Observer lisi = new LiSi(); 8 | HanFeiZi feiZi = new HanFeiZi(); 9 | feiZi.addObserver(lisi); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/hanfeizilisi/HanFeiZi.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.observerpattern.hanfeizilisi; 2 | 3 | 4 | import java.util.ArrayList; 5 | import java.util.List; 6 | import java.util.Observable; 7 | import java.util.Observer; 8 | 9 | public class HanFeiZi extends Observable implements IHanFeiZi { 10 | List list = new ArrayList<>(); 11 | 12 | @Override 13 | public synchronized void addObserver(Observer o) { 14 | super.addObserver(o); 15 | this.list.add(o); 16 | } 17 | 18 | @Override 19 | public synchronized void deleteObserver(Observer o) { 20 | super.deleteObserver(o); 21 | this.list.remove(o); 22 | } 23 | 24 | @Override 25 | public void notifyObservers(Object arg) { 26 | super.notifyObservers(arg); 27 | for(Observer observer : list){ 28 | observer.update(this,arg); 29 | } 30 | } 31 | 32 | @Override 33 | public void haveBreakfast() { 34 | super.setChanged(); 35 | super.notifyObservers("have breakfast"); 36 | } 37 | 38 | @Override 39 | public void haveFun() { 40 | super.setChanged(); 41 | super.notifyObservers("have fun"); 42 | } 43 | } 44 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/hanfeizilisi/IHanFeiZi.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.observerpattern.hanfeizilisi; 2 | 3 | public interface IHanFeiZi { 4 | void haveBreakfast(); 5 | void haveFun(); 6 | } 7 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/hanfeizilisi/LiSi.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.observerpattern.hanfeizilisi; 2 | 3 | import java.util.Observable; 4 | import java.util.Observer; 5 | 6 | public class LiSi implements Observer { 7 | @Override 8 | public void update(Observable observable, Object o) { 9 | System.out.printf(observable+" "+o); 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/observerpattern/hanfeizilisi/hanfeizilisi.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/observerpattern/hanfeizilisi/hanfeizilisi.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/prototypepattern/PrototypeClass.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.prototypepattern; 2 | 3 | import androidx.annotation.NonNull; 4 | 5 | /** 6 | * @author : WinterSweett 7 | * @time : {DATE} 8 | */ 9 | class PrototypeClass implements Cloneable { 10 | @Override 11 | protected Object clone() throws CloneNotSupportedException { 12 | PrototypeClass prototypeClass = null ; 13 | prototypeClass = (PrototypeClass) super.clone(); 14 | return prototypeClass; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/prototypepattern/Thing.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.prototypepattern; 2 | 3 | import java.util.ArrayList; 4 | 5 | import androidx.annotation.NonNull; 6 | 7 | /** 8 | * @author : WinterSweett 9 | * @time : {DATE} 10 | * 拷贝是内存中二进制流的拷贝;基本数据类型和string 即使没有特殊操作 也会被拷贝 11 | */ 12 | class Thing { 13 | private ArrayList arrayList = new ArrayList<>(); 14 | 15 | @Override 16 | protected Object clone() throws CloneNotSupportedException { 17 | Thing thing = null ; 18 | thing = (Thing) super.clone(); 19 | //深拷贝 20 | thing.arrayList = (ArrayList) thing.arrayList.clone(); 21 | return thing; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/BeforeAdvice.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class BeforeAdvice implements IAdvice { 8 | @Override 9 | public void exec() { 10 | System.out.println("我是前置通知,我被执行了!!"); 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | import java.lang.reflect.InvocationHandler; 4 | 5 | /** 6 | * @author : WinterSweett 7 | * @time : {DATE} 8 | */ 9 | class Client { 10 | public static void main(String[] args) { 11 | Subject subject = new RealSubject(); 12 | InvocationHandler handler = new MyInvocationHandler(subject); 13 | //主题的代理 14 | Subject proxy = DynamicProxy.newProxyInstance(subject.getClass().getClassLoader(), subject.getClass().getInterfaces(),handler); 15 | //代理的行为 16 | proxy.doSomething("finish"); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/Client2.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client2 { 8 | public static void main(String[] args) { 9 | Subject subject = new RealSubject(); 10 | Subject proxy = SubjectDynamicProxy.newProxyInstance(subject); 11 | proxy.doSomething("finish"); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/DynamicProxy.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | import java.lang.reflect.InvocationHandler; 4 | import java.lang.reflect.Proxy; 5 | 6 | /** 7 | * @author : WinterSweett 8 | * @time : {DATE} 9 | * 对于日志、事务、权限等都可以在系统设计阶段不用考虑,而在设计后通过AOP的方式切过去 10 | */ 11 | class DynamicProxy { 12 | public static T newProxyInstance(ClassLoader loader , Class[] interfaces , InvocationHandler h){ 13 | //寻找JoinPoint连接点,AOP框架使用元数据定义 14 | if(true){ 15 | //执行一个前置通知 16 | (new BeforeAdvice()).exec(); 17 | } 18 | //执行目标,并返回结果 19 | return (T) Proxy.newProxyInstance(loader,interfaces,h); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/IAdvice.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 通知接口及实现 7 | */ 8 | interface IAdvice { 9 | public void exec(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/MyInvocationHandler.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | import java.lang.reflect.InvocationHandler; 4 | import java.lang.reflect.Method; 5 | 6 | /** 7 | * @author : WinterSweett 8 | * @time : {DATE} 9 | * 动态代理的Handler类 10 | */ 11 | class MyInvocationHandler implements InvocationHandler { 12 | //被代理的对象 13 | private Object target = null ; 14 | //通用构造函数传递一个对象 15 | public MyInvocationHandler(Object obj){ 16 | this.target = obj ; 17 | } 18 | //代理方法 19 | @Override 20 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 21 | //执行被代理的方法,所有通过动态代理实现的方法,全部通过invoke调用 22 | return method.invoke(target,args); 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/RealSubject.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 真实主题 7 | */ 8 | class RealSubject implements Subject { 9 | @Override 10 | public void doSomething(String str) { 11 | System.out.println("doSomething--->"+str); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/Subject.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 抽象主题 7 | */ 8 | interface Subject { 9 | //业务操作 10 | public void doSomething(String str); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/SubjectDynamicProxy.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.commondynamicproxy; 2 | 3 | import android.os.Bundle; 4 | 5 | import java.lang.reflect.InvocationHandler; 6 | 7 | /** 8 | * @author : WinterSweett 9 | * @time : {DATE} 10 | * 具体业务的动态代理 11 | */ 12 | class SubjectDynamicProxy extends DynamicProxy{ 13 | public staticT newProxyInstance(Subject subject) { 14 | ClassLoader loader = subject.getClass().getClassLoader(); 15 | Class[] classes = subject.getClass().getInterfaces(); 16 | InvocationHandler handler = new MyInvocationHandler(subject); 17 | 18 | return newProxyInstance(loader,classes,handler); 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/common.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/proxypattern/commondynamicproxy/common.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/dynamicproxy/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.dynamicproxy; 2 | 3 | 4 | import java.lang.reflect.InvocationHandler; 5 | import java.lang.reflect.Proxy; 6 | 7 | /** 8 | * @author : WinterSweett 9 | * 10 | * 动态代理的使用 11 | */ 12 | class Client { 13 | public static void main(String[] args) { 14 | IGamePlayer player = new GamePlayer("zhangsan"); 15 | InvocationHandler handler = new GamePlayIH(player); 16 | ClassLoader classLoader = player.getClass().getClassLoader(); 17 | System.out.println("classloader:"+classLoader); 18 | IGamePlayer proxy = (IGamePlayer) Proxy.newProxyInstance(classLoader,new Class[]{IGamePlayer.class},handler); 19 | proxy.login("zhans","123"); 20 | proxy.killBoss(); 21 | proxy.update(); 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/dynamicproxy/GamePlayIH.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.dynamicproxy; 2 | 3 | import java.lang.reflect.InvocationHandler; 4 | import java.lang.reflect.Method; 5 | 6 | /** 7 | * @author : WinterSweett 8 | * @time : {DATE} 9 | * 动态代理 10 | */ 11 | class GamePlayIH implements InvocationHandler { 12 | Class cls;//被代理者 13 | Object obj;//被代理的实例 14 | public GamePlayIH(Object obj){ 15 | this.obj = obj ; 16 | } 17 | @Override 18 | public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 19 | Object result = method.invoke(this.obj,args); 20 | //调用了login方法 就打印日志 21 | if(method.getName().equalsIgnoreCase("login")){ 22 | System.out.println("有人在登录我的账号"); 23 | } 24 | return result; 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/dynamicproxy/GamePlayer.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.dynamicproxy; 2 | 3 | 4 | /** 5 | * @author : WinterSweett 6 | * @time : {DATE} 7 | */ 8 | class GamePlayer implements IGamePlayer { 9 | private IGamePlayer proxy ; 10 | private String name ; 11 | public GamePlayer(String name){ 12 | this.name = name ; 13 | } 14 | @Override 15 | public void login(String user, String passWord) { 16 | if(isProxy()){ 17 | System.out.println("user:"+user+" name:"+name); 18 | }else { 19 | System.out.println("请使用指定的代理访问"); 20 | } 21 | 22 | } 23 | 24 | @Override 25 | public void killBoss() { 26 | if(isProxy()){ 27 | System.out.println("killBoss"); 28 | }else { 29 | System.out.println("请使用指定的代理访问"); 30 | } 31 | } 32 | 33 | @Override 34 | public void update() { 35 | if(isProxy()){ 36 | System.out.println("update:"); 37 | }else { 38 | System.out.println("请使用指定的代理访问"); 39 | } 40 | } 41 | 42 | private boolean isProxy(){ 43 | if(this.proxy == null){ 44 | return true; 45 | }else { 46 | return true; 47 | } 48 | } 49 | 50 | } 51 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/dynamicproxy/IGamePlayer.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.dynamicproxy; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | interface IGamePlayer { 8 | void login(String user , String passWord); 9 | void killBoss(); 10 | void update(); 11 | } 12 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/dynamicproxy/dynamic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/proxypattern/dynamicproxy/dynamic.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/force/ForceClient.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.force; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class ForceClient { 8 | public static void main(String[] args) { 9 | IGamePlayer gamePlayer = new GamePlayer("范冰冰"); 10 | IGamePlayer proxyPlayer = gamePlayer.getProxy(); 11 | proxyPlayer.login("fanbingbing","123"); 12 | proxyPlayer.killBoss(); 13 | proxyPlayer.update(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/force/GamePlayer.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.force; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class GamePlayer implements IGamePlayer{ 8 | private IGamePlayer proxy ; 9 | private String name ; 10 | public GamePlayer(String name){ 11 | this.name = name ; 12 | } 13 | @Override 14 | public void login(String user, String passWord) { 15 | if(isProxy()){ 16 | System.out.println("user:"+user+" name:"+name); 17 | }else { 18 | System.out.println("请使用指定的代理访问"); 19 | } 20 | 21 | } 22 | 23 | @Override 24 | public void killBoss() { 25 | if(isProxy()){ 26 | System.out.println("killBoss"); 27 | }else { 28 | System.out.println("请使用指定的代理访问"); 29 | } 30 | } 31 | 32 | @Override 33 | public void update() { 34 | if(isProxy()){ 35 | System.out.println("update:"); 36 | }else { 37 | System.out.println("请使用指定的代理访问"); 38 | } 39 | } 40 | 41 | @Override 42 | public IGamePlayer getProxy() { 43 | this.proxy = new GamePlayerProxy(this); 44 | return this.proxy; 45 | } 46 | private boolean isProxy(){ 47 | if(this.proxy == null){ 48 | return false; 49 | }else { 50 | return true; 51 | } 52 | } 53 | 54 | } 55 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/force/GamePlayerProxy.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.force; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 强制代理 7 | */ 8 | class GamePlayerProxy implements IGamePlayer{ 9 | private IGamePlayer iGamePlayer ; 10 | public GamePlayerProxy(IGamePlayer iGamePlayer){ 11 | this.iGamePlayer = iGamePlayer ; 12 | } 13 | @Override 14 | public void login(String user, String passWord) { 15 | this.iGamePlayer.login(user,passWord); 16 | } 17 | 18 | @Override 19 | public void killBoss() { 20 | this.iGamePlayer.killBoss(); 21 | } 22 | 23 | @Override 24 | public void update() { 25 | this.iGamePlayer.update(); 26 | } 27 | 28 | @Override 29 | public IGamePlayer getProxy() { 30 | return this; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/force/IGamePlayer.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.force; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | interface IGamePlayer { 8 | void login(String user , String passWord); 9 | void killBoss(); 10 | void update(); 11 | IGamePlayer getProxy(); 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/force/force.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/proxypattern/force/force.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.normal; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 调用者只知道代理,而不用知道真实的角色是谁,屏蔽了真实角色的变更对高层模块的影响 7 | */ 8 | class Client { 9 | public static void main(String[] args) { 10 | GamePlayerProxy gamePlayerProxy = new GamePlayerProxy("张三"); 11 | gamePlayerProxy.login("zhangsan","123456"); 12 | gamePlayerProxy.killBoss(); 13 | gamePlayerProxy.update(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/GamPlayer.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.normal; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class GamPlayer implements IGamePlayer { 8 | private String name = ""; 9 | public GamPlayer(IGamePlayer iGamePlayer,String name){ 10 | if(iGamePlayer == null){ 11 | try { 12 | throw new Exception("不能创建真实角色"); 13 | } catch (Exception e) { 14 | e.printStackTrace(); 15 | } 16 | }else { 17 | this.name = name ; 18 | } 19 | 20 | } 21 | @Override 22 | public void login(String user, String password) { 23 | System.out.println("用户名:"+user+" name:"+this.name); 24 | } 25 | 26 | @Override 27 | public void killBoss() { 28 | System.out.println(this.name+"kissboss"); 29 | } 30 | 31 | @Override 32 | public void update() { 33 | System.out.println(this.name+"update"); 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/GamePlayerProxy.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.normal; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 普通代理,实现IProxy接口后,就拥有了自己的个性 7 | */ 8 | class GamePlayerProxy implements IGamePlayer,IProxy{ 9 | IGamePlayer iGamePlayer ; 10 | public GamePlayerProxy(String name){ 11 | iGamePlayer = new GamPlayer(this,name); 12 | } 13 | @Override 14 | public void login(String user, String password) { 15 | this.iGamePlayer.login(user,password); 16 | 17 | } 18 | 19 | @Override 20 | public void killBoss() { 21 | this.iGamePlayer.killBoss(); 22 | } 23 | 24 | @Override 25 | public void update() { 26 | this.iGamePlayer.update(); 27 | count(); 28 | } 29 | 30 | @Override 31 | public void count() { 32 | System.out.println("54$"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/IGamePlayer.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.normal; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | interface IGamePlayer { 8 | public void login(String user,String password); 9 | public void killBoss(); 10 | public void update(); 11 | 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/IProxy.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.proxypattern.normal; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 代理可以有自己的个性 7 | */ 8 | interface IProxy { 9 | void count(); 10 | } 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/normal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/normal.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/self.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/proxypattern/normal/self.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/addandsub/Add.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.addandsub; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Add implements Caculator { 8 | @Override 9 | public int exec(int a, int b) { 10 | return a+b; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/addandsub/Caculator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.addandsub; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | interface Caculator { 8 | public int exec(int a, int b); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/addandsub/Context.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.addandsub; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Context { 8 | private Caculator caculator ; 9 | public Context(Caculator caculator){ 10 | this.caculator = caculator ; 11 | } 12 | public int exec(int a,int b,String symbol){ 13 | return this.caculator.exec(a,b); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/addandsub/Sub.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.addandsub; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Sub implements Caculator { 8 | @Override 9 | public int exec(int a, int b) { 10 | return a-b; 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/common/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client { 8 | public static void main(String[] args) { 9 | Strategy strategy = new ConcreteStrategy(); 10 | Context context = new Context(strategy); 11 | context.doAnything(); 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/common/ConcreteStrategy.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class ConcreteStrategy implements Strategy{ 8 | @Override 9 | public void doSomething() { 10 | 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/common/Context.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Context { 8 | private Strategy strategy = null ; 9 | public Context(Strategy strategy){ 10 | this.strategy = strategy ; 11 | } 12 | public void doAnything(){ 13 | this.strategy.doSomething(); 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/common/Strategy.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.common; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | interface Strategy { 8 | public void doSomething(); 9 | } 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/common/strategycommon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/java/com/newtrip/designdemoproject/strategypattern/common/strategycommon.png -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/strategyenum/Client.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.strategyenum; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class Client { 8 | public static void main(String[] args) { 9 | int a = 1; 10 | String symbol = "+"; 11 | int b = 2; 12 | System.out.println(EnumCaculator.ADD.exec(a,b)); 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/strategypattern/strategyenum/EnumCaculator.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.strategypattern.strategyenum; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | * 策略枚举 7 | */ 8 | enum EnumCaculator { 9 | ADD("+"){ 10 | @Override 11 | public int exec(int a, int b){ 12 | return a+b; 13 | } 14 | 15 | }, 16 | SUB("-"){ 17 | @Override 18 | public int exec(int a, int b){ 19 | return a-b; 20 | } 21 | }; 22 | String value = ""; 23 | private EnumCaculator(String value){ 24 | this.value = value ; 25 | } 26 | public String getValue(){ 27 | return this.value; 28 | } 29 | public abstract int exec(int a , int b); 30 | } 31 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/templatemethodpadttern/HumerClient.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.templatemethodpadttern; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class HumerClient { 8 | public static void main(String[] args) { 9 | HumerH1Model humerModel = new HumerH1Model(); 10 | humerModel.setAlarm(true); 11 | humerModel.run(); 12 | 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/templatemethodpadttern/HumerH1Model.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.templatemethodpadttern; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | class HumerH1Model extends HumerModel { 8 | @Override 9 | protected void start() { 10 | System.out.println("start"); 11 | } 12 | 13 | @Override 14 | protected void stop() { 15 | System.out.println("stop"); 16 | } 17 | 18 | @Override 19 | protected void alarm() { 20 | System.out.println("alarm"); 21 | } 22 | 23 | @Override 24 | protected void engineBoom() { 25 | System.out.println("engineBoom"); 26 | } 27 | 28 | boolean mAlarm ; 29 | @Override 30 | protected boolean isAlarm() { 31 | return mAlarm; 32 | } 33 | 34 | public void setAlarm(boolean alarm){ 35 | this.mAlarm = alarm ; 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /app/src/main/java/com/newtrip/designdemoproject/templatemethodpadttern/HumerModel.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject.templatemethodpadttern; 2 | 3 | /** 4 | * @author : WinterSweett 5 | * @time : {DATE} 6 | */ 7 | abstract class HumerModel { 8 | protected abstract void start(); 9 | protected abstract void stop(); 10 | protected abstract void alarm(); 11 | protected abstract void engineBoom(); 12 | public void run(){ 13 | this.start(); 14 | this.stop(); 15 | if(isAlarm()){ 16 | this.alarm(); 17 | } 18 | this.engineBoom(); 19 | 20 | } 21 | protected boolean isAlarm(){ 22 | return false; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-v24/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 7 | 8 | 9 | 15 | 18 | 21 | 22 | 23 | 24 | 30 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | 15 | 20 | 25 | 30 | 35 | 40 | 45 | 50 | 55 | 60 | 65 | 70 | 75 | 80 | 85 | 90 | 95 | 100 | 105 | 110 | 115 | 120 | 125 | 130 | 135 | 140 | 145 | 150 | 155 | 160 | 165 | 170 | 171 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 17 | 18 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFBB86FC 4 | #FF6200EE 5 | #FF3700B3 6 | #FF03DAC5 7 | #FF018786 8 | #FF000000 9 | #FFFFFFFF 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | DesignDemoProject 3 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /app/src/test/java/com/newtrip/designdemoproject/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/test/java/com/newtrip/designdemoproject/TestOne.java: -------------------------------------------------------------------------------- 1 | package com.newtrip.designdemoproject; 2 | 3 | import com.newtrip.designdemoproject.interfacesegretionprinciple.AbstractSearcher; 4 | import com.newtrip.designdemoproject.interfacesegretionprinciple.PrettyGril; 5 | import com.newtrip.designdemoproject.interfacesegretionprinciple.Searcher; 6 | 7 | import org.junit.Test; 8 | 9 | /** 10 | * @author : WinterSweett 11 | */ 12 | public class TestOne { 13 | @Test 14 | public void test(){ 15 | PrettyGril prettyGril = new PrettyGril(); 16 | AbstractSearcher searcher = new Searcher(prettyGril); 17 | searcher.show(); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | dependencies { 8 | classpath "com.android.tools.build:gradle:4.2.1" 9 | 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | mavenCentral() 19 | jcenter() // Warning: this repository is going to shut down soon 20 | } 21 | } 22 | 23 | task clean(type: Delete) { 24 | delete rootProject.buildDir 25 | } -------------------------------------------------------------------------------- /gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wintersweett/DesignDemoProject/c42c37062a18b4c3387485e9d5f89b180fadd4e1/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Sep 07 07:36:55 CST 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /gradlew: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | 3 | ############################################################################## 4 | ## 5 | ## Gradle start up script for UN*X 6 | ## 7 | ############################################################################## 8 | 9 | # Attempt to set APP_HOME 10 | # Resolve links: $0 may be a link 11 | PRG="$0" 12 | # Need this for relative symlinks. 13 | while [ -h "$PRG" ] ; do 14 | ls=`ls -ld "$PRG"` 15 | link=`expr "$ls" : '.*-> \(.*\)$'` 16 | if expr "$link" : '/.*' > /dev/null; then 17 | PRG="$link" 18 | else 19 | PRG=`dirname "$PRG"`"/$link" 20 | fi 21 | done 22 | SAVED="`pwd`" 23 | cd "`dirname \"$PRG\"`/" >/dev/null 24 | APP_HOME="`pwd -P`" 25 | cd "$SAVED" >/dev/null 26 | 27 | APP_NAME="Gradle" 28 | APP_BASE_NAME=`basename "$0"` 29 | 30 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 31 | DEFAULT_JVM_OPTS="" 32 | 33 | # Use the maximum available, or set MAX_FD != -1 to use that value. 34 | MAX_FD="maximum" 35 | 36 | warn () { 37 | echo "$*" 38 | } 39 | 40 | die () { 41 | echo 42 | echo "$*" 43 | echo 44 | exit 1 45 | } 46 | 47 | # OS specific support (must be 'true' or 'false'). 48 | cygwin=false 49 | msys=false 50 | darwin=false 51 | nonstop=false 52 | case "`uname`" in 53 | CYGWIN* ) 54 | cygwin=true 55 | ;; 56 | Darwin* ) 57 | darwin=true 58 | ;; 59 | MINGW* ) 60 | msys=true 61 | ;; 62 | NONSTOP* ) 63 | nonstop=true 64 | ;; 65 | esac 66 | 67 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 68 | 69 | # Determine the Java command to use to start the JVM. 70 | if [ -n "$JAVA_HOME" ] ; then 71 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then 72 | # IBM's JDK on AIX uses strange locations for the executables 73 | JAVACMD="$JAVA_HOME/jre/sh/java" 74 | else 75 | JAVACMD="$JAVA_HOME/bin/java" 76 | fi 77 | if [ ! -x "$JAVACMD" ] ; then 78 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME 79 | 80 | Please set the JAVA_HOME variable in your environment to match the 81 | location of your Java installation." 82 | fi 83 | else 84 | JAVACMD="java" 85 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 86 | 87 | Please set the JAVA_HOME variable in your environment to match the 88 | location of your Java installation." 89 | fi 90 | 91 | # Increase the maximum file descriptors if we can. 92 | if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then 93 | MAX_FD_LIMIT=`ulimit -H -n` 94 | if [ $? -eq 0 ] ; then 95 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then 96 | MAX_FD="$MAX_FD_LIMIT" 97 | fi 98 | ulimit -n $MAX_FD 99 | if [ $? -ne 0 ] ; then 100 | warn "Could not set maximum file descriptor limit: $MAX_FD" 101 | fi 102 | else 103 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" 104 | fi 105 | fi 106 | 107 | # For Darwin, add options to specify how the application appears in the dock 108 | if $darwin; then 109 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" 110 | fi 111 | 112 | # For Cygwin, switch paths to Windows format before running java 113 | if $cygwin ; then 114 | APP_HOME=`cygpath --path --mixed "$APP_HOME"` 115 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` 116 | JAVACMD=`cygpath --unix "$JAVACMD"` 117 | 118 | # We build the pattern for arguments to be converted via cygpath 119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` 120 | SEP="" 121 | for dir in $ROOTDIRSRAW ; do 122 | ROOTDIRS="$ROOTDIRS$SEP$dir" 123 | SEP="|" 124 | done 125 | OURCYGPATTERN="(^($ROOTDIRS))" 126 | # Add a user-defined pattern to the cygpath arguments 127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then 128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" 129 | fi 130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh 131 | i=0 132 | for arg in "$@" ; do 133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` 134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option 135 | 136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition 137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` 138 | else 139 | eval `echo args$i`="\"$arg\"" 140 | fi 141 | i=$((i+1)) 142 | done 143 | case $i in 144 | (0) set -- ;; 145 | (1) set -- "$args0" ;; 146 | (2) set -- "$args0" "$args1" ;; 147 | (3) set -- "$args0" "$args1" "$args2" ;; 148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;; 149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; 150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; 151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; 152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; 153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; 154 | esac 155 | fi 156 | 157 | # Escape application args 158 | save () { 159 | for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done 160 | echo " " 161 | } 162 | APP_ARGS=$(save "$@") 163 | 164 | # Collect all arguments for the java command, following the shell quoting and substitution rules 165 | eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" 166 | 167 | # by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong 168 | if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then 169 | cd "$(dirname "$0")" 170 | fi 171 | 172 | exec "$JAVACMD" "$@" 173 | -------------------------------------------------------------------------------- /gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | set DIRNAME=%~dp0 12 | if "%DIRNAME%" == "" set DIRNAME=. 13 | set APP_BASE_NAME=%~n0 14 | set APP_HOME=%DIRNAME% 15 | 16 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 17 | set DEFAULT_JVM_OPTS= 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windows variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | 53 | :win9xME_args 54 | @rem Slurp the command line arguments. 55 | set CMD_LINE_ARGS= 56 | set _SKIP=2 57 | 58 | :win9xME_args_slurp 59 | if "x%~1" == "x" goto execute 60 | 61 | set CMD_LINE_ARGS=%* 62 | 63 | :execute 64 | @rem Setup the command line 65 | 66 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 67 | 68 | @rem Execute Gradle 69 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 70 | 71 | :end 72 | @rem End local scope for the variables with windows NT shell 73 | if "%ERRORLEVEL%"=="0" goto mainEnd 74 | 75 | :fail 76 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 77 | rem the _cmd.exe /c_ return code! 78 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 79 | exit /b 1 80 | 81 | :mainEnd 82 | if "%OS%"=="Windows_NT" endlocal 83 | 84 | :omega 85 | -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = "DesignDemoProject" 2 | include ':app' 3 | --------------------------------------------------------------------------------