Showing preview only (208K chars total). Download the full file or copy to clipboard to get everything.
Repository: spring2go/core-spring-patterns
Branch: master
Commit: 6df03a4bde6b
Files: 202
Total size: 141.1 KB
Directory structure:
gitextract_i2ygnjo2/
├── .gitignore
├── LICENSE
├── README.md
└── patterns/
├── behavior/
│ ├── chain_of_responsibility/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ ├── ApproveHandler.java
│ │ ├── ClientProgram.java
│ │ ├── HR.java
│ │ ├── Leave.java
│ │ ├── ProjectLeader.java
│ │ └── TeamLeader.java
│ ├── command/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── command/
│ │ ├── CloseFileCommand.java
│ │ ├── Command.java
│ │ ├── FileInvoker.java
│ │ ├── FileSystemClient.java
│ │ ├── FileSystemReceiver.java
│ │ ├── FileSystemReceiverUtil.java
│ │ ├── OpenFileCommand.java
│ │ ├── UnixFileSystemReceiver.java
│ │ ├── WindowsFileSystemReceiver.java
│ │ ├── WriteFileCommand.java
│ │ └── uml.ucls
│ ├── interpreter/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── interpreter/
│ │ ├── App.java
│ │ ├── Expression.java
│ │ ├── MinusExpression.java
│ │ ├── MultiplyExpression.java
│ │ ├── NumberExpression.java
│ │ ├── PlusExpression.java
│ │ └── uml.ucls
│ ├── iterator/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── iterator/
│ │ ├── App.java
│ │ ├── Channel.java
│ │ ├── ChannelCollection.java
│ │ ├── ChannelCollectionImpl.java
│ │ ├── ChannelIterator.java
│ │ ├── ChannelTypeEnum.java
│ │ └── uml.ucls
│ ├── observer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── patterns/
│ │ └── observer/
│ │ ├── Follower.java
│ │ ├── Observer.java
│ │ ├── ObserverPatternMain.java
│ │ ├── OfficialAccount.java
│ │ ├── Subject.java
│ │ └── uml.ucls
│ ├── strategy/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── strategy/
│ │ ├── HeapSortStrategy.java
│ │ ├── MergeSortStrategy.java
│ │ ├── QuickSortStrategy.java
│ │ ├── SortingMainV1.java
│ │ ├── SortingMainV2.java
│ │ ├── SortingManagerV1.java
│ │ ├── SortingManagerV2.java
│ │ ├── SortingStrategy.java
│ │ ├── SortingType.java
│ │ └── uml.ucls
│ └── template/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── patterns/
│ └── template/
│ ├── CSVDataParser.java
│ ├── DataParser.java
│ ├── DatabaseDataParser.java
│ └── TemplateMethodMain.java
├── creation/
│ ├── abstract-factory/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── abstractfactory/
│ │ ├── AbstractFactoryMain.java
│ │ ├── ChineseElectricalFactory.java
│ │ ├── ChineseFan.java
│ │ ├── ChineseTubeLight.java
│ │ ├── IElectricalFactory.java
│ │ ├── IFan.java
│ │ ├── ITubeLight.java
│ │ ├── USElectricalFactory.java
│ │ ├── USFan.java
│ │ └── USTubeLight.java
│ ├── builder/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ ├── classicbuilder/
│ │ │ ├── AndroidPhoneBuilder.java
│ │ │ ├── Battery.java
│ │ │ ├── ClassicBuilderMain.java
│ │ │ ├── IMobilePhoneBuilder.java
│ │ │ ├── Manufacturer.java
│ │ │ ├── MobilePhone.java
│ │ │ ├── OperatingSystem.java
│ │ │ ├── ScreenType.java
│ │ │ ├── Stylus.java
│ │ │ └── WindowsPhoneBuilder.java
│ │ ├── javabean/
│ │ │ ├── JavaBeanMain.java
│ │ │ └── User.java
│ │ ├── modernbuilder/
│ │ │ ├── ModernBuilderMain.java
│ │ │ └── User.java
│ │ └── telescoping_constructor/
│ │ └── User.java
│ ├── factory-method/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── factorymethod/
│ │ ├── CeilingFan.java
│ │ ├── CeilingFanFactory.java
│ │ ├── ExhaustFan.java
│ │ ├── ExhaustFanFactory.java
│ │ ├── FactoryMethodMain.java
│ │ ├── IFan.java
│ │ ├── IFanFactory.java
│ │ ├── PropellerFan.java
│ │ ├── PropellerFanFactory.java
│ │ ├── TableFan.java
│ │ └── TableFanFactory.java
│ ├── simple-factory/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ ├── nofactory/
│ │ │ └── NoFactoryMain.java
│ │ └── simplefactory/
│ │ ├── CeilingFan.java
│ │ ├── ExhaustFan.java
│ │ ├── FanFactory.java
│ │ ├── FanType.java
│ │ ├── IFan.java
│ │ ├── IFanFactory.java
│ │ ├── SimpleFactoryMain.java
│ │ └── TableFan.java
│ └── singleton/
│ ├── filename.ser
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ ├── singleton/
│ │ ├── v3/
│ │ │ └── BillPughSingleton.java
│ │ └── v4/
│ │ ├── EnumSingleton.java
│ │ └── TestEnumSingleton.java
│ ├── singleton_deserialization/
│ │ ├── DemoSingleton.java
│ │ └── SerializationTest.java
│ ├── singleton_reflection/
│ │ ├── ReflectionSingleton.java
│ │ └── ReflectionTest.java
│ ├── singleton_v1/
│ │ └── EagerSingleton.java
│ ├── singleton_v1_1/
│ │ └── StaticBlockSingleton.java
│ ├── singleton_v2/
│ │ └── LazySingleton.java
│ ├── singleton_v2_1/
│ │ └── ThreadSafeSingleton.java
│ └── singleton_v2_2/
│ └── DoubleCheckLockingSingleton.java
├── general/
│ └── dependency-inversion/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ ├── injection/
│ │ ├── AppMonitorConstructorInjection.java
│ │ └── AppMonitorSetterInjection.java
│ ├── ioc/
│ │ ├── AppMonitorIOC.java
│ │ ├── EmailSender.java
│ │ ├── EventLogWriter.java
│ │ ├── INotifier.java
│ │ └── SMSSender.java
│ └── nodip/
│ └── AppMonitorNoDIP.java
└── structural/
├── adapter/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ ├── display/
│ │ ├── IHdmi.java
│ │ ├── IVga.java
│ │ ├── LaptopMain.java
│ │ ├── Vga2HdmiAdapter.java
│ │ └── VgaDisplay.java
│ └── stack/
│ ├── ArrayStack.java
│ ├── ArrayStackMain.java
│ ├── IStack.java
│ └── StackException.java
├── bridge/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ └── bridge/
│ ├── Client.java
│ ├── FileDownloadImplementor.java
│ ├── FileDownloaderAbstraction.java
│ ├── FileDownloaderAbstractionImpl.java
│ ├── LinuxFileDownloadImplementor.java
│ ├── WindowsFileDownloadImplementor.java
│ ├── abstraction_change/
│ │ ├── FileDownloaderAbstraction.java
│ │ └── FileDownloaderAbstractionImpl.java
│ └── implementation_change/
│ ├── FileDownloadImplementor.java
│ ├── LinuxFileDownloadImplementor.java
│ └── WindowsFileDownloadImplementor.java
├── composite/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ ├── composite_complex/
│ │ ├── BaseEmployee.java
│ │ ├── CompanyMain.java
│ │ ├── Developer.java
│ │ ├── IEmployee.java
│ │ ├── Manager.java
│ │ ├── Subscription.java
│ │ ├── SubscriptionType.java
│ │ └── Util.java
│ └── composite_simple/
│ ├── CompositePatternMain.java
│ ├── Developer.java
│ ├── IEmployee.java
│ └── Manager.java
├── decorator/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ └── decorator/
│ ├── ArtificialScentDecorator.java
│ ├── BakeryComponent.java
│ ├── CakeBase.java
│ ├── CherryDecorator.java
│ ├── CreamDecorator.java
│ ├── Decorator.java
│ ├── DecoratorMain.java
│ ├── NameCardDecorator.java
│ ├── PastryBase.java
│ ├── Util.java
│ └── uml.ucls
├── facade/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ └── facade/
│ ├── CostManager.java
│ ├── FacadeMain.java
│ ├── ICosting.java
│ ├── IInventory.java
│ ├── ILogistics.java
│ ├── IOrderVerify.java
│ ├── IPaymentGateway.java
│ ├── InventoryManager.java
│ ├── LogisticsManager.java
│ ├── NoFacadeMain.java
│ ├── OnlineShoppingFacade.java
│ ├── OrderDetails.java
│ ├── OrderVerificationManager.java
│ └── PaymentGatewayManager.java
└── proxy/
├── pom.xml
└── src/
└── main/
└── java/
└── io/
└── spring2go/
└── corespring/
├── Folder.java
├── FolderProxy.java
├── IFolder.java
├── ProxyDesignPatternMain.java
├── User.java
└── uml.ucls
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
target/
!.mvn/wrapper/maven-wrapper.jar
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
*.iml
.gradle
local.properties
.idea/workspace.xml
.idea/libraries
.DS_Store
build/
captures/
.externalNativeBuild
### NetBeans ###
nbproject/private/
build/
nbbuild/
dist/
nbdist/
.nb-gradle/
================================================
FILE: LICENSE
================================================
MIT License
Copyright (c) 2018 spring2go.com
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
core-spring-patterns
======
Spring核心原理和模式,波波微课
## 大纲
### 1. 创建模式
名称 | 代码 | ppt | 视频 |
----|-----|-----|-----|
简单工厂Simple Factory|[code](patterns/creation/simple-factory)|[ppt](ppts/简单工厂.pdf)|[video](https://v.qq.com/x/page/n0629exrd31.html)|
工厂方法Factory Method|[code](patterns/creation/factory-method)|[ppt](ppts/工厂方法.pdf)|[video](https://v.qq.com/x/page/a0629kh0xxc.html)|
抽象工厂Abstract Factory|[code](patterns/creation/abstract-factory)|[ppt](ppts/抽象工厂.pdf)|[video](https://v.qq.com/x/page/p0629psr89t.html)|
单例Singleton|[code](patterns/creation/singleton)|[ppt](ppts/单例.pdf)|[video](https://v.qq.com/x/page/s0630rqg9wg.html)|
构造者Builder|[code](patterns/creation/builder)|[ppt](ppts/构建者.pdf)|[video](https://v.qq.com/x/page/z0630bg1qs3.html)|
流畅接口Fluent Interface|[code](patterns/creation/builder)|[ppt](ppts/流畅接口.pdf)|[video](https://v.qq.com/x/page/v063000n872.html)|
### 2. 结构模式
名称 | 代码 | ppt | 视频 |
----|-----|-----|-----|
适配器Adapter|[code](patterns/structural/adapter)|[ppt](ppts/适配器.pdf)|[video](https://v.qq.com/x/page/w0632njvzkw.html)|
桥接器Bridge|[code](patterns/structural/bridge)|[ppt](ppts/桥接器.pdf)|[video](https://v.qq.com/x/page/h0632obkktb.html)|
组合Composite|[code](patterns/structural/composite)|[ppt](ppts/组合模式.pdf)|[video](https://v.qq.com/x/page/t0634x9lbew.html)|
装饰Decorator|[code](patterns/structural/decorator)|[ppt](ppts/装饰模式.pdf)|[video](http://v.qq.com/x/page/p0636w3d6s2.html)|
门面Facade|[code](patterns/structural/facade)|[ppt](ppts/门面模式.pdf)|[video](https://v.qq.com/x/page/m06379lgexy.html)|
代理Proxy|[code](patterns/structural/proxy)|[ppt](ppts/代理模式.pdf)|[video](https://v.qq.com/x/page/k0637354wuw.html)|
### 3. 行为模式
名称 | 代码 | ppt | 视频 |
----|-----|-----|-----|
职责链Chain of Responsibility|[code](patterns/behavior/chain_of_responsibility)|[ppt](ppts/职责链模式.pdf)|[video](http://v.qq.com/x/page/r0640omm9hs.html)|
命令Command|[code](patterns/behavior/command)|[ppt](ppts/命令模式.pdf)|[video](https://v.qq.com/x/page/j0641ba2m4j.html)|
解释器Interpreter|[code](patterns/behavior/interpreter)|[ppt](ppts/解释器模式.pdf)|[video](http://v.qq.com/x/page/t0642g9ioam.html)|
迭代器Iterator|[code](patterns/behavior/iterator)|[ppt](ppts/迭代器模式.pdf)|[video](https://v.qq.com/x/page/a0643uhcvgn.html)|
策略Strategy|[code](patterns/behavior/strategy)|[ppt](ppts/策略模式.pdf)|[video](http://v.qq.com/x/page/n0645457b19.html)|
观察者Observer|[code](patterns/behavior/observer)|[ppt](ppts/观察者模式.pdf)|[video](http://v.qq.com/x/page/j0653cekdal.html)|
模板方法Template Method|[code](patterns/behavior/template)|[ppt](ppts/模板方法模式.pdf)|[video](https://v.qq.com/x/page/p0654hjkpy3.html)|
### 4. 核心模式
名称 | 代码 | ppt | 视频 |
----|-----|-----|-----|
依赖倒置原则,控制反转,依赖注入|[code](patterns/general/dependency-inversion)|[ppt](ppts/DIP+IoC+DI.pdf)|[video](https://v.qq.com/x/page/k0629qsrpz5.html)|
## 波波微课公众号

## 官网
[jskillcloud.com](http://www.jskillcloud.com)
================================================
FILE: patterns/behavior/chain_of_responsibility/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>ChainOfResponsibility</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ApproveHandler.java
================================================
package io.spring2go.corespring;
// Handler
public interface ApproveHandler {
public void setNextHandler(ApproveHandler nextHandler);
public void approve(Leave leave);
}
================================================
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ClientProgram.java
================================================
package io.spring2go.corespring;
// Client
public class ClientProgram {
public static void main(String[] args) {
TeamLeader tl = new TeamLeader();
ProjectLeader pl = new ProjectLeader();
HR hr = new HR();
tl.setNextHandler(pl);
pl.setNextHandler(hr);
tl.approve(new Leave(1, 5));
tl.approve(new Leave(2, 15));
tl.approve(new Leave(3, 25));
tl.approve(new Leave(4, 35));
}
}
================================================
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/HR.java
================================================
package io.spring2go.corespring;
//ConcreteHandler
public class HR implements ApproveHandler {
private ApproveHandler nextHandler;
public final static int MAX_LEAVES_CAN_APPROVE = 30;
public void setNextHandler(ApproveHandler nextHandler) {
this.nextHandler = nextHandler;
}
public void approve(Leave leave) {
if (leave.getNumberOfDays() < MAX_LEAVES_CAN_APPROVE) {
String output = String.format(
"LeaveId: %d, Days: %d, Approver: %s",
leave.getLeaveId(),
leave.getNumberOfDays(),
"HR");
System.out.println(output);
} else {
if (nextHandler != null) {
nextHandler.approve(leave);
} else {
System.out.println("Leave application suspended, Please contact HR");
}
}
}
}
================================================
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/Leave.java
================================================
package io.spring2go.corespring;
// 请求对象
public class Leave {
private int leaveId;
private int numberOfDays;
public Leave(int leaveId, int numberOfDays) {
this.leaveId = leaveId;
this.numberOfDays = numberOfDays;
}
// region getter/setter
public int getLeaveId() {
return leaveId;
}
public void setLeaveId(int leaveId) {
this.leaveId = leaveId;
}
public int getNumberOfDays() {
return numberOfDays;
}
public void setNumberOfDays(int numberOfDays) {
this.numberOfDays = numberOfDays;
}
// endregion
}
================================================
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ProjectLeader.java
================================================
package io.spring2go.corespring;
//ConcreteHandler
public class ProjectLeader implements ApproveHandler {
private ApproveHandler nextHandler;
public final static int MAX_LEAVES_CAN_APPROVE = 20;
public void setNextHandler(ApproveHandler nextHandler) {
this.nextHandler = nextHandler;
}
public void approve(Leave leave) {
if (leave.getNumberOfDays() < MAX_LEAVES_CAN_APPROVE) {
String output = String.format(
"LeaveId: %d, Days: %d, Approver: %s",
leave.getLeaveId(),
leave.getNumberOfDays(),
"ProjectLeader");
System.out.println(output);
} else {
if (nextHandler != null) {
nextHandler.approve(leave);
}
}
}
}
================================================
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/TeamLeader.java
================================================
package io.spring2go.corespring;
// ConcreteHandler
public class TeamLeader implements ApproveHandler {
private ApproveHandler nextHandler;
public final static int MAX_LEAVES_CAN_APPROVE = 10;
public void setNextHandler(ApproveHandler nextHandler) {
this.nextHandler = nextHandler;
}
public void approve(Leave leave) {
if (leave.getNumberOfDays() < MAX_LEAVES_CAN_APPROVE) {
String output = String.format(
"LeaveId: %d, Days: %d, Approver: %s",
leave.getLeaveId(),
leave.getNumberOfDays(),
"TeamLeader");
System.out.println(output);
} else {
if (nextHandler != null) {
nextHandler.approve(leave);
}
}
}
}
================================================
FILE: patterns/behavior/command/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Command</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/CloseFileCommand.java
================================================
package io.spring2go.corespring.command;
// Concrete Command
public class CloseFileCommand implements Command {
private FileSystemReceiver fileSystem;
public CloseFileCommand(FileSystemReceiver fs) {
this.fileSystem = fs;
}
@Override
public void execute() {
this.fileSystem.closeFile();
}
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/Command.java
================================================
package io.spring2go.corespring.command;
// Command interface
public interface Command {
void execute();
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileInvoker.java
================================================
package io.spring2go.corespring.command;
// Invoker
public class FileInvoker {
private Command command;
public FileInvoker(Command c) {
this.command = c;
}
public void execute() {
this.command.execute();
}
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemClient.java
================================================
package io.spring2go.corespring.command;
// Client
public class FileSystemClient {
public static void main(String[] args) {
// creating the receiver object
FileSystemReceiver fs = FileSystemReceiverUtil.getUnderlyingFileSystem();
// creating command and associating with receiver
OpenFileCommand openFileCommand = new OpenFileCommand(fs);
// creating invoker and associating with Command
FileInvoker file = new FileInvoker(openFileCommand);
// perform action on invoker object
file.execute();
WriteFileCommand writeFileCommand = new WriteFileCommand(fs);
file = new FileInvoker(writeFileCommand);
file.execute();
CloseFileCommand closeFileCommand = new CloseFileCommand(fs);
file = new FileInvoker(closeFileCommand);
file.execute();
}
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemReceiver.java
================================================
package io.spring2go.corespring.command;
// Receiver Interface
public interface FileSystemReceiver {
void openFile();
void writeFile();
void closeFile();
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemReceiverUtil.java
================================================
package io.spring2go.corespring.command;
public class FileSystemReceiverUtil {
public static FileSystemReceiver getUnderlyingFileSystem() {
String osName = System.getProperty("os.name");
System.out.println("Underlying OS is : " + osName);
if (osName.contains("Windows")) {
return new WindowsFileSystemReceiver();
} else {
return new UnixFileSystemReceiver();
}
}
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/OpenFileCommand.java
================================================
package io.spring2go.corespring.command;
// Concrete Command
public class OpenFileCommand implements Command {
private FileSystemReceiver fileSystem;
public OpenFileCommand(FileSystemReceiver fs) {
this.fileSystem = fs;
}
@Override
public void execute() {
// open command is forwarding request to openFile method
this.fileSystem.openFile();
}
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/UnixFileSystemReceiver.java
================================================
package io.spring2go.corespring.command;
// Receiver
public class UnixFileSystemReceiver implements FileSystemReceiver {
@Override
public void openFile() {
System.out.println("Opening file in unix OS");
}
@Override
public void writeFile() {
System.out.println("Writing file in unix OS");
}
@Override
public void closeFile() {
System.out.println("Closing file in unix OS");
}
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/WindowsFileSystemReceiver.java
================================================
package io.spring2go.corespring.command;
// Receiver
public class WindowsFileSystemReceiver implements FileSystemReceiver {
@Override
public void openFile() {
System.out.println("Opening file in Windows OS");
}
@Override
public void writeFile() {
System.out.println("Writing file in Windows OS");
}
@Override
public void closeFile() {
System.out.println("Closing file in Windows OS");
}
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/WriteFileCommand.java
================================================
package io.spring2go.corespring.command;
// Concrete Command
public class WriteFileCommand implements Command {
private FileSystemReceiver fileSystem;
public WriteFileCommand(FileSystemReceiver fs) {
this.fileSystem = fs;
}
@Override
public void execute() {
this.fileSystem.writeFile();
}
}
================================================
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/uml.ucls
================================================
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.2.2" icons="true" always-add-relationships="false" generalizations="true" realizations="true"
associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<interface id="1" language="java" name="io.spring2go.corespring.command.FileSystemReceiver" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/FileSystemReceiver.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="867" y="271"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="2" language="java" name="io.spring2go.corespring.command.WindowsFileSystemReceiver" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/WindowsFileSystemReceiver.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="1167" y="382"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="io.spring2go.corespring.command.UnixFileSystemReceiver" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/UnixFileSystemReceiver.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="1156" y="131"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<interface id="4" language="java" name="io.spring2go.corespring.command.Command" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/Command.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="144" y="270"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="5" language="java" name="io.spring2go.corespring.command.WriteFileCommand" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/WriteFileCommand.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="491" y="90"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="io.spring2go.corespring.command.CloseFileCommand" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/CloseFileCommand.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="495" y="273"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="io.spring2go.corespring.command.OpenFileCommand" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/OpenFileCommand.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="495" y="479"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="8" language="java" name="io.spring2go.corespring.command.FileSystemClient" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/FileSystemClient.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="477" y="681"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="9" language="java" name="io.spring2go.corespring.command.FileInvoker" project="Command"
file="/Command/src/main/java/io/spring2go/corespring/command/FileInvoker.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="179" y="583"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<realization id="10">
<end type="SOURCE" refId="7"/>
<end type="TARGET" refId="4"/>
</realization>
<realization id="11">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="1"/>
</realization>
<realization id="12">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="4"/>
</realization>
<association id="13">
<end type="SOURCE" refId="6" navigable="false">
<attribute id="14" name="fileSystem"/>
<multiplicity id="15" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<realization id="16">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="4"/>
</realization>
<association id="17">
<end type="SOURCE" refId="5" navigable="false">
<attribute id="18" name="fileSystem"/>
<multiplicity id="19" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="20">
<end type="SOURCE" refId="9" navigable="false">
<attribute id="21" name="command"/>
<multiplicity id="22" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="4" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="23">
<end type="SOURCE" refId="7" navigable="false">
<attribute id="24" name="fileSystem"/>
<multiplicity id="25" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<realization id="26">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="1"/>
</realization>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>
================================================
FILE: patterns/behavior/interpreter/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Interpreter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/App.java
================================================
package io.spring2go.corespring.interpreter;
import java.util.Stack;
// Interpreter
public class App {
/**
* Expression can be evaluated using prefix, infix or postfix notations
* This sample uses postfix, where operator comes after the operands.
*/
public static void main(String[] args) {
String tokenString = "4 3 2 - 1 + *"; // (3 - 2 + 1) * 4
Stack<Expression> stack = new Stack<>();
String[] tokenList = tokenString.split(" ");
for(String s : tokenList) {
if (isOperator(s)) {
Expression rightExpression = stack.pop();
Expression leftExpression = stack.pop();
Expression operator =
getOperatorInstance(s, leftExpression, rightExpression);
int result = operator.interpret();
NumberExpression resultExpression = new NumberExpression(result);
stack.push(resultExpression);
} else {
Expression i = new NumberExpression(s);
stack.push(i);
}
}
System.out.println("result: " + stack.pop().interpret());
}
public static boolean isOperator(String s) {
return s.equals("+") || s.equals("-") || s.equals("*");
}
// Get expression for string
public static Expression getOperatorInstance(
String s, Expression left, Expression right) {
switch (s) {
case "+":
return new PlusExpression(left, right);
case "-":
return new MinusExpression(left, right);
case "*":
return new MultiplyExpression(left, right);
default:
return new MultiplyExpression(left, right);
}
}
}
================================================
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/Expression.java
================================================
package io.spring2go.corespring.interpreter;
// Expression
public abstract class Expression {
public abstract int interpret();
@Override
public abstract String toString();
}
================================================
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/MinusExpression.java
================================================
package io.spring2go.corespring.interpreter;
// MinusExpression
public class MinusExpression extends Expression {
private Expression leftExpression;
private Expression rightExpression;
public MinusExpression(
Expression leftExpression,
Expression rightExpression) {
this.leftExpression = leftExpression;
this.rightExpression = rightExpression;
}
@Override
public int interpret() {
return leftExpression.interpret() - rightExpression.interpret();
}
@Override
public String toString() {
return "-";
}
}
================================================
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/MultiplyExpression.java
================================================
package io.spring2go.corespring.interpreter;
// MultiplyExpression
public class MultiplyExpression extends Expression {
private Expression leftExpression;
private Expression rightExpression;
public MultiplyExpression(
Expression leftExpression,
Expression rightExpression) {
this.leftExpression = leftExpression;
this.rightExpression = rightExpression;
}
@Override
public int interpret() {
return leftExpression.interpret() * rightExpression.interpret();
}
@Override
public String toString() {
return "*";
}
}
================================================
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/NumberExpression.java
================================================
package io.spring2go.corespring.interpreter;
// NumberExpression
public class NumberExpression extends Expression {
private int number;
public NumberExpression(int number) {
this.number = number;
}
public NumberExpression(String s) {
this.number = Integer.parseInt(s);
}
@Override
public int interpret() {
return number;
}
@Override
public String toString() {
return "number";
}
}
================================================
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/PlusExpression.java
================================================
package io.spring2go.corespring.interpreter;
// PlusExpression
public class PlusExpression extends Expression {
private Expression leftExpression;
private Expression rightExpression;
public PlusExpression(
Expression leftExpression,
Expression rightExpression) {
this.leftExpression = leftExpression;
this.rightExpression = rightExpression;
}
@Override
public int interpret() {
return leftExpression.interpret() + rightExpression.interpret();
}
@Override
public String toString() {
return "+";
}
}
================================================
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/uml.ucls
================================================
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.2.2" icons="true" always-add-relationships="false" generalizations="true" realizations="true"
associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<class id="1" language="java" name="io.spring2go.corespring.interpreter.Expression" project="Interpreter"
file="/Interpreter/src/main/java/io/spring2go/corespring/interpreter/Expression.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="472" y="185"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="io.spring2go.corespring.interpreter.MinusExpression" project="Interpreter"
file="/Interpreter/src/main/java/io/spring2go/corespring/interpreter/MinusExpression.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="172" y="496"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="io.spring2go.corespring.interpreter.MultiplyExpression" project="Interpreter"
file="/Interpreter/src/main/java/io/spring2go/corespring/interpreter/MultiplyExpression.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="482" y="495"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="io.spring2go.corespring.interpreter.NumberExpression" project="Interpreter"
file="/Interpreter/src/main/java/io/spring2go/corespring/interpreter/NumberExpression.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="109" y="186"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="io.spring2go.corespring.interpreter.PlusExpression" project="Interpreter"
file="/Interpreter/src/main/java/io/spring2go/corespring/interpreter/PlusExpression.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="807" y="495"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<association id="6">
<end type="SOURCE" refId="5" navigable="false">
<attribute id="7" name="rightExpression"/>
<multiplicity id="8" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="9">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="1"/>
</generalization>
<association id="10">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="11" name="rightExpression"/>
<multiplicity id="12" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="13">
<end type="SOURCE" refId="2" navigable="false">
<attribute id="14" name="rightExpression"/>
<multiplicity id="15" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="16">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="1"/>
</generalization>
<association id="17">
<end type="SOURCE" refId="2" navigable="false">
<attribute id="18" name="leftExpression"/>
<multiplicity id="19" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="20">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="1"/>
</generalization>
<association id="21">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="22" name="leftExpression"/>
<multiplicity id="23" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="24">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="1"/>
</generalization>
<association id="25">
<end type="SOURCE" refId="5" navigable="false">
<attribute id="26" name="leftExpression"/>
<multiplicity id="27" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>
================================================
FILE: patterns/behavior/iterator/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Iterator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/App.java
================================================
package io.spring2go.corespring.iterator;
// Client App
public class App {
public static void main(String[] args) {
ChannelCollection channels = populateChannels();
ChannelIterator baseIterator = channels.iterator(ChannelTypeEnum.ALL);
while (baseIterator.hasNext()) {
Channel c = baseIterator.next();
System.out.println(c.toString());
}
System.out.println("******");
// Channel Type Iterator
ChannelIterator englishIterator = channels.iterator(ChannelTypeEnum.ENGLISH);
while (englishIterator.hasNext()) {
Channel c = englishIterator.next();
System.out.println(c.toString());
}
}
private static ChannelCollection populateChannels() {
ChannelCollection channels = new ChannelCollectionImpl();
channels.addChannel(new Channel(98.5, ChannelTypeEnum.ENGLISH));
channels.addChannel(new Channel(99.5, ChannelTypeEnum.CHINESE));
channels.addChannel(new Channel(100.5, ChannelTypeEnum.FRENCH));
channels.addChannel(new Channel(101.5, ChannelTypeEnum.ENGLISH));
channels.addChannel(new Channel(102.5, ChannelTypeEnum.CHINESE));
channels.addChannel(new Channel(103.5, ChannelTypeEnum.FRENCH));
channels.addChannel(new Channel(104.5, ChannelTypeEnum.ENGLISH));
channels.addChannel(new Channel(105.5, ChannelTypeEnum.CHINESE));
channels.addChannel(new Channel(106.5, ChannelTypeEnum.FRENCH));
return channels;
}
}
================================================
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/Channel.java
================================================
package io.spring2go.corespring.iterator;
public class Channel {
private double frequency;
private ChannelTypeEnum type;
public Channel(double freq, ChannelTypeEnum type) {
this.frequency = freq;
this.type = type;
}
public double getFrequency() {
return frequency;
}
public ChannelTypeEnum getType() {
return type;
}
@Override
public String toString() {
return "Frequency = " + this.frequency + ", Type = " + this.type;
}
}
================================================
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollection.java
================================================
package io.spring2go.corespring.iterator;
// Aggregate
public interface ChannelCollection {
public void addChannel(Channel c);
public void removeChannel(Channel c);
public ChannelIterator iterator(ChannelTypeEnum type);
}
================================================
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollectionImpl.java
================================================
package io.spring2go.corespring.iterator;
import java.util.ArrayList;
import java.util.List;
// ConcreteAggregate
public class ChannelCollectionImpl implements ChannelCollection {
private List<Channel> channelList;
public ChannelCollectionImpl() {
channelList = new ArrayList<>();
}
@Override
public void addChannel(Channel c) {
this.channelList.add(c);
}
@Override
public void removeChannel(Channel c) {
this.channelList.remove(c);
}
@Override
public ChannelIterator iterator(ChannelTypeEnum type) {
return new ChannelIteratorImpl(type, this.channelList);
}
// ConcreteIterator
private class ChannelIteratorImpl implements ChannelIterator {
private ChannelTypeEnum type;
private List<Channel> channels;
private int position;
public ChannelIteratorImpl(ChannelTypeEnum type,
List<Channel> channelList) {
this.type = type;
this.channels = channelList;
}
@Override
public boolean hasNext() {
while (position < channels.size()) {
Channel c = channels.get(position);
if (c.getType().equals(type) ||
type.equals(ChannelTypeEnum.ALL)) {
return true;
} else {
position++;
}
}
return false;
}
@Override
public Channel next() {
Channel c = channels.get(position);
position++;
return c;
}
}
}
================================================
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelIterator.java
================================================
package io.spring2go.corespring.iterator;
// Iterator
public interface ChannelIterator {
public boolean hasNext();
public Channel next();
}
================================================
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelTypeEnum.java
================================================
package io.spring2go.corespring.iterator;
public enum ChannelTypeEnum {
ENGLISH, CHINESE, FRENCH, ALL;
}
================================================
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/uml.ucls
================================================
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.2.2" icons="true" always-add-relationships="false" generalizations="true" realizations="true"
associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<interface id="1" language="java" name="io.spring2go.corespring.iterator.ChannelIterator" project="Iterator"
file="/Iterator/src/main/java/io/spring2go/corespring/iterator/ChannelIterator.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="1018" y="68"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<interface id="2" language="java" name="io.spring2go.corespring.iterator.ChannelCollection" project="Iterator"
file="/Iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollection.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="456" y="76"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<enumeration id="3" language="java" name="io.spring2go.corespring.iterator.ChannelTypeEnum" project="Iterator"
file="/Iterator/src/main/java/io/spring2go/corespring/iterator/ChannelTypeEnum.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="1051" y="549"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</enumeration>
<class id="4" language="java" name="io.spring2go.corespring.iterator.Channel" project="Iterator"
file="/Iterator/src/main/java/io/spring2go/corespring/iterator/Channel.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="739" y="548"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="io.spring2go.corespring.iterator.ChannelCollectionImpl.ChannelIteratorImpl"
project="Iterator" file="/Iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollectionImpl.java"
binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="1017" y="304"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="io.spring2go.corespring.iterator.ChannelCollectionImpl" project="Iterator"
file="/Iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollectionImpl.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="455" y="307"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="io.spring2go.corespring.iterator.App" project="Iterator"
file="/Iterator/src/main/java/io/spring2go/corespring/iterator/App.java" binary="false" corner="BOTTOM_RIGHT">
<position height="124" width="245" x="154" y="507"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<association id="8">
<end type="SOURCE" refId="6" navigable="false">
<attribute id="9" name="channelList"/>
<multiplicity id="10" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="4" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<association id="11">
<end type="SOURCE" refId="4" navigable="false">
<attribute id="12" name="type"/>
<multiplicity id="13" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="3" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<realization id="14">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="1"/>
</realization>
<realization id="15">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="2"/>
</realization>
<association id="16">
<end type="SOURCE" refId="5" navigable="false">
<attribute id="17" name="channels"/>
<multiplicity id="18" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="4" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<nesting id="19">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="5"/>
</nesting>
<association id="20">
<end type="SOURCE" refId="5" navigable="false">
<attribute id="21" name="type"/>
<multiplicity id="22" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="3" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>
================================================
FILE: patterns/behavior/observer/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.patterns</groupId>
<artifactId>Observer</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Follower.java
================================================
package io.spring2go.patterns.observer;
public class Follower implements Observer {
private String followerName;
public Follower(String followerName) {
this.followerName = followerName;
}
@Override
public void update(String oaName, String article) {
System.out.println(followerName + " has received "
+ oaName + "'s article :: " + article );
}
@Override
public String toString() {
return followerName;
}
}
================================================
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Observer.java
================================================
package io.spring2go.patterns.observer;
// The Observers are notified when the Subject changes
public interface Observer {
public void update(String name, String s);
}
================================================
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/ObserverPatternMain.java
================================================
package io.spring2go.patterns.observer;
public class ObserverPatternMain {
public static void main(String[] args) {
OfficialAccount bobo = new OfficialAccount("bobo");
OfficialAccount infoq = new OfficialAccount("infoq");
Follower mark = new Follower("Mark");
Follower eric = new Follower("Eric");
Follower jack = new Follower("Jack");
Follower frank = new Follower("Frank");
Follower daniel = new Follower("Daniel");
Follower alice = new Follower("Alice");
bobo.register(mark);
bobo.register(eric);
bobo.register(jack);
infoq.register(frank);
infoq.register(daniel);
infoq.register(alice);
bobo.pushArticle("observer design pattern video course");
infoq.pushArticle("spring 5.0 is out");
bobo.unregister(eric);
bobo.pushArticle("core java course is released");
}
}
================================================
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/OfficialAccount.java
================================================
package io.spring2go.patterns.observer;
import java.util.ArrayList;
import java.util.List;
public class OfficialAccount implements Subject {
private String oaName;
private List<Observer> followers;
public OfficialAccount(String oaName) {
this.oaName = oaName;
followers = new ArrayList<Observer>();
}
@Override
public void register(Observer o) {
followers.add(o);
System.out.println(o + " has started following " + oaName);
}
@Override
public void unregister(Observer o) {
followers.remove(o);
System.out.println(o + " has stopped following " + oaName);
}
@Override
public void notifyAllObservers(String article) {
for(Observer follower : followers) {
follower.update(oaName, article);
}
System.out.println();
}
public void pushArticle(String article) {
System.out.println("\n" + oaName + " has pushed :: " + article);
notifyAllObservers(article);
}
}
================================================
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Subject.java
================================================
package io.spring2go.patterns.observer;
// interface for adding, deleting
// and updating all observers
public interface Subject {
public void register(Observer o);
public void unregister(Observer o);
public void notifyAllObservers(String s);
}
================================================
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/uml.ucls
================================================
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.2.2" icons="true" always-add-relationships="false" generalizations="true" realizations="true"
associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<interface id="1" language="java" name="io.spring2go.patterns.observer.Observer" project="Observer"
file="/Observer/src/main/java/io/spring2go/patterns/observer/Observer.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="557" y="193"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="2" language="java" name="io.spring2go.patterns.observer.Follower" project="Observer"
file="/Observer/src/main/java/io/spring2go/patterns/observer/Follower.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="557" y="463"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="io.spring2go.patterns.observer.OfficialAccount" project="Observer"
file="/Observer/src/main/java/io/spring2go/patterns/observer/OfficialAccount.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="178" width="198" x="840" y="364"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<interface id="4" language="java" name="io.spring2go.patterns.observer.Subject" project="Observer"
file="/Observer/src/main/java/io/spring2go/patterns/observer/Subject.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="940" y="205"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<association id="5">
<end type="SOURCE" refId="3" navigable="false">
<attribute id="6" name="followers"/>
<multiplicity id="7" minimum="0" maximum="2147483647"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<realization id="8">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="4"/>
</realization>
<realization id="9">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="1"/>
</realization>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>
================================================
FILE: patterns/behavior/strategy/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Strategy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/HeapSortStrategy.java
================================================
package io.spring2go.corespring.strategy;
import java.util.List;
public class HeapSortStrategy implements SortingStrategy {
@Override
public void sort(List<Integer> list) {
System.out.println("Sorting using heap sort");
}
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/MergeSortStrategy.java
================================================
package io.spring2go.corespring.strategy;
import java.util.List;
// ConcreteStrategy
public class MergeSortStrategy implements SortingStrategy {
@Override
public void sort(List<Integer> list) {
System.out.println("Sorting List using merge sort");
}
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/QuickSortStrategy.java
================================================
package io.spring2go.corespring.strategy;
import java.util.List;
// ConcreteStrategy
public class QuickSortStrategy implements SortingStrategy {
@Override
public void sort(List<Integer> list) {
System.out.println("Sorting List using quick sort");
}
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingMainV1.java
================================================
package io.spring2go.corespring.strategy;
import java.util.Arrays;
import java.util.List;
public class SortingMainV1 {
public static void main(String[] args) {
List list = Arrays.asList(new Integer[] { 44, 5, 3, 5, 5, 64, 3 });
SortingManagerV1 sm = new SortingManagerV1(list);
// Sorting using merge sort
sm.sortListBasedOnType(SortingType.MERGE_SORT);
System.out.println();
// Sorting using quick sort
sm.sortListBasedOnType(SortingType.QUICK_SORT);
System.out.println();
// Sorting using heap sort
sm.sortListBasedOnType(SortingType.HEAP_SORT);
}
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingMainV2.java
================================================
package io.spring2go.corespring.strategy;
import java.util.Arrays;
import java.util.List;
public class SortingMainV2 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(new Integer[] { 44, 5, 3, 5, 5, 64, 3 });
MergeSortStrategy mergeSortStrategy = new MergeSortStrategy();
SortingManagerV2 sm = new SortingManagerV2(list, mergeSortStrategy);
sm.sortList();
System.out.println();
QuickSortStrategy quickSort = new QuickSortStrategy();
sm.setSortingStrategy(quickSort);
sm.sortList();
System.out.println();
HeapSortStrategy heapSort = new HeapSortStrategy();
sm.setSortingStrategy(heapSort);
sm.sortList();
}
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingManagerV1.java
================================================
package io.spring2go.corespring.strategy;
import java.util.List;
public class SortingManagerV1 {
List list;
public SortingManagerV1(List list) {
this.list = list;
}
public void sortListBasedOnType(SortingType sortingType) {
System.out.println("===================================");
System.out.println("Sorting List based on Type");
System.out.println("===================================");
if (SortingType.MERGE_SORT == sortingType) {
sortListUsingMergeSort();
} else if (SortingType.QUICK_SORT == sortingType) {
sortListUsingQuickSort();
} else if (SortingType.HEAP_SORT == sortingType) {
sortListUsingHeapSort();
}
}
private void sortListUsingMergeSort() {
System.out.println("Sorting List using merge sort");
}
private void sortListUsingQuickSort() {
System.out.println("Sorting List using quick sort");
}
private void sortListUsingHeapSort() {
System.out.println("Sorting List using heap sort");
}
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingManagerV2.java
================================================
package io.spring2go.corespring.strategy;
import java.util.List;
public class SortingManagerV2 {
SortingStrategy sortingStrategy;
List<Integer> list;
public SortingManagerV2(List<Integer> list, SortingStrategy sortingStrategy) {
super();
this.list = list;
this.sortingStrategy = sortingStrategy;
}
public void sortList() {
System.out.println("===================================");
System.out.println("Sorting List based on Type");
System.out.println("===================================");
sortingStrategy.sort(list);
}
public SortingStrategy getSortingStrategy() {
return sortingStrategy;
}
public void setSortingStrategy(SortingStrategy sortingStrategy) {
this.sortingStrategy = sortingStrategy;
}
public List<Integer> getList() {
return list;
}
public void setList(List<Integer> list) {
this.list = list;
}
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingStrategy.java
================================================
package io.spring2go.corespring.strategy;
import java.util.List;
// Strategy
public interface SortingStrategy {
void sort(List<Integer> list);
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingType.java
================================================
package io.spring2go.corespring.strategy;
public enum SortingType {
MERGE_SORT, QUICK_SORT, HEAP_SORT;
}
================================================
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/uml.ucls
================================================
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.2.2" icons="true" always-add-relationships="false" generalizations="true" realizations="true"
associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<interface id="1" language="java" name="io.spring2go.corespring.strategy.SortingStrategy" project="Strategy"
file="/Strategy/src/main/java/io/spring2go/corespring/strategy/SortingStrategy.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="721" y="244"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="2" language="java" name="io.spring2go.corespring.strategy.MergeSortStrategy" project="Strategy"
file="/Strategy/src/main/java/io/spring2go/corespring/strategy/MergeSortStrategy.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="106" width="187" x="388" y="398"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="io.spring2go.corespring.strategy.QuickSortStrategy" project="Strategy"
file="/Strategy/src/main/java/io/spring2go/corespring/strategy/QuickSortStrategy.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="722" y="452"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="io.spring2go.corespring.strategy.HeapSortStrategy" project="Strategy"
file="/Strategy/src/main/java/io/spring2go/corespring/strategy/HeapSortStrategy.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="978" y="453"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="io.spring2go.corespring.strategy.SortingManagerV2" project="Strategy"
file="/Strategy/src/main/java/io/spring2go/corespring/strategy/SortingManagerV2.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="352" y="244"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="io.spring2go.corespring.strategy.SortingMainV2" project="Strategy"
file="/Strategy/src/main/java/io/spring2go/corespring/strategy/SortingMainV2.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="40" y="247"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<realization id="7">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="1"/>
</realization>
<realization id="8">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="1"/>
</realization>
<realization id="9">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="1"/>
</realization>
<association id="10">
<end type="SOURCE" refId="5" navigable="false">
<attribute id="11" name="sortingStrategy"/>
<multiplicity id="12" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>
================================================
FILE: patterns/behavior/template/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.patterns.template</groupId>
<artifactId>Template</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/behavior/template/src/main/java/io/spring2go/patterns/template/CSVDataParser.java
================================================
package io.spring2go.patterns.template;
public class CSVDataParser extends DataParser {
@Override
void readData() {
System.out.println("Reading data from csv file");
}
@Override
void processData() {
System.out.println("Looping through loaded csv file");
}
}
================================================
FILE: patterns/behavior/template/src/main/java/io/spring2go/patterns/template/DataParser.java
================================================
package io.spring2go.patterns.template;
abstract class DataParser {
// generic data processing flow
public final void process() {
readData();
processData();
writeData();
}
// implemented by subclass
abstract void readData();
abstract void processData();
// same for all subclass
public void writeData() {
System.out.println("Ouput generated, writing to CSV");
}
}
================================================
FILE: patterns/behavior/template/src/main/java/io/spring2go/patterns/template/DatabaseDataParser.java
================================================
package io.spring2go.patterns.template;
public class DatabaseDataParser extends DataParser {
@Override
void readData() {
System.out.println("Reading data from database");
}
@Override
void processData() {
System.out.println("Looping through records in DB");
}
}
================================================
FILE: patterns/behavior/template/src/main/java/io/spring2go/patterns/template/TemplateMethodMain.java
================================================
package io.spring2go.patterns.template;
public class TemplateMethodMain {
public static void main(String[] args) {
CSVDataParser csvDataParser = new CSVDataParser();
csvDataParser.process();
System.out.println("**********************");
DatabaseDataParser databaseDataParser = new DatabaseDataParser();
databaseDataParser.process();
}
}
================================================
FILE: patterns/creation/abstract-factory/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>AbstractFactory</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/AbstractFactoryMain.java
================================================
package io.spring2go.corespring.abstractfactory;
public class AbstractFactoryMain {
public static void main(String[] args) {
// 国产
IElectricalFactory electricalFactory = new ChineseElectricalFactory();
IFan fan = electricalFactory.createFan();
fan.swithOn();
// 美产
electricalFactory = new USElectricalFactory();
ITubeLight tubeLight = electricalFactory.createTubeLight();
tubeLight.swithOn();
tubeLight.tuneLight();
}
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseElectricalFactory.java
================================================
package io.spring2go.corespring.abstractfactory;
public class ChineseElectricalFactory implements IElectricalFactory {
public IFan createFan() {
return new ChineseFan();
}
public ITubeLight createTubeLight() {
return new ChineseTubeLight();
}
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseFan.java
================================================
package io.spring2go.corespring.abstractfactory;
public class ChineseFan implements IFan {
public void swithOn() {
System.out.println("The ChineseFan is swithed on ...");
}
public void switchOff() {
System.out.println("The ChineseFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseTubeLight.java
================================================
package io.spring2go.corespring.abstractfactory;
public class ChineseTubeLight implements ITubeLight {
public void swithOn() {
System.out.println("The ChineseTubeLight is swithed on ...");
}
public void switchOff() {
System.out.println("The ChineseTubeLight is swithed off ...");
}
public void tuneLight() {
System.out.println("The ChineseTubeLight is tuned ...");
}
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/IElectricalFactory.java
================================================
package io.spring2go.corespring.abstractfactory;
// 电器工厂接口
public interface IElectricalFactory {
IFan createFan();
ITubeLight createTubeLight();
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/IFan.java
================================================
package io.spring2go.corespring.abstractfactory;
// 电扇接口
public interface IFan {
public void swithOn();
public void switchOff();
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ITubeLight.java
================================================
package io.spring2go.corespring.abstractfactory;
// 日光灯接口
public interface ITubeLight {
public void swithOn();
public void switchOff();
public void tuneLight();
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USElectricalFactory.java
================================================
package io.spring2go.corespring.abstractfactory;
public class USElectricalFactory implements IElectricalFactory {
public IFan createFan() {
return new USFan();
}
public ITubeLight createTubeLight() {
return new USTubeLight();
}
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USFan.java
================================================
package io.spring2go.corespring.abstractfactory;
public class USFan implements IFan {
public void swithOn() {
System.out.println("The USFan is swithed on ...");
}
public void switchOff() {
System.out.println("The USFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USTubeLight.java
================================================
package io.spring2go.corespring.abstractfactory;
public class USTubeLight implements ITubeLight {
public void swithOn() {
System.out.println("The USTubeLight is swithed on ...");
}
public void switchOff() {
System.out.println("The USTubeLight is swithed off ...");
}
public void tuneLight() {
System.out.println("The USTubeLight is tuned ...");
}
}
================================================
FILE: patterns/creation/builder/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Builder</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/AndroidPhoneBuilder.java
================================================
package io.spring2go.corespring.classicbuilder;
// 安卓手机具体构建者"ConcreteBuilder"
public class AndroidPhoneBuilder implements IMobilePhoneBuilder {
private MobilePhone phone;
public AndroidPhoneBuilder() {
this.phone = new MobilePhone("Android Phone");
}
@Override
public void buildScreen() {
phone.setPhoneScreen(ScreenType.SCREENTYPE_TOUCH_RESISTIVE);
}
@Override
public void buildBattery() {
phone.setPhoneBattery(Battery.MAH_1500);
}
@Override
public void buildOS() {
phone.setPhoneOS(OperatingSystem.ANDROID);
}
@Override
public void buildStylus() {
phone.setPhoneStylus(Stylus.YES);
}
// 获得最终构建出来的产品
@Override
public MobilePhone getPhone() {
return this.phone;
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Battery.java
================================================
package io.spring2go.corespring.classicbuilder;
// 电池容量
public enum Battery {
MAH_1000,
MAH_1500,
MAH_2000
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/ClassicBuilderMain.java
================================================
package io.spring2go.corespring.classicbuilder;
// 客户程序
public class ClassicBuilderMain {
public static void main(String[] args) {
// 先创建导演Director
Manufacturer manufacturer = new Manufacturer();
// 先准备Builder接口
IMobilePhoneBuilder phoneBuilder = null;
// 制造一部安卓手机
phoneBuilder = new AndroidPhoneBuilder();
manufacturer.construct(phoneBuilder);
String output = String.format("A new Phone built:\n\n%s", phoneBuilder.getPhone().toString());
System.out.println(output);
// 制造一部Windows手机
phoneBuilder = new WindowsPhoneBuilder();
manufacturer.construct(phoneBuilder);
output = String.format("A new Phone built:\n\n%s", phoneBuilder.getPhone().toString());
System.out.println(output);
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/IMobilePhoneBuilder.java
================================================
package io.spring2go.corespring.classicbuilder;
// 这个是构建者"Builder"接口
public interface IMobilePhoneBuilder {
void buildScreen();
void buildBattery();
void buildOS();
void buildStylus();
MobilePhone getPhone();
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Manufacturer.java
================================================
package io.spring2go.corespring.classicbuilder;
// 这个是导演"Director"
public class Manufacturer {
public void construct(IMobilePhoneBuilder phoneBuilder) {
phoneBuilder.buildBattery();
phoneBuilder.buildOS();
phoneBuilder.buildScreen();
phoneBuilder.buildStylus();
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/MobilePhone.java
================================================
package io.spring2go.corespring.classicbuilder;
// 这是"Product"产品类
public class MobilePhone {
// 部件类型
private String phoneName;
private ScreenType phoneScreen;
private Battery phoneBattery;
private OperatingSystem phoneOS;
private Stylus phoneStylus;
// region 访问手机组件的getter/setter公开方法
public MobilePhone(String name) {
this.phoneName = name;
}
public String getPhoneName() {
return phoneName;
}
public ScreenType getPhoneScreen() {
return phoneScreen;
}
public void setPhoneScreen(ScreenType phoneScreen) {
this.phoneScreen = phoneScreen;
}
public Battery getPhoneBattery() {
return phoneBattery;
}
public void setPhoneBattery(Battery phoneBattery) {
this.phoneBattery = phoneBattery;
}
public OperatingSystem getPhoneOS() {
return phoneOS;
}
public void setPhoneOS(OperatingSystem phoneOS) {
this.phoneOS = phoneOS;
}
public Stylus getPhoneStylus() {
return phoneStylus;
}
public void setPhoneStylus(Stylus phoneStylus) {
this.phoneStylus = phoneStylus;
}
// endregion
@Override
public String toString() {
return String.format("Name: %s\nScreen: %s\nBattery: %s\nOS: %s\nStylus: %s\n", this.phoneName,
this.phoneScreen, this.phoneBattery, this.phoneOS, this.phoneStylus);
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/OperatingSystem.java
================================================
package io.spring2go.corespring.classicbuilder;
// 操作系统
public enum OperatingSystem {
ANDROID,
WINDOWS_MOBILE,
WINDOWS_PHONE,
SYMBIAN
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/ScreenType.java
================================================
package io.spring2go.corespring.classicbuilder;
// 屏幕类型
public enum ScreenType {
SCREENTYPE_TOUCH_CAPACITIVE, // 电容式
SCREENTYPE_TOUCH_RESISTIVE, // 电阻式
SCREENTYPE_NON_TOUCH
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Stylus.java
================================================
package io.spring2go.corespring.classicbuilder;
// 触控笔
public enum Stylus {
YES,
NO
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/WindowsPhoneBuilder.java
================================================
package io.spring2go.corespring.classicbuilder;
// Windows手机具体构建者"ConcreteBuilder"
public class WindowsPhoneBuilder implements IMobilePhoneBuilder {
private MobilePhone phone;
public WindowsPhoneBuilder() {
this.phone = new MobilePhone("Windows Phone");
}
@Override
public void buildScreen() {
phone.setPhoneScreen(ScreenType.SCREENTYPE_TOUCH_CAPACITIVE);
}
@Override
public void buildBattery() {
phone.setPhoneBattery(Battery.MAH_2000);
}
@Override
public void buildOS() {
phone.setPhoneOS(OperatingSystem.WINDOWS_PHONE);
}
@Override
public void buildStylus() {
phone.setPhoneStylus(Stylus.NO);
}
@Override
public MobilePhone getPhone() {
return this.phone;
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/javabean/JavaBeanMain.java
================================================
package io.spring2go.corespring.javabean;
public class JavaBeanMain {
// JavaBean构造对象
public static void main(String[] args) {
User user = new User();
user.setFirstName("william");
user.setLastName("yang");
user.setAge(35);
user.setPhone("18001756666");
user.setAddress("shanghai pudong");
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/javabean/User.java
================================================
package io.spring2go.corespring.javabean;
// JavaBeans模式
public class User {
//region 私有成员
private String firstName;
private String lastName;
private int age;
private String phone;
private String address;
//endregion
public User() {}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/modernbuilder/ModernBuilderMain.java
================================================
package io.spring2go.corespring.modernbuilder;
public class ModernBuilderMain {
public static void main(String[] args) {
User user1 = new User.UserBuilder("william", "Yang")
.age(35)
.phone("123456")
.address("Fake address 1234")
.build();
System.out.println(user1);
User user2 = new User.UserBuilder("Jack", "Liu")
.age(40)
.phone("5655")
//no address
.build();
System.out.println(user2);
User user3 = new User.UserBuilder("Frank", "Han")
//no age
//no phone
//no address
.build();
System.out.println(user3);
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/modernbuilder/User.java
================================================
package io.spring2go.corespring.modernbuilder;
// 流畅接口(Fluent Interface)
public class User {
// 所有字段final
private final String firstName; // 必须
private final String lastName; // 必须
private final int age; // 可选
private final String phone; // 可选
private final String address; // 可选
private User(UserBuilder builder) {
this.firstName = builder.firstName;
this.lastName = builder.lastName;
this.age = builder.age;
this.phone = builder.phone;
this.address = builder.address;
}
// 全部是getter,没有setter,保证不可变性immutability
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public String getPhone() {
return phone;
}
public String getAddress() {
return address;
}
@Override
public String toString() {
return "User: " + this.firstName + ", "
+ this.lastName + ", " + this.age + ", "
+ this.phone + ", " + this.address;
}
public static class UserBuilder {
private final String firstName;
private final String lastName;
private int age;
private String phone;
private String address;
public UserBuilder(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public UserBuilder age(int age) {
this.age = age;
return this;
}
public UserBuilder phone(String phone) {
this.phone = phone;
return this;
}
public UserBuilder address(String address) {
this.address = address;
return this;
}
// 返回最终构造的用户对象
public User build() {
User user = new User(this);
validateUserObject(user);
return user;
}
private void validateUserObject(User user) {
// 基本的验证检查
// 确保用户对象不违反系统假设
}
}
}
================================================
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/telescoping_constructor/User.java
================================================
package io.spring2go.corespring.telescoping_constructor;
// 显微镜构造函数模式
public class User {
// region 私有成员
private String firstName;
private String lastName;
private int age;
private String phone;
private String address;
// endregion
public User(String firstName, String lastName, int age, String phone) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
this.phone = phone;
}
public User(String firstName, String lastName, String phone, String address) {
this.firstName = firstName;
this.lastName = lastName;
this.phone = phone;
this.address = address;
}
public User(String firstName, String lastName, int age) {
this.firstName = firstName;
this.lastName = lastName;
this.age = age;
}
public User(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
// region public getter
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
public int getAge() {
return age;
}
public String getPhone() {
return phone;
}
public String getAddress() {
return address;
}
// endregion
}
================================================
FILE: patterns/creation/factory-method/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>FactoryMethod</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/CeilingFan.java
================================================
package io.spring2go.corespring.factorymethod;
// 吊扇
public class CeilingFan implements IFan {
@Override
public void swithOn() {
System.out.println("The CeilingFan is swithed on ...");
}
@Override
public void switchOff() {
System.out.println("The CeilingFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/CeilingFanFactory.java
================================================
package io.spring2go.corespring.factorymethod;
public class CeilingFanFactory implements IFanFactory {
@Override
public IFan createFan() {
return new CeilingFan();
}
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/ExhaustFan.java
================================================
package io.spring2go.corespring.factorymethod;
public class ExhaustFan implements IFan {
@Override
public void swithOn() {
System.out.println("The ExhaustFan is swithed on ...");
}
@Override
public void switchOff() {
System.out.println("The ExhaustFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/ExhaustFanFactory.java
================================================
package io.spring2go.corespring.factorymethod;
public class ExhaustFanFactory implements IFanFactory {
@Override
public IFan createFan() {
return new ExhaustFan();
}
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/FactoryMethodMain.java
================================================
package io.spring2go.corespring.factorymethod;
//客户端代码
public class FactoryMethodMain {
public static void main(String[] args) {
IFanFactory fanFactory = new PropellerFanFactory();
// 使用工厂方法创建一个电扇
IFan fan = fanFactory.createFan();
// 使用创建的对象
fan.swithOn();
fan.switchOff();
}
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/IFan.java
================================================
package io.spring2go.corespring.factorymethod;
public interface IFan {
public void swithOn();
public void switchOff();
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/IFanFactory.java
================================================
package io.spring2go.corespring.factorymethod;
public interface IFanFactory {
IFan createFan();
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/PropellerFan.java
================================================
package io.spring2go.corespring.factorymethod;
// 螺旋桨式通风扇
public class PropellerFan implements IFan {
@Override
public void swithOn() {
System.out.println("The PropellerFan is swithed on ...");
}
@Override
public void switchOff() {
System.out.println("The PropellerFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/PropellerFanFactory.java
================================================
package io.spring2go.corespring.factorymethod;
public class PropellerFanFactory implements IFanFactory {
@Override
public IFan createFan() {
return new PropellerFan();
}
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/TableFan.java
================================================
package io.spring2go.corespring.factorymethod;
// 台扇
public class TableFan implements IFan {
@Override
public void swithOn() {
System.out.println("The TableFan is swithed on ...");
}
@Override
public void switchOff() {
System.out.println("The TableFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/TableFanFactory.java
================================================
package io.spring2go.corespring.factorymethod;
public class TableFanFactory implements IFanFactory {
@Override
public IFan createFan() {
return new TableFan();
}
}
================================================
FILE: patterns/creation/simple-factory/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>SimpleFactory</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/nofactory/NoFactoryMain.java
================================================
package io.spring2go.corespring.nofactory;
public class NoFactoryMain {
public static void main(String[] args) {
TableFan fan = new TableFan();
fan.switchOn();
}
}
class TableFan {
public void switchOn() {
System.out.println("The TableFan is switched on ...");
}
}
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/CeilingFan.java
================================================
package io.spring2go.corespring.simplefactory;
public class CeilingFan implements IFan {
@Override
public void swithOn() {
System.out.println("The CeilingFan is swithed on ...");
}
@Override
public void switchOff() {
System.out.println("The CeilingFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/ExhaustFan.java
================================================
package io.spring2go.corespring.simplefactory;
public class ExhaustFan implements IFan {
@Override
public void swithOn() {
System.out.println("The ExhaustFan is swithed on ...");
}
@Override
public void switchOff() {
System.out.println("The ExhaustFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/FanFactory.java
================================================
package io.spring2go.corespring.simplefactory;
public class FanFactory implements IFanFactory {
@Override
public IFan createFan(FanType type) {
switch (type) {
case TableFan:
return new TableFan();
case CeilingFan:
return new CeilingFan();
case ExhaustFan:
return new ExhaustFan();
default:
return new TableFan();
}
}
}
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/FanType.java
================================================
package io.spring2go.corespring.simplefactory;
public enum FanType {
TableFan, //台扇
CeilingFan, //吊扇
ExhaustFan // 排风扇
}
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/IFan.java
================================================
package io.spring2go.corespring.simplefactory;
public interface IFan {
public void swithOn();
public void switchOff();
}
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/IFanFactory.java
================================================
package io.spring2go.corespring.simplefactory;
public interface IFanFactory {
IFan createFan(FanType type);
}
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/SimpleFactoryMain.java
================================================
package io.spring2go.corespring.simplefactory;
// 客户端代码
public class SimpleFactoryMain {
public static void main(String[] args) {
IFanFactory simpleFactory = new FanFactory();
// 使用简单工厂创建一个电扇
IFan fan = simpleFactory.createFan(FanType.TableFan);
fan.swithOn();
fan.switchOff();
}
}
================================================
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/TableFan.java
================================================
package io.spring2go.corespring.simplefactory;
public class TableFan implements IFan {
@Override
public void swithOn() {
System.out.println("The TableFan is swithed on ...");
}
@Override
public void switchOff() {
System.out.println("The TableFan is swithed off ...");
}
}
================================================
FILE: patterns/creation/singleton/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Singleton</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v3/BillPughSingleton.java
================================================
package io.spring2go.corespring.singleton.v3;
// 比尔.普夫单例
public class BillPughSingleton {
// 私有构造函数,避免被客户端代码使用
private BillPughSingleton() {}
private static class LazyHolder {
private static final BillPughSingleton INSTANCE = new BillPughSingleton();
}
public static BillPughSingleton getInstance() {
return LazyHolder.INSTANCE;
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v4/EnumSingleton.java
================================================
package io.spring2go.corespring.singleton.v4;
// 枚举单例
public enum EnumSingleton {
INSTANCE;
// 添加单例方法
public void method() {
System.out.println("Singleton method called...");
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v4/TestEnumSingleton.java
================================================
package io.spring2go.corespring.singleton.v4;
public class TestEnumSingleton {
public static void main(String[] args) {
EnumSingleton.INSTANCE.method();
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_deserialization/DemoSingleton.java
================================================
package io.spring2go.corespring.singleton_deserialization;
import java.io.Serializable;
public class DemoSingleton implements Serializable {
private static final long serialVersionUID = -7604766932017737115L;
private static class LazyHolder{
private static final DemoSingleton INSTANCE = new DemoSingleton();
}
public static DemoSingleton getInstance(){
return LazyHolder.INSTANCE;
}
// 确保反序列化单例
protected Object readResolve() {
return getInstance();
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_deserialization/SerializationTest.java
================================================
package io.spring2go.corespring.singleton_deserialization;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectInputStream;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
public class SerializationTest {
public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
DemoSingleton instanceOne = DemoSingleton.getInstance();
ObjectOutput out = new ObjectOutputStream(new FileOutputStream(
"filename.ser"));
out.writeObject(instanceOne);
out.close();
// 从文件反序列化到对象
ObjectInput in = new ObjectInputStream(new FileInputStream(
"filename.ser"));
DemoSingleton instanceTwo = (DemoSingleton) in.readObject();
in.close();
System.out.println("instanceOne hashCode="+instanceOne.hashCode());
System.out.println("instanceTwo hashCode="+instanceTwo.hashCode());
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_reflection/ReflectionSingleton.java
================================================
package io.spring2go.corespring.singleton_reflection;
public class ReflectionSingleton {
private static ReflectionSingleton INSTANCE;
private ReflectionSingleton() {
//throw new InstantiationError("不能通过反射创建单例");
}
public static synchronized ReflectionSingleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new ReflectionSingleton();
}
return INSTANCE;
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_reflection/ReflectionTest.java
================================================
package io.spring2go.corespring.singleton_reflection;
import java.lang.reflect.Constructor;
public class ReflectionTest {
public static void main(String[] args) {
ReflectionSingleton instanceOne = ReflectionSingleton.getInstance();
ReflectionSingleton instanceTwo = null;
try {
Constructor constructor = ReflectionSingleton.class.getDeclaredConstructor();
// 下面的代码会破坏单例
constructor.setAccessible(true);
// 创建第二个实例
instanceTwo = (ReflectionSingleton) constructor.newInstance();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(instanceOne.hashCode());
System.out.println(instanceTwo.hashCode());
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v1/EagerSingleton.java
================================================
package io.spring2go.corespring.singleton_v1;
// 提前初始化单例
public class EagerSingleton {
private static final EagerSingleton INSTANCE = new EagerSingleton();
// 私有构造函数,避免被客户端代码使用
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return INSTANCE;
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v1_1/StaticBlockSingleton.java
================================================
package io.spring2go.corespring.singleton_v1_1;
// 静态初始化块单例
public class StaticBlockSingleton {
private static final StaticBlockSingleton INSTANCE;
// 私有构造函数,避免被客户端使用
private StaticBlockSingleton() {}
static {
try {
INSTANCE = new StaticBlockSingleton();
} catch (Exception e) { // 异常处理
throw new RuntimeException("Uffff, i was not expecting this!", e);
}
}
public static StaticBlockSingleton getInstance() {
return INSTANCE;
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2/LazySingleton.java
================================================
package io.spring2go.corespring.singleton_v2;
// 延迟初始化单例
public class LazySingleton {
private static LazySingleton INSTANCE;
private LazySingleton(){}
public static LazySingleton getInstance(){
if(INSTANCE == null){
INSTANCE = new LazySingleton();
}
return INSTANCE;
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2_1/ThreadSafeSingleton.java
================================================
package io.spring2go.corespring.singleton_v2_1;
// ̰߳ȫ
public class ThreadSafeSingleton {
private static ThreadSafeSingleton INSTANCE;
// ˽й캯ⱻͻ˴ʹ
private ThreadSafeSingleton(){}
public static synchronized ThreadSafeSingleton getInstance() {
if (INSTANCE == null) {
INSTANCE = new ThreadSafeSingleton();
}
return INSTANCE;
}
}
================================================
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2_2/DoubleCheckLockingSingleton.java
================================================
package io.spring2go.corespring.singleton_v2_2;
// 双重检查锁定单例
public class DoubleCheckLockingSingleton {
private static volatile DoubleCheckLockingSingleton INSTANCE;
// 私有构造函数,避免被客户端代码使用
private DoubleCheckLockingSingleton() {}
public static DoubleCheckLockingSingleton getInstance() {
if (INSTANCE == null) {
synchronized (DoubleCheckLockingSingleton.class) {
// 双重检查
if (INSTANCE == null) {
INSTANCE = new DoubleCheckLockingSingleton();
}
}
}
return INSTANCE;
}
}
================================================
FILE: patterns/general/dependency-inversion/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>DependencyInversion</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/injection/AppMonitorConstructorInjection.java
================================================
package io.spring2go.corespring.injection;
import io.spring2go.corespring.ioc.EventLogWriter;
import io.spring2go.corespring.ioc.INotifier;
public class AppMonitorConstructorInjection {
// 事件通知器
private INotifier notifier = null;
public AppMonitorConstructorInjection(INotifier notifier) {
this.notifier = notifier;
}
// 应用有问题时该方法被调用
public void notify(String message) {
notifier.notify(message);
}
public static void main(String[] args) {
EventLogWriter writer = new EventLogWriter();
AppMonitorConstructorInjection monitor =
new AppMonitorConstructorInjection(writer);
monitor.notify("App has a problem ...");
}
}
================================================
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/injection/AppMonitorSetterInjection.java
================================================
package io.spring2go.corespring.injection;
import io.spring2go.corespring.ioc.EventLogWriter;
import io.spring2go.corespring.ioc.INotifier;
public class AppMonitorSetterInjection {
// 事件通知器
private INotifier notifier = null;
public void SetNotifier(INotifier notifier) {
this.notifier = notifier;
}
// 应用有问题时该方法被调用
public void notify(String message) {
notifier.notify(message);
}
public static void main(String[] args) {
EventLogWriter writer = new EventLogWriter();
AppMonitorSetterInjection monitor =
new AppMonitorSetterInjection();
// 可以在其它类中设置
monitor.SetNotifier(writer);
// 可以在其它类中调用
monitor.notify("App has a problem ...");
}
}
================================================
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/AppMonitorIOC.java
================================================
package io.spring2go.corespring.ioc;
public class AppMonitorIOC {
// 事件通知器
private INotifier notifier = null;
// 应用有问题时该方法被调用
public void notify(String message) {
if (notifier == null) {
// 将抽象接口映射到具体类
notifier = new EventLogWriter();
}
notifier.notify(message);
}
public static void main(String[] args) {
AppMonitorIOC appMonitor = new AppMonitorIOC();
appMonitor.notify("App has a problem ...");
}
}
================================================
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/EmailSender.java
================================================
package io.spring2go.corespring.ioc;
public class EmailSender implements INotifier {
public void notify(String message) {
// 发送Email
System.out.println("Send email, message : " + message);
}
}
================================================
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/EventLogWriter.java
================================================
package io.spring2go.corespring.ioc;
public class EventLogWriter implements INotifier {
public void notify(String message) {
// 写到事件日志
System.out.println("Write to event log, message : " + message);
}
}
================================================
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/INotifier.java
================================================
package io.spring2go.corespring.ioc;
// 事件通知器接口
public interface INotifier {
public void notify(String message);
}
================================================
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/SMSSender.java
================================================
package io.spring2go.corespring.ioc;
public class SMSSender implements INotifier {
public void notify(String message) {
// 发送短消息
System.out.println("Send SMS, message : " + message);
}
}
================================================
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/nodip/AppMonitorNoDIP.java
================================================
package io.spring2go.corespring.nodip;
public class AppMonitorNoDIP {
// 负责将事件日志写到日志系统
private EventLogWriter writer = null;
// 应用有问题时该方法将被调用
public void notify(String message) {
if (writer == null) {
writer = new EventLogWriter();
}
writer.write(message);
}
public static void main(String[] args) {
AppMonitorNoDIP appMonitor = new AppMonitorNoDIP();
appMonitor.notify("App has a problem ...");
}
}
class EventLogWriter {
public void write(String message) {
// 写到事件日志
System.out.println("Write to event log, message : " + message);
}
}
================================================
FILE: patterns/structural/adapter/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Adapter</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/IHdmi.java
================================================
package io.spring2go.corespring.display;
// HDMI接口
public interface IHdmi {
public void openHdmi();
}
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/IVga.java
================================================
package io.spring2go.corespring.display;
// VGA接口
public interface IVga {
public void openVga();
}
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/LaptopMain.java
================================================
package io.spring2go.corespring.display;
public class LaptopMain {
public static void main(String[] args) {
VgaDisplay vgaDisplay = new VgaDisplay();
Vga2HdmiAdapter adapter = new Vga2HdmiAdapter(vgaDisplay);
operateHdmiLaptop(adapter);
}
static void operateHdmiLaptop(IHdmi hdmiDisplay) {
hdmiDisplay.openHdmi();
}
}
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/Vga2HdmiAdapter.java
================================================
package io.spring2go.corespring.display;
// VGA2HDMI适配器
public class Vga2HdmiAdapter implements IHdmi {
private IVga vgaDisplay;
public Vga2HdmiAdapter(IVga vgaDisplay) {
this.vgaDisplay = vgaDisplay;
}
public void openHdmi() {
// 适配逻辑
this.vgaDisplay.openVga();
System.out.println("Opening HDMI device");
}
}
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/VgaDisplay.java
================================================
package io.spring2go.corespring.display;
// 支持VGA接口的显示器
public class VgaDisplay implements IVga {
public void openVga() {
System.out.println("Opening..VGA Display...");
}
}
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/ArrayStack.java
================================================
package io.spring2go.corespring.stack;
// ջʵ
public class ArrayStack<T> implements IStack<T> {
private static final int DEFAULT_CAPACITY = 15;
private int top; // ָջԪ
private T[] array;
// region 캯
/**
* һջָʼ
*/
public ArrayStack(int initialCapacity) {
if (initialCapacity <= 0)
array = (T[]) new Object[DEFAULT_CAPACITY];
else
array = (T[]) new Object[initialCapacity];
top = -1; // ջ
}
/**
* һջʹóʼ
*/
public ArrayStack() {
this(DEFAULT_CAPACITY);
}
// endregion
/**
* ջǷΪ
*/
public boolean isEmpty() {
return top == -1;
}
/**
* ƳջԪ
*/
public T pop() throws StackException {
T x = peek();
array[top] = null; // ȷ
top--;
return x;
}
/**
* ջԪأDzƳ
*/
public T peek() throws StackException {
if (isEmpty())
throw new StackException("Stack is empty");
return array[top];
}
/**
* ջһԪ
*/
public void push(T e) throws StackException {
if (top == array.length)
throw new StackException("Stack has overflowed");
top++;
array[top] = e;
}
/**
* ջԪ
*/
public void clear() {
for (int i = 0; i <= top; i++) {
array[i] = null;
}
top = -1;
}
/**
* ջַʾ
*/
public String toString() {
if (isEmpty())
return "[ ]";
StringBuffer out = new StringBuffer("[");
for (int i = 0; i < top; i++)
out.append(array[i] + ", ");
out.append(array[top] + "]");
return out.toString();
}
}
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/ArrayStackMain.java
================================================
package io.spring2go.corespring.stack;
public class ArrayStackMain {
public static void main(String[] args) {
ArrayStack<Integer> stack = new ArrayStack<Integer>(6);
try {
for(int i = 0; i < 6; i++) {
stack.push(i);
}
System.out.println(stack);
for(int i = 0; i < 5; i++) {
stack.pop();
}
System.out.println(stack);
} catch(StackException e) {
System.err.println(e);
}
}
}
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/IStack.java
================================================
package io.spring2go.corespring.stack;
// ջӿ
public interface IStack<T> {
public boolean isEmpty();
public T pop() throws StackException;
public T peek() throws StackException;
public void push (T e) throws StackException;
public void clear();
}
================================================
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/StackException.java
================================================
package io.spring2go.corespring.stack;
public class StackException extends RuntimeException {
private static final long serialVersionUID = 1L;
public StackException(String name) {
super(name);
}
public StackException() {
super();
}
}
================================================
FILE: patterns/structural/bridge/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Bridge</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/Client.java
================================================
package io.spring2go.corespring.bridge;
public class Client {
public static void main(String[] args) {
String os = "linux";
FileDownloaderAbstraction downloader = null;
switch (os) {
case "windows":
downloader = new FileDownloaderAbstractionImpl(new WindowsFileDownloadImplementor());
break;
case "linux":
downloader = new FileDownloaderAbstractionImpl(new LinuxFileDownloadImplementor());
break;
default:
System.out.println("OS not supported !!");
}
Object fileContent = downloader.download("some path");
downloader.store(fileContent);
}
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloadImplementor.java
================================================
package io.spring2go.corespring.bridge;
// Implementor
public interface FileDownloadImplementor {
public Object downloadFile(String path);
public boolean storeFile(Object object);
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloaderAbstraction.java
================================================
package io.spring2go.corespring.bridge;
// Abstraction
public interface FileDownloaderAbstraction {
public Object download(String path);
public boolean store(Object object);
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloaderAbstractionImpl.java
================================================
package io.spring2go.corespring.bridge;
// RefinedAbstraction
public class FileDownloaderAbstractionImpl implements FileDownloaderAbstraction {
private FileDownloadImplementor provider = null;
public FileDownloaderAbstractionImpl(FileDownloadImplementor provider) {
super();
this.provider = provider;
}
@Override
public Object download(String path) {
return provider.downloadFile(path);
}
@Override
public boolean store(Object path) {
return provider.storeFile(path);
}
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/LinuxFileDownloadImplementor.java
================================================
package io.spring2go.corespring.bridge;
// Concrete Implementor
public class LinuxFileDownloadImplementor implements FileDownloadImplementor {
@Override
public Object downloadFile(String path) {
return new Object();
}
@Override
public boolean storeFile(Object object) {
System.out.println("File download successfully in LINUX !!");
return true;
}
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/WindowsFileDownloadImplementor.java
================================================
package io.spring2go.corespring.bridge;
//Concrete Implementor
public class WindowsFileDownloadImplementor implements FileDownloadImplementor {
@Override
public Object downloadFile(String path) {
return new Object();
}
@Override
public boolean storeFile(Object object) {
System.out.println("File download successfully in WINDOWS !!");
return true;
}
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/abstraction_change/FileDownloaderAbstraction.java
================================================
package io.spring2go.corespring.bridge.abstraction_change;
public interface FileDownloaderAbstraction {
public Object download(String path);
public boolean store(Object object);
// 添加接口
public boolean delete(String object);
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/abstraction_change/FileDownloaderAbstractionImpl.java
================================================
package io.spring2go.corespring.bridge.abstraction_change;
import io.spring2go.corespring.bridge.FileDownloadImplementor;
import io.spring2go.corespring.bridge.abstraction_change.FileDownloaderAbstraction;
public class FileDownloaderAbstractionImpl implements FileDownloaderAbstraction {
private FileDownloadImplementor provider = null;
public FileDownloaderAbstractionImpl(FileDownloadImplementor provider) {
super();
this.provider = provider;
}
@Override
public Object download(String path) {
return provider.downloadFile(path);
}
@Override
public boolean store(Object object) {
return provider.storeFile(object);
}
@Override
public boolean delete(String object) {
return false;
}
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/FileDownloadImplementor.java
================================================
package io.spring2go.corespring.bridge.implementation_change;
public interface FileDownloadImplementor {
public Object downloadFile(String path);
public boolean storeFile(Object object);
// 增加接口
public boolean delete(String object);
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/LinuxFileDownloadImplementor.java
================================================
package io.spring2go.corespring.bridge.implementation_change;
public class LinuxFileDownloadImplementor implements FileDownloadImplementor {
@Override
public Object downloadFile(String path) {
return new Object();
}
@Override
public boolean storeFile(Object object) {
System.out.println("File downloaded successfully in LINUX !!");
return true;
}
@Override
public boolean delete(String object) {
return false;
}
}
================================================
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/WindowsFileDownloadImplementor.java
================================================
package io.spring2go.corespring.bridge.implementation_change;
public class WindowsFileDownloadImplementor implements FileDownloadImplementor
{
@Override
public Object downloadFile(String path) {
return new Object();
}
@Override
public boolean storeFile(Object object) {
System.out.println("File downloaded successfully in LINUX !!");
return true;
}
@Override
public boolean delete(String object) {
return false;
}
}
================================================
FILE: patterns/structural/composite/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go</groupId>
<artifactId>Composite</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/BaseEmployee.java
================================================
package io.spring2go.corespring.composite_complex;
import java.util.List;
public abstract class BaseEmployee implements IEmployee {
protected String name;
protected int employeeId;
protected List<Subscription> subscriptions;
@Override
public String getName() {
return this.name;
}
@Override
public void setName(String name) {
this.name = name;
}
@Override
public int getEmployeeId() {
return this.employeeId;
}
@Override
public void setEmployeeId(int employeeId) {
this.employeeId = employeeId;
}
@Override
public List<Subscription> getSubscriptions() {
return this.subscriptions;
}
@Override
public void setSubscriptions(List<Subscription> subscriptions) {
this.subscriptions = subscriptions;
}
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/CompanyMain.java
================================================
package io.spring2go.corespring.composite_complex;
import java.util.Arrays;
import java.util.List;
public class CompanyMain {
public static void main(String[] args) {
// 创建一些开发者并赋予订购项
IEmployee emp1 = new Developer("A", 1);
List<Subscription> subs = Arrays.asList(Util.getIntellijSubscription(), Util.getJProfilierSubscription(),
Util.getCSDNSubscription(), Util.getTrainingSubscription());
emp1.setSubscriptions(subs);
IEmployee emp2 = new Developer("B", 2);
subs = Arrays.asList(Util.getIntellijSubscription(), Util.getJProfilierSubscription());
emp2.setSubscriptions(subs);
IEmployee emp3 = new Developer("C", 3);
subs = Arrays.asList(Util.getIntellijSubscription());
emp3.setSubscriptions(subs);
IEmployee emp4 = new Developer("D", 4);
subs = Arrays.asList(Util.getIntellijSubscription());
emp4.setSubscriptions(subs);
IEmployee emp5 = new Developer("E", 5);
subs = Arrays.asList(Util.getIntellijSubscription());
emp5.setSubscriptions(subs);
IEmployee emp6 = new Developer("F", 6);
subs = Arrays.asList(Util.getIntellijSubscription(), Util.getTrainingSubscription());
emp6.setSubscriptions(subs);
IEmployee emp7 = new Developer("G", 7);
subs = Arrays.asList(Util.getIntellijSubscription());
emp7.setSubscriptions(subs);
IEmployee emp8 = new Developer("H", 8);
subs = Arrays.asList(Util.getIntellijSubscription());
emp8.setSubscriptions(subs);
IEmployee emp9 = new Developer("I", 9);
subs = Arrays.asList(Util.getIntellijSubscription());
emp9.setSubscriptions(subs);
IEmployee emp10 = new Developer("J", 10);
subs = Arrays.asList(Util.getIntellijSubscription(), Util.getCSDNSubscription());
emp10.setSubscriptions(subs);
// 获取单个员工的成本细节
System.out.println("Let's get cost details of single employee");
Util.printCostDetails(emp1);
// 获取一组员工的成本细节
List<IEmployee> employees = Arrays.asList(emp1, emp2, emp3, emp4, emp5, emp6, emp7, emp8, emp9, emp10);
System.out.println("Let's check cost details of list of employees");
for(IEmployee employee : employees) {
Util.printCostDetails(employee);
}
// 设置经理
subs = Arrays.asList(Util.getIntellijSubscription(), Util.getJProfilierSubscription(),
Util.getCSDNSubscription(), Util.getTrainingSubscription());
List<IEmployee> teamMembers = Arrays.asList(emp1, emp2, emp3);
IEmployee mng1 = new Manager("MA", 11, subs, teamMembers);
subs = Arrays.asList(Util.getIntellijSubscription());
teamMembers = Arrays.asList(emp4, emp5, emp6);
IEmployee mng2 = new Manager("MB", 12, subs, teamMembers);
subs = Arrays.asList(Util.getTrainingSubscription());
teamMembers = Arrays.asList(emp7, emp8, emp9, emp10);
IEmployee mng3 = new Manager("MC", 13, subs, teamMembers);
// 获取单个经理的成本细节
System.out.println("Let's get cost details of single manager");
Util.printCostDetails(mng1);
// 获取一组经理的成本细节
System.out.println("Let's check details of list of manager");
List<IEmployee> managers = Arrays.asList(mng1, mng2, mng3);
for(IEmployee employee : managers) {
Util.printCostDetails(employee);
}
}
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Developer.java
================================================
package io.spring2go.corespring.composite_complex;
// Leaf
public class Developer extends BaseEmployee {
public Developer(String name, int employeeId) {
this.name = name;
this.employeeId = employeeId;
}
public double getCost() {
if (subscriptions== null)
return 0;
double cost = subscriptions.stream().mapToDouble(s -> s.getCost()).sum();
return cost;
}
public int getSubscriptionCount(SubscriptionType type) {
if (subscriptions == null)
return 0;
int count = (int) subscriptions.stream().filter(s -> s.getsType() == type).count();
return count;
}
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/IEmployee.java
================================================
package io.spring2go.corespring.composite_complex;
import java.util.List;
//Component
public interface IEmployee {
public String getName();
public void setName(String name);
public int getEmployeeId();
public void setEmployeeId(int employeeId);
public List<Subscription> getSubscriptions();
public void setSubscriptions(List<Subscription> subscriptions);
public double getCost();
public int getSubscriptionCount(SubscriptionType type);
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Manager.java
================================================
package io.spring2go.corespring.composite_complex;
import java.util.List;
// Composite
public class Manager extends BaseEmployee {
private List<IEmployee> teamMembers;
public Manager(String name, int employeeId,
List<Subscription> subscriptions,
List<IEmployee> teamMembers) {
this.name = name;
this.employeeId = employeeId;
this.subscriptions = subscriptions;
this.teamMembers = teamMembers;
}
public List<IEmployee> getTeamMembers() {
return teamMembers;
}
public void setTeamMembers(List<IEmployee> teamMembers) {
this.teamMembers = teamMembers;
}
@Override
public double getCost() {
double subsCost = 0.0;
if (subscriptions != null) {
subsCost = subscriptions.stream().mapToDouble(s -> s.getCost()).sum();
}
double membersCost = 0.0;
if (teamMembers != null) {
membersCost = teamMembers.stream().mapToDouble(m -> m.getCost()).sum();
}
return subsCost + membersCost;
}
@Override
public int getSubscriptionCount(SubscriptionType type) {
int subCount = 0;
if (subscriptions != null) {
subCount = (int) subscriptions.stream().filter(s -> s.getsType() == type).count();
}
int membersSubCount = 0;
if (teamMembers != null) {
for (IEmployee member: teamMembers) {
List<Subscription> subs = member.getSubscriptions();
if (subs != null) {
for(Subscription sub : subs) {
if (sub.getsType() == type) {
membersSubCount++;
}
}
}
}
}
return subCount + membersSubCount;
}
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Subscription.java
================================================
package io.spring2go.corespring.composite_complex;
public class Subscription {
private SubscriptionType sType; // 订购类型
private String name; // 名称
private double cost; // 费用
public SubscriptionType getsType() {
return sType;
}
public void setsType(SubscriptionType sType) {
this.sType = sType;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getCost() {
return cost;
}
public void setCost(double cost) {
this.cost = cost;
}
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/SubscriptionType.java
================================================
package io.spring2go.corespring.composite_complex;
public enum SubscriptionType {
PRINT, // 打印
SOFTWARE_LICENSE, // 软件License
TRAINING; // 培训
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Util.java
================================================
package io.spring2go.corespring.composite_complex;
public class Util {
public static void printCostDetails(IEmployee employee) {
double cost = employee.getCost();
int licenseSubCount = employee.getSubscriptionCount(SubscriptionType.SOFTWARE_LICENSE);
int printSubCount = employee.getSubscriptionCount(SubscriptionType.PRINT);
int trainingSubCount = employee.getSubscriptionCount(SubscriptionType.TRAINING);
String outMsg = "Cost: %f, Count License: %d, Count Print: %d, Count Training: %d, Emp ID: %d\n";
System.out.print(String.format(outMsg, cost, licenseSubCount, printSubCount, trainingSubCount, employee.getEmployeeId()));
}
public static Subscription getIntellijSubscription() {
Subscription sub = new Subscription();
sub.setCost(30);
sub.setName("Intellij License");
sub.setsType(SubscriptionType.SOFTWARE_LICENSE);
return sub;
}
public static Subscription getJProfilierSubscription() {
Subscription sub = new Subscription();
sub.setCost(20);
sub.setName("JProfilier License");
sub.setsType(SubscriptionType.SOFTWARE_LICENSE);
return sub;
}
public static Subscription getCSDNSubscription() {
Subscription sub = new Subscription();
sub.setName("CSDN Magazine");
sub.setsType(SubscriptionType.PRINT);
sub.setCost(10);
return sub;
}
public static Subscription getTrainingSubscription() {
Subscription sub = new Subscription();
sub.setName("Java Design Pattern");
sub.setsType(SubscriptionType.TRAINING);
sub.setCost(300);
return sub;
}
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/CompositePatternMain.java
================================================
package io.spring2go.corespring.composite_simple;
// Client
public class CompositePatternMain {
public static void main(String[] args) {
IEmployee emp1 = new Developer("John", 10000);
IEmployee emp2 = new Developer("David", 15000);
IEmployee manager1 = new Manager("Daniel", 25000);
manager1.add(emp1);
manager1.add(emp2);
IEmployee emp3 = new Developer("Michael", 20000);
Manager generalManager = new Manager("Mark", 50000);
generalManager.add(emp3);
generalManager.add(manager1);
generalManager.print();
}
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/Developer.java
================================================
package io.spring2go.corespring.composite_simple;
import io.spring2go.corespring.composite_simple.IEmployee;
// leaf
public class Developer implements IEmployee {
private String name;
private double salary;
public Developer(String name, double salary) {
this.name = name;
this.salary = salary;
}
@Override
public void add(IEmployee employee) {
String msg = "not supported by leaf node.";
throw new UnsupportedOperationException(msg);
}
@Override
public void remove(IEmployee employee) {
String msg = "not supported by leaf node.";
throw new UnsupportedOperationException(msg);
}
@Override
public IEmployee getChild(int i) {
String msg = "not supported by leaf node.";;
throw new UnsupportedOperationException(msg);
}
@Override
public String getName() {
return this.name;
}
@Override
public double getSalary() {
return this.salary;
}
@Override
public void print() {
System.out.println("-------------");
System.out.println("Name ="+getName());
System.out.println("Salary ="+getSalary());
System.out.println("-------------");
}
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/IEmployee.java
================================================
package io.spring2go.corespring.composite_simple;
// Component
public interface IEmployee {
public void add(IEmployee employee);
public void remove(IEmployee employee);
public IEmployee getChild(int i);
public String getName();
public double getSalary();
public void print();
}
================================================
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/Manager.java
================================================
package io.spring2go.corespring.composite_simple;
import java.util.ArrayList;
import java.util.List;
// Composite
public class Manager implements IEmployee {
private String name;
private double salary;
private List<IEmployee> employees = new ArrayList<IEmployee>();
public Manager(String name, double salary) {
this.name = name;
this.salary = salary;
}
@Override
public void add(IEmployee employee) {
employees.add(employee);
}
@Override
public void remove(IEmployee employee) {
employees.remove(employee);
}
@Override
public IEmployee getChild(int i) {
return employees.get(i);
}
@Override
public String getName() {
return this.name;
}
@Override
public double getSalary() {
return this.salary;
}
@Override
public void print() {
System.out.println("-------------");
System.out.println("Name =" + getName());
System.out.println("Salary =" + getSalary());
System.out.println("-------------");
for(IEmployee employee : this.employees) {
employee.print();
}
}
}
================================================
FILE: patterns/structural/decorator/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Decorator</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/ArtificialScentDecorator.java
================================================
package io.spring2go.corespring.decorator;
//Concrete Decorator
public class ArtificialScentDecorator extends Decorator {
protected ArtificialScentDecorator(BakeryComponent baseComponent) {
super(baseComponent);
this.name = "Artificial Scent";
this.price = 3.0;
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/BakeryComponent.java
================================================
package io.spring2go.corespring.decorator;
// Component Interface
public interface BakeryComponent {
public String getName();
public double getPrice();
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CakeBase.java
================================================
package io.spring2go.corespring.decorator;
// ConcreteComponent
public class CakeBase implements BakeryComponent {
private String name = "Cake Base";
private double price = 200.0;
@Override
public String getName() {
return this.name;
}
@Override
public double getPrice() {
return this.price;
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CherryDecorator.java
================================================
package io.spring2go.corespring.decorator;
//Concrete Decorator
public class CherryDecorator extends Decorator {
protected CherryDecorator(BakeryComponent baseComponent) {
super(baseComponent);
this.name = "Cherry";
this.price = 2.0;
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CreamDecorator.java
================================================
package io.spring2go.corespring.decorator;
// Concrete Decorator
public class CreamDecorator extends Decorator {
protected CreamDecorator(BakeryComponent baseComponent) {
super(baseComponent);
this.name = "Cream";
this.price = 1.0;
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/Decorator.java
================================================
package io.spring2go.corespring.decorator;
// Decorator
public abstract class Decorator implements BakeryComponent {
private BakeryComponent baseComponent = null;
protected String name = "Undefined Decorator";
protected double price = 0.0;
protected Decorator(BakeryComponent baseComponent) {
this.baseComponent = baseComponent;
}
@Override
public String getName() {
return this.baseComponent.getName() + ", " + this.name;
}
@Override
public double getPrice() {
return this.price + this.baseComponent.getPrice();
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/DecoratorMain.java
================================================
package io.spring2go.corespring.decorator;
public class DecoratorMain {
public static void main(String[] args) {
// 先创建一个简单的Cake Base
CakeBase cBase = new CakeBase();
Util.printProductDetails(cBase);
// 在蛋糕上添加奶油
CreamDecorator creamCake = new CreamDecorator(cBase);
Util.printProductDetails(creamCake);
// 在蛋糕上添加樱桃
CherryDecorator cherryCake = new CherryDecorator(creamCake);
Util.printProductDetails(cherryCake);
// 再添加香味
ArtificialScentDecorator scentedCake =
new ArtificialScentDecorator(cherryCake);
Util.printProductDetails(scentedCake);
// 最后在蛋糕上添加名片
NameCardDecorator nameCardOnCake = new NameCardDecorator(scentedCake);
Util.printProductDetails(nameCardOnCake);
// 现在创建一个简单的糕点
PastryBase pastry = new PastryBase();
Util.printProductDetails(pastry);
// 在糕点上只添加奶油和樱桃
CreamDecorator creamPastry = new CreamDecorator(pastry);
CherryDecorator cherryPastry = new CherryDecorator(creamPastry);
Util.printProductDetails(cherryPastry);
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/NameCardDecorator.java
================================================
package io.spring2go.corespring.decorator;
//Concrete Decorator
public class NameCardDecorator extends Decorator {
protected NameCardDecorator(BakeryComponent baseComponent) {
super(baseComponent);
this.name = "Name Card";
this.price = 4.0;
}
@Override
public String getName() {
return super.getName() +
"(Please Collect your discount card for " +
this.price +
")";
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/PastryBase.java
================================================
package io.spring2go.corespring.decorator;
// ConcreteComponent
public class PastryBase implements BakeryComponent {
private String name = "Pastry Base";
private double price = 20.0;
@Override
public String getName() {
return this.name;
}
@Override
public double getPrice() {
return this.price;
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/Util.java
================================================
package io.spring2go.corespring.decorator;
public class Util {
public static void printProductDetails(BakeryComponent bComponent) {
String out = "Item: " + bComponent.getName() + ", " + "Price: " + bComponent.getPrice();
System.out.println(out);
}
}
================================================
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/uml.ucls
================================================
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.2.2" icons="true" always-add-relationships="false" generalizations="true" realizations="true"
associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<interface id="1" language="java" name="io.spring2go.corespring.decorator.BakeryComponent" project="Decorator"
file="/Decorator/src/main/java/io/spring2go/corespring/decorator/BakeryComponent.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="481" y="101"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="2" language="java" name="io.spring2go.corespring.decorator.CakeBase" project="Decorator"
file="/Decorator/src/main/java/io/spring2go/corespring/decorator/CakeBase.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="200" y="369"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="3" language="java" name="io.spring2go.corespring.decorator.PastryBase" project="Decorator"
file="/Decorator/src/main/java/io/spring2go/corespring/decorator/PastryBase.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="478" y="371"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="4" language="java" name="io.spring2go.corespring.decorator.Decorator" project="Decorator"
file="/Decorator/src/main/java/io/spring2go/corespring/decorator/Decorator.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="779" y="375"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="5" language="java" name="io.spring2go.corespring.decorator.CherryDecorator" project="Decorator"
file="/Decorator/src/main/java/io/spring2go/corespring/decorator/CherryDecorator.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="509" y="609"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="6" language="java" name="io.spring2go.corespring.decorator.CreamDecorator" project="Decorator"
file="/Decorator/src/main/java/io/spring2go/corespring/decorator/CreamDecorator.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="778" y="608"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="7" language="java" name="io.spring2go.corespring.decorator.NameCardDecorator" project="Decorator"
file="/Decorator/src/main/java/io/spring2go/corespring/decorator/NameCardDecorator.java" binary="false"
corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="1061" y="614"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<realization id="8">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="1"/>
</realization>
<generalization id="9">
<end type="SOURCE" refId="7"/>
<end type="TARGET" refId="4"/>
</generalization>
<generalization id="10">
<end type="SOURCE" refId="6"/>
<end type="TARGET" refId="4"/>
</generalization>
<realization id="11">
<end type="SOURCE" refId="3"/>
<end type="TARGET" refId="1"/>
</realization>
<association id="12">
<bendpoint x="779" y="101"/>
<end type="SOURCE" refId="4" navigable="false">
<attribute id="13" name="baseComponent"/>
<multiplicity id="14" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<generalization id="15">
<end type="SOURCE" refId="5"/>
<end type="TARGET" refId="4"/>
</generalization>
<realization id="16">
<end type="SOURCE" refId="4"/>
<end type="TARGET" refId="1"/>
</realization>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>
================================================
FILE: patterns/structural/facade/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Facade</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/CostManager.java
================================================
package io.spring2go.corespring.facade;
// 费用计算实现
public class CostManager implements ICosting {
@Override
public float applyDiscount(float price, float discountPercent) {
String out = String.format(
"A discount of %f%% has been applied on the product's price of %f",
discountPercent, price);
System.out.println(out);
return price - ((discountPercent / 100) * price);
}
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/FacadeMain.java
================================================
package io.spring2go.corespring.facade;
public class FacadeMain {
public static void main(String[] args) {
// Creating the Order/Product details
OrderDetails orderDetails = new OrderDetails("Java Design Pattern book",
"Simplified book on design patterns in Java",
500, 10, "Street No 1", "Educational Area", 1212,
"8811123456");
// Using Facade
OnlineShoppingFacade facade = new OnlineShoppingFacade();
facade.finalizeOrder(orderDetails);
}
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/ICosting.java
================================================
package io.spring2go.corespring.facade;
// 费用计算接口
public interface ICosting {
public float applyDiscount(float price, float discountPercent);
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IInventory.java
================================================
package io.spring2go.corespring.facade;
// 库存接口
public interface IInventory {
public void update(int productId);
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/ILogistics.java
================================================
package io.spring2go.corespring.facade;
// 物流接口
public interface ILogistics {
public void shipProducts(String productName, String shippingAddress);
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IOrderVerify.java
================================================
package io.spring2go.corespring.facade;
// 订单校验接口
public interface IOrderVerify {
public boolean verifyShippingAddress(int pincode);
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IPaymentGateway.java
================================================
package io.spring2go.corespring.facade;
// 支付接口
public interface IPaymentGateway {
public boolean verifyCardDetails(String cardNo);
public boolean processPayment(String cardNo, float cost);
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/InventoryManager.java
================================================
package io.spring2go.corespring.facade;
// 库存实现
public class InventoryManager implements IInventory {
@Override
public void update(int productId) {
String msg = "Product# " + productId +
" is subtracted from store's inventory";
System.out.println(msg);
}
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/LogisticsManager.java
================================================
package io.spring2go.corespring.facade;
// 物流实现
public class LogisticsManager implements ILogistics {
@Override
public void shipProducts(String productName, String shippingAddress) {
String out = String.format(
"Congratulations your product %s has been shipped at the following address: %s.",
productName, shippingAddress);
System.out.println(out);
}
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/NoFacadeMain.java
================================================
package io.spring2go.corespring.facade;
// Client Code without Facade.
public class NoFacadeMain {
public static void main(String[] args) {
// Creating the Order/Product details
OrderDetails orderDetails = new OrderDetails("Java Design Pattern book",
"Simplified book on design patterns in Java",
500, 10, "Street No 1", "Educational Area", 1212,
"8811123456");
// Updating the inventory.
IInventory inventory = new InventoryManager();
inventory.update(orderDetails.getProductNo());
// verifying various details for the order such as the shipping address.
IOrderVerify orderVerify = new OrderVerificationManager();
orderVerify.verifyShippingAddress(orderDetails.getPinCode());
// Calculating the final cost after applying various discounts.
ICosting costManager = new CostManager();
orderDetails.setPrice(
costManager.applyDiscount(
orderDetails.getPrice(),
orderDetails.getDiscountPercent()
)
);
// Going through various steps if payment gateway like card verification,
// charging from the card.
IPaymentGateway paymentGateway = new PaymentGatewayManager();
paymentGateway.verifyCardDetails(orderDetails.getCardNo());
paymentGateway.processPayment(orderDetails.getCardNo(), orderDetails.getPrice());
// Completing the order by providing logistics.
ILogistics logistics = new LogisticsManager();
String shippingAddress = String.format("%s, %s - %d",
orderDetails.getAddressLine1(),
orderDetails.getAddressLine2(),
orderDetails.getPinCode());
logistics.shipProducts(orderDetails.getProductName(), shippingAddress);
}
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OnlineShoppingFacade.java
================================================
package io.spring2go.corespring.facade;
public class OnlineShoppingFacade {
IInventory inventory = new InventoryManager();
IOrderVerify orderVerify = new OrderVerificationManager();
ICosting costManager = new CostManager();
IPaymentGateway paymentGateway = new PaymentGatewayManager();
ILogistics logistics = new LogisticsManager();
public void finalizeOrder(OrderDetails orderDetails) {
inventory.update(orderDetails.getProductNo());
orderVerify.verifyShippingAddress(orderDetails.getPinCode());
orderDetails.setPrice(
costManager.applyDiscount(
orderDetails.getPrice(),
orderDetails.getDiscountPercent()
)
);
paymentGateway.verifyCardDetails(orderDetails.getCardNo());
paymentGateway.processPayment(orderDetails.getCardNo(), orderDetails.getPrice());
String shippingAddress = String.format("%s, %s - %d",
orderDetails.getAddressLine1(),
orderDetails.getAddressLine2(),
orderDetails.getPinCode());
logistics.shipProducts(orderDetails.getCardNo(), shippingAddress);
}
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OrderDetails.java
================================================
package io.spring2go.corespring.facade;
import java.util.Random;
public class OrderDetails {
// region 私有成员
private int productNo;
private String productName;
private String productDescription;
private float price;
private float discountPercent;
private String addressLine1;
private String addressLine2;
private int pinCode;
private String cardNo;
// endregion
public OrderDetails(String productName, String prodDescription, float price,
float discount, String addressLine1, String addressLine2,
int pinCode, String cardNo) {
this.productNo = new Random(1).nextInt(100);
this.productName = productName;
this.productDescription = prodDescription;
this.price = price;
this.discountPercent = discount;
this.addressLine1 = addressLine1;
this.addressLine2 = addressLine2;
this.pinCode = pinCode;
this.cardNo = cardNo;
}
// region getters
public int getProductNo() {
return productNo;
}
public void setProductNo(int productNo) {
this.productNo = productNo;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductDescription() {
return productDescription;
}
public void setProductDescription(String productDescription) {
this.productDescription = productDescription;
}
public float getPrice() {
return price;
}
public void setPrice(float price) {
this.price = price;
}
public float getDiscountPercent() {
return discountPercent;
}
public void setDiscountPercent(float discountPercent) {
this.discountPercent = discountPercent;
}
public String getAddressLine1() {
return addressLine1;
}
public void setAddressLine1(String addressLine1) {
this.addressLine1 = addressLine1;
}
public String getAddressLine2() {
return addressLine2;
}
public void setAddressLine2(String addressLine2) {
this.addressLine2 = addressLine2;
}
public int getPinCode() {
return pinCode;
}
public void setPinCode(int pinCode) {
this.pinCode = pinCode;
}
public String getCardNo() {
return cardNo;
}
public void setCardNo(String cardNo) {
this.cardNo = cardNo;
}
// endregion
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OrderVerificationManager.java
================================================
package io.spring2go.corespring.facade;
// 订单校验实现
public class OrderVerificationManager implements IOrderVerify {
@Override
public boolean verifyShippingAddress(int pincode) {
System.out.println(
"The product can be shipped to the pincode "
+ pincode);
return true;
}
}
================================================
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/PaymentGatewayManager.java
================================================
package io.spring2go.corespring.facade;
// 支付实现
public class PaymentGatewayManager implements IPaymentGateway {
@Override
public boolean verifyCardDetails(String cardNo) {
String out = "Card# " + cardNo +
" has been verified and is accepted.";
System.out.println(out);
return true;
}
@Override
public boolean processPayment(String cardNo, float cost) {
String out = "Card# " + cardNo +
" is used to make a payment of " + cost + ".";
System.out.println(out);
return true;
}
}
================================================
FILE: patterns/structural/proxy/pom.xml
================================================
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>io.spring2go.corespring</groupId>
<artifactId>Proxy</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
</project>
================================================
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/Folder.java
================================================
package io.spring2go.corespring;
// RealSubject
public class Folder implements IFolder {
public void performOperations() {
// access folder and perform various operations like copy or cut files
System.out.println("Performing operation on folder");
}
}
================================================
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/FolderProxy.java
================================================
package io.spring2go.corespring;
// Proxy
public class FolderProxy implements IFolder {
Folder folder;
User user;
public FolderProxy(User user) {
this.user = user;
}
public void performOperations() {
if (user.getUserName().equalsIgnoreCase("bobo") &&
user.getPassword().equalsIgnoreCase("xyz")) {
folder = new Folder();
folder.performOperations();
} else {
System.out.println("You don't have access to this folder");
}
}
}
================================================
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/IFolder.java
================================================
package io.spring2go.corespring;
// Subject
public interface IFolder {
public void performOperations();
}
================================================
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/ProxyDesignPatternMain.java
================================================
package io.spring2go.corespring;
// Client
public class ProxyDesignPatternMain {
public static void main(String[] args) {
// When you click on folder, Let's say a GUI form will ask for
// usesrName and password.
// and this GUI will create this user object
// If we give correct userName and password
User user = new User("bobo", "xyz");
FolderProxy folderProxy = new FolderProxy(user);
System.out.println("When userName and password are correct:");
folderProxy.performOperations();
System.out.println("**************************************");
// if we give wrong userName and Password
User userWrong = new User("abc", "abc");
FolderProxy folderProxyWrong = new FolderProxy(userWrong);
System.out.println("When userName and password are incorrect");
folderProxyWrong.performOperations();
}
}
================================================
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/User.java
================================================
package io.spring2go.corespring;
public class User {
String username;
String password;
public User(String username, String password) {
this.username = username;
this.password = password;
}
public String getUserName() {
return this.username;
}
public String getPassword() {
return this.password;
}
}
================================================
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/uml.ucls
================================================
<?xml version="1.0" encoding="UTF-8"?>
<class-diagram version="1.2.2" icons="true" always-add-relationships="false" generalizations="true" realizations="true"
associations="true" dependencies="false" nesting-relationships="true" router="FAN">
<class id="1" language="java" name="io.spring2go.corespring.Folder" project="Proxy"
file="/Proxy/src/main/java/io/spring2go/corespring/Folder.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="195" y="326"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<class id="2" language="java" name="io.spring2go.corespring.FolderProxy" project="Proxy"
file="/Proxy/src/main/java/io/spring2go/corespring/FolderProxy.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="511" y="328"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<interface id="3" language="java" name="io.spring2go.corespring.IFolder" project="Proxy"
file="/Proxy/src/main/java/io/spring2go/corespring/IFolder.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="344" y="126"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</interface>
<class id="4" language="java" name="io.spring2go.corespring.ProxyDesignPatternMain" project="Proxy"
file="/Proxy/src/main/java/io/spring2go/corespring/ProxyDesignPatternMain.java" binary="false" corner="BOTTOM_RIGHT">
<position height="-1" width="-1" x="804" y="326"/>
<display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</display>
</class>
<association id="5">
<end type="SOURCE" refId="2" navigable="false">
<attribute id="6" name="folder"/>
<multiplicity id="7" minimum="0" maximum="1"/>
</end>
<end type="TARGET" refId="1" navigable="true"/>
<display labels="true" multiplicity="true"/>
</association>
<realization id="8">
<end type="SOURCE" refId="2"/>
<end type="TARGET" refId="3"/>
</realization>
<realization id="9">
<end type="SOURCE" refId="1"/>
<end type="TARGET" refId="3"/>
</realization>
<classifier-display autosize="true" stereotype="true" package="true" initial-value="false" signature="true"
sort-features="false" accessors="true" visibility="true">
<attributes public="true" package="true" protected="true" private="true" static="true"/>
<operations public="true" package="true" protected="true" private="true" static="true"/>
</classifier-display>
<association-display labels="true" multiplicity="true"/>
</class-diagram>
gitextract_i2ygnjo2/
├── .gitignore
├── LICENSE
├── README.md
└── patterns/
├── behavior/
│ ├── chain_of_responsibility/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ ├── ApproveHandler.java
│ │ ├── ClientProgram.java
│ │ ├── HR.java
│ │ ├── Leave.java
│ │ ├── ProjectLeader.java
│ │ └── TeamLeader.java
│ ├── command/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── command/
│ │ ├── CloseFileCommand.java
│ │ ├── Command.java
│ │ ├── FileInvoker.java
│ │ ├── FileSystemClient.java
│ │ ├── FileSystemReceiver.java
│ │ ├── FileSystemReceiverUtil.java
│ │ ├── OpenFileCommand.java
│ │ ├── UnixFileSystemReceiver.java
│ │ ├── WindowsFileSystemReceiver.java
│ │ ├── WriteFileCommand.java
│ │ └── uml.ucls
│ ├── interpreter/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── interpreter/
│ │ ├── App.java
│ │ ├── Expression.java
│ │ ├── MinusExpression.java
│ │ ├── MultiplyExpression.java
│ │ ├── NumberExpression.java
│ │ ├── PlusExpression.java
│ │ └── uml.ucls
│ ├── iterator/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── iterator/
│ │ ├── App.java
│ │ ├── Channel.java
│ │ ├── ChannelCollection.java
│ │ ├── ChannelCollectionImpl.java
│ │ ├── ChannelIterator.java
│ │ ├── ChannelTypeEnum.java
│ │ └── uml.ucls
│ ├── observer/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── patterns/
│ │ └── observer/
│ │ ├── Follower.java
│ │ ├── Observer.java
│ │ ├── ObserverPatternMain.java
│ │ ├── OfficialAccount.java
│ │ ├── Subject.java
│ │ └── uml.ucls
│ ├── strategy/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── strategy/
│ │ ├── HeapSortStrategy.java
│ │ ├── MergeSortStrategy.java
│ │ ├── QuickSortStrategy.java
│ │ ├── SortingMainV1.java
│ │ ├── SortingMainV2.java
│ │ ├── SortingManagerV1.java
│ │ ├── SortingManagerV2.java
│ │ ├── SortingStrategy.java
│ │ ├── SortingType.java
│ │ └── uml.ucls
│ └── template/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── patterns/
│ └── template/
│ ├── CSVDataParser.java
│ ├── DataParser.java
│ ├── DatabaseDataParser.java
│ └── TemplateMethodMain.java
├── creation/
│ ├── abstract-factory/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── abstractfactory/
│ │ ├── AbstractFactoryMain.java
│ │ ├── ChineseElectricalFactory.java
│ │ ├── ChineseFan.java
│ │ ├── ChineseTubeLight.java
│ │ ├── IElectricalFactory.java
│ │ ├── IFan.java
│ │ ├── ITubeLight.java
│ │ ├── USElectricalFactory.java
│ │ ├── USFan.java
│ │ └── USTubeLight.java
│ ├── builder/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ ├── classicbuilder/
│ │ │ ├── AndroidPhoneBuilder.java
│ │ │ ├── Battery.java
│ │ │ ├── ClassicBuilderMain.java
│ │ │ ├── IMobilePhoneBuilder.java
│ │ │ ├── Manufacturer.java
│ │ │ ├── MobilePhone.java
│ │ │ ├── OperatingSystem.java
│ │ │ ├── ScreenType.java
│ │ │ ├── Stylus.java
│ │ │ └── WindowsPhoneBuilder.java
│ │ ├── javabean/
│ │ │ ├── JavaBeanMain.java
│ │ │ └── User.java
│ │ ├── modernbuilder/
│ │ │ ├── ModernBuilderMain.java
│ │ │ └── User.java
│ │ └── telescoping_constructor/
│ │ └── User.java
│ ├── factory-method/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ └── factorymethod/
│ │ ├── CeilingFan.java
│ │ ├── CeilingFanFactory.java
│ │ ├── ExhaustFan.java
│ │ ├── ExhaustFanFactory.java
│ │ ├── FactoryMethodMain.java
│ │ ├── IFan.java
│ │ ├── IFanFactory.java
│ │ ├── PropellerFan.java
│ │ ├── PropellerFanFactory.java
│ │ ├── TableFan.java
│ │ └── TableFanFactory.java
│ ├── simple-factory/
│ │ ├── pom.xml
│ │ └── src/
│ │ └── main/
│ │ └── java/
│ │ └── io/
│ │ └── spring2go/
│ │ └── corespring/
│ │ ├── nofactory/
│ │ │ └── NoFactoryMain.java
│ │ └── simplefactory/
│ │ ├── CeilingFan.java
│ │ ├── ExhaustFan.java
│ │ ├── FanFactory.java
│ │ ├── FanType.java
│ │ ├── IFan.java
│ │ ├── IFanFactory.java
│ │ ├── SimpleFactoryMain.java
│ │ └── TableFan.java
│ └── singleton/
│ ├── filename.ser
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ ├── singleton/
│ │ ├── v3/
│ │ │ └── BillPughSingleton.java
│ │ └── v4/
│ │ ├── EnumSingleton.java
│ │ └── TestEnumSingleton.java
│ ├── singleton_deserialization/
│ │ ├── DemoSingleton.java
│ │ └── SerializationTest.java
│ ├── singleton_reflection/
│ │ ├── ReflectionSingleton.java
│ │ └── ReflectionTest.java
│ ├── singleton_v1/
│ │ └── EagerSingleton.java
│ ├── singleton_v1_1/
│ │ └── StaticBlockSingleton.java
│ ├── singleton_v2/
│ │ └── LazySingleton.java
│ ├── singleton_v2_1/
│ │ └── ThreadSafeSingleton.java
│ └── singleton_v2_2/
│ └── DoubleCheckLockingSingleton.java
├── general/
│ └── dependency-inversion/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ ├── injection/
│ │ ├── AppMonitorConstructorInjection.java
│ │ └── AppMonitorSetterInjection.java
│ ├── ioc/
│ │ ├── AppMonitorIOC.java
│ │ ├── EmailSender.java
│ │ ├── EventLogWriter.java
│ │ ├── INotifier.java
│ │ └── SMSSender.java
│ └── nodip/
│ └── AppMonitorNoDIP.java
└── structural/
├── adapter/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ ├── display/
│ │ ├── IHdmi.java
│ │ ├── IVga.java
│ │ ├── LaptopMain.java
│ │ ├── Vga2HdmiAdapter.java
│ │ └── VgaDisplay.java
│ └── stack/
│ ├── ArrayStack.java
│ ├── ArrayStackMain.java
│ ├── IStack.java
│ └── StackException.java
├── bridge/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ └── bridge/
│ ├── Client.java
│ ├── FileDownloadImplementor.java
│ ├── FileDownloaderAbstraction.java
│ ├── FileDownloaderAbstractionImpl.java
│ ├── LinuxFileDownloadImplementor.java
│ ├── WindowsFileDownloadImplementor.java
│ ├── abstraction_change/
│ │ ├── FileDownloaderAbstraction.java
│ │ └── FileDownloaderAbstractionImpl.java
│ └── implementation_change/
│ ├── FileDownloadImplementor.java
│ ├── LinuxFileDownloadImplementor.java
│ └── WindowsFileDownloadImplementor.java
├── composite/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ ├── composite_complex/
│ │ ├── BaseEmployee.java
│ │ ├── CompanyMain.java
│ │ ├── Developer.java
│ │ ├── IEmployee.java
│ │ ├── Manager.java
│ │ ├── Subscription.java
│ │ ├── SubscriptionType.java
│ │ └── Util.java
│ └── composite_simple/
│ ├── CompositePatternMain.java
│ ├── Developer.java
│ ├── IEmployee.java
│ └── Manager.java
├── decorator/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ └── decorator/
│ ├── ArtificialScentDecorator.java
│ ├── BakeryComponent.java
│ ├── CakeBase.java
│ ├── CherryDecorator.java
│ ├── CreamDecorator.java
│ ├── Decorator.java
│ ├── DecoratorMain.java
│ ├── NameCardDecorator.java
│ ├── PastryBase.java
│ ├── Util.java
│ └── uml.ucls
├── facade/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── io/
│ └── spring2go/
│ └── corespring/
│ └── facade/
│ ├── CostManager.java
│ ├── FacadeMain.java
│ ├── ICosting.java
│ ├── IInventory.java
│ ├── ILogistics.java
│ ├── IOrderVerify.java
│ ├── IPaymentGateway.java
│ ├── InventoryManager.java
│ ├── LogisticsManager.java
│ ├── NoFacadeMain.java
│ ├── OnlineShoppingFacade.java
│ ├── OrderDetails.java
│ ├── OrderVerificationManager.java
│ └── PaymentGatewayManager.java
└── proxy/
├── pom.xml
└── src/
└── main/
└── java/
└── io/
└── spring2go/
└── corespring/
├── Folder.java
├── FolderProxy.java
├── IFolder.java
├── ProxyDesignPatternMain.java
├── User.java
└── uml.ucls
SYMBOL INDEX (602 symbols across 172 files)
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ApproveHandler.java
type ApproveHandler (line 4) | public interface ApproveHandler {
method setNextHandler (line 6) | public void setNextHandler(ApproveHandler nextHandler);
method approve (line 8) | public void approve(Leave leave);
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ClientProgram.java
class ClientProgram (line 4) | public class ClientProgram {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/HR.java
class HR (line 4) | public class HR implements ApproveHandler {
method setNextHandler (line 10) | public void setNextHandler(ApproveHandler nextHandler) {
method approve (line 14) | public void approve(Leave leave) {
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/Leave.java
class Leave (line 4) | public class Leave {
method Leave (line 8) | public Leave(int leaveId, int numberOfDays) {
method getLeaveId (line 14) | public int getLeaveId() {
method setLeaveId (line 18) | public void setLeaveId(int leaveId) {
method getNumberOfDays (line 22) | public int getNumberOfDays() {
method setNumberOfDays (line 26) | public void setNumberOfDays(int numberOfDays) {
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ProjectLeader.java
class ProjectLeader (line 4) | public class ProjectLeader implements ApproveHandler {
method setNextHandler (line 10) | public void setNextHandler(ApproveHandler nextHandler) {
method approve (line 14) | public void approve(Leave leave) {
FILE: patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/TeamLeader.java
class TeamLeader (line 4) | public class TeamLeader implements ApproveHandler {
method setNextHandler (line 10) | public void setNextHandler(ApproveHandler nextHandler) {
method approve (line 14) | public void approve(Leave leave) {
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/CloseFileCommand.java
class CloseFileCommand (line 4) | public class CloseFileCommand implements Command {
method CloseFileCommand (line 8) | public CloseFileCommand(FileSystemReceiver fs) {
method execute (line 12) | @Override
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/Command.java
type Command (line 4) | public interface Command {
method execute (line 6) | void execute();
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileInvoker.java
class FileInvoker (line 4) | public class FileInvoker {
method FileInvoker (line 8) | public FileInvoker(Command c) {
method execute (line 12) | public void execute() {
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemClient.java
class FileSystemClient (line 4) | public class FileSystemClient {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemReceiver.java
type FileSystemReceiver (line 4) | public interface FileSystemReceiver {
method openFile (line 5) | void openFile();
method writeFile (line 6) | void writeFile();
method closeFile (line 7) | void closeFile();
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemReceiverUtil.java
class FileSystemReceiverUtil (line 3) | public class FileSystemReceiverUtil {
method getUnderlyingFileSystem (line 5) | public static FileSystemReceiver getUnderlyingFileSystem() {
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/OpenFileCommand.java
class OpenFileCommand (line 4) | public class OpenFileCommand implements Command {
method OpenFileCommand (line 8) | public OpenFileCommand(FileSystemReceiver fs) {
method execute (line 12) | @Override
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/UnixFileSystemReceiver.java
class UnixFileSystemReceiver (line 4) | public class UnixFileSystemReceiver implements FileSystemReceiver {
method openFile (line 6) | @Override
method writeFile (line 11) | @Override
method closeFile (line 16) | @Override
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/WindowsFileSystemReceiver.java
class WindowsFileSystemReceiver (line 4) | public class WindowsFileSystemReceiver implements FileSystemReceiver {
method openFile (line 6) | @Override
method writeFile (line 11) | @Override
method closeFile (line 16) | @Override
FILE: patterns/behavior/command/src/main/java/io/spring2go/corespring/command/WriteFileCommand.java
class WriteFileCommand (line 4) | public class WriteFileCommand implements Command {
method WriteFileCommand (line 8) | public WriteFileCommand(FileSystemReceiver fs) {
method execute (line 12) | @Override
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/App.java
class App (line 6) | public class App {
method main (line 12) | public static void main(String[] args) {
method isOperator (line 35) | public static boolean isOperator(String s) {
method getOperatorInstance (line 40) | public static Expression getOperatorInstance(
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/Expression.java
class Expression (line 4) | public abstract class Expression {
method interpret (line 6) | public abstract int interpret();
method toString (line 8) | @Override
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/MinusExpression.java
class MinusExpression (line 4) | public class MinusExpression extends Expression {
method MinusExpression (line 9) | public MinusExpression(
method interpret (line 16) | @Override
method toString (line 21) | @Override
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/MultiplyExpression.java
class MultiplyExpression (line 4) | public class MultiplyExpression extends Expression {
method MultiplyExpression (line 9) | public MultiplyExpression(
method interpret (line 16) | @Override
method toString (line 21) | @Override
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/NumberExpression.java
class NumberExpression (line 4) | public class NumberExpression extends Expression {
method NumberExpression (line 8) | public NumberExpression(int number) {
method NumberExpression (line 12) | public NumberExpression(String s) {
method interpret (line 16) | @Override
method toString (line 21) | @Override
FILE: patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/PlusExpression.java
class PlusExpression (line 4) | public class PlusExpression extends Expression {
method PlusExpression (line 9) | public PlusExpression(
method interpret (line 16) | @Override
method toString (line 21) | @Override
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/App.java
class App (line 4) | public class App {
method main (line 6) | public static void main(String[] args) {
method populateChannels (line 22) | private static ChannelCollection populateChannels() {
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/Channel.java
class Channel (line 3) | public class Channel {
method Channel (line 7) | public Channel(double freq, ChannelTypeEnum type) {
method getFrequency (line 12) | public double getFrequency() {
method getType (line 16) | public ChannelTypeEnum getType() {
method toString (line 20) | @Override
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollection.java
type ChannelCollection (line 4) | public interface ChannelCollection {
method addChannel (line 6) | public void addChannel(Channel c);
method removeChannel (line 8) | public void removeChannel(Channel c);
method iterator (line 10) | public ChannelIterator iterator(ChannelTypeEnum type);
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollectionImpl.java
class ChannelCollectionImpl (line 7) | public class ChannelCollectionImpl implements ChannelCollection {
method ChannelCollectionImpl (line 11) | public ChannelCollectionImpl() {
method addChannel (line 15) | @Override
method removeChannel (line 20) | @Override
method iterator (line 25) | @Override
class ChannelIteratorImpl (line 31) | private class ChannelIteratorImpl implements ChannelIterator {
method ChannelIteratorImpl (line 36) | public ChannelIteratorImpl(ChannelTypeEnum type,
method hasNext (line 42) | @Override
method next (line 56) | @Override
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelIterator.java
type ChannelIterator (line 4) | public interface ChannelIterator {
method hasNext (line 6) | public boolean hasNext();
method next (line 8) | public Channel next();
FILE: patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelTypeEnum.java
type ChannelTypeEnum (line 3) | public enum ChannelTypeEnum {
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Follower.java
class Follower (line 3) | public class Follower implements Observer {
method Follower (line 7) | public Follower(String followerName) {
method update (line 11) | @Override
method toString (line 17) | @Override
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Observer.java
type Observer (line 4) | public interface Observer {
method update (line 6) | public void update(String name, String s);
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/ObserverPatternMain.java
class ObserverPatternMain (line 3) | public class ObserverPatternMain {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/OfficialAccount.java
class OfficialAccount (line 6) | public class OfficialAccount implements Subject {
method OfficialAccount (line 11) | public OfficialAccount(String oaName) {
method register (line 16) | @Override
method unregister (line 22) | @Override
method notifyAllObservers (line 28) | @Override
method pushArticle (line 36) | public void pushArticle(String article) {
FILE: patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Subject.java
type Subject (line 5) | public interface Subject {
method register (line 6) | public void register(Observer o);
method unregister (line 7) | public void unregister(Observer o);
method notifyAllObservers (line 8) | public void notifyAllObservers(String s);
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/HeapSortStrategy.java
class HeapSortStrategy (line 5) | public class HeapSortStrategy implements SortingStrategy {
method sort (line 7) | @Override
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/MergeSortStrategy.java
class MergeSortStrategy (line 6) | public class MergeSortStrategy implements SortingStrategy {
method sort (line 8) | @Override
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/QuickSortStrategy.java
class QuickSortStrategy (line 6) | public class QuickSortStrategy implements SortingStrategy {
method sort (line 8) | @Override
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingMainV1.java
class SortingMainV1 (line 6) | public class SortingMainV1 {
method main (line 7) | public static void main(String[] args) {
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingMainV2.java
class SortingMainV2 (line 6) | public class SortingMainV2 {
method main (line 8) | public static void main(String[] args) {
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingManagerV1.java
class SortingManagerV1 (line 5) | public class SortingManagerV1 {
method SortingManagerV1 (line 8) | public SortingManagerV1(List list) {
method sortListBasedOnType (line 12) | public void sortListBasedOnType(SortingType sortingType) {
method sortListUsingMergeSort (line 26) | private void sortListUsingMergeSort() {
method sortListUsingQuickSort (line 30) | private void sortListUsingQuickSort() {
method sortListUsingHeapSort (line 34) | private void sortListUsingHeapSort() {
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingManagerV2.java
class SortingManagerV2 (line 5) | public class SortingManagerV2 {
method SortingManagerV2 (line 9) | public SortingManagerV2(List<Integer> list, SortingStrategy sortingStr...
method sortList (line 15) | public void sortList() {
method getSortingStrategy (line 23) | public SortingStrategy getSortingStrategy() {
method setSortingStrategy (line 27) | public void setSortingStrategy(SortingStrategy sortingStrategy) {
method getList (line 31) | public List<Integer> getList() {
method setList (line 35) | public void setList(List<Integer> list) {
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingStrategy.java
type SortingStrategy (line 6) | public interface SortingStrategy {
method sort (line 7) | void sort(List<Integer> list);
FILE: patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingType.java
type SortingType (line 3) | public enum SortingType {
FILE: patterns/behavior/template/src/main/java/io/spring2go/patterns/template/CSVDataParser.java
class CSVDataParser (line 3) | public class CSVDataParser extends DataParser {
method readData (line 5) | @Override
method processData (line 10) | @Override
FILE: patterns/behavior/template/src/main/java/io/spring2go/patterns/template/DataParser.java
class DataParser (line 3) | abstract class DataParser {
method process (line 6) | public final void process() {
method readData (line 13) | abstract void readData();
method processData (line 14) | abstract void processData();
method writeData (line 17) | public void writeData() {
FILE: patterns/behavior/template/src/main/java/io/spring2go/patterns/template/DatabaseDataParser.java
class DatabaseDataParser (line 3) | public class DatabaseDataParser extends DataParser {
method readData (line 5) | @Override
method processData (line 10) | @Override
FILE: patterns/behavior/template/src/main/java/io/spring2go/patterns/template/TemplateMethodMain.java
class TemplateMethodMain (line 3) | public class TemplateMethodMain {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/AbstractFactoryMain.java
class AbstractFactoryMain (line 3) | public class AbstractFactoryMain {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseElectricalFactory.java
class ChineseElectricalFactory (line 3) | public class ChineseElectricalFactory implements IElectricalFactory {
method createFan (line 5) | public IFan createFan() {
method createTubeLight (line 9) | public ITubeLight createTubeLight() {
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseFan.java
class ChineseFan (line 3) | public class ChineseFan implements IFan {
method swithOn (line 5) | public void swithOn() {
method switchOff (line 9) | public void switchOff() {
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseTubeLight.java
class ChineseTubeLight (line 3) | public class ChineseTubeLight implements ITubeLight {
method swithOn (line 4) | public void swithOn() {
method switchOff (line 8) | public void switchOff() {
method tuneLight (line 12) | public void tuneLight() {
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/IElectricalFactory.java
type IElectricalFactory (line 4) | public interface IElectricalFactory {
method createFan (line 6) | IFan createFan();
method createTubeLight (line 8) | ITubeLight createTubeLight();
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/IFan.java
type IFan (line 4) | public interface IFan {
method swithOn (line 6) | public void swithOn();
method switchOff (line 8) | public void switchOff();
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ITubeLight.java
type ITubeLight (line 4) | public interface ITubeLight {
method swithOn (line 5) | public void swithOn();
method switchOff (line 7) | public void switchOff();
method tuneLight (line 9) | public void tuneLight();
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USElectricalFactory.java
class USElectricalFactory (line 3) | public class USElectricalFactory implements IElectricalFactory {
method createFan (line 5) | public IFan createFan() {
method createTubeLight (line 9) | public ITubeLight createTubeLight() {
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USFan.java
class USFan (line 3) | public class USFan implements IFan {
method swithOn (line 5) | public void swithOn() {
method switchOff (line 9) | public void switchOff() {
FILE: patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USTubeLight.java
class USTubeLight (line 3) | public class USTubeLight implements ITubeLight {
method swithOn (line 4) | public void swithOn() {
method switchOff (line 8) | public void switchOff() {
method tuneLight (line 12) | public void tuneLight() {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/AndroidPhoneBuilder.java
class AndroidPhoneBuilder (line 4) | public class AndroidPhoneBuilder implements IMobilePhoneBuilder {
method AndroidPhoneBuilder (line 8) | public AndroidPhoneBuilder() {
method buildScreen (line 12) | @Override
method buildBattery (line 17) | @Override
method buildOS (line 22) | @Override
method buildStylus (line 27) | @Override
method getPhone (line 33) | @Override
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Battery.java
type Battery (line 4) | public enum Battery {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/ClassicBuilderMain.java
class ClassicBuilderMain (line 4) | public class ClassicBuilderMain {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/IMobilePhoneBuilder.java
type IMobilePhoneBuilder (line 4) | public interface IMobilePhoneBuilder {
method buildScreen (line 5) | void buildScreen();
method buildBattery (line 6) | void buildBattery();
method buildOS (line 7) | void buildOS();
method buildStylus (line 8) | void buildStylus();
method getPhone (line 9) | MobilePhone getPhone();
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Manufacturer.java
class Manufacturer (line 4) | public class Manufacturer {
method construct (line 5) | public void construct(IMobilePhoneBuilder phoneBuilder) {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/MobilePhone.java
class MobilePhone (line 4) | public class MobilePhone {
method MobilePhone (line 13) | public MobilePhone(String name) {
method getPhoneName (line 17) | public String getPhoneName() {
method getPhoneScreen (line 21) | public ScreenType getPhoneScreen() {
method setPhoneScreen (line 25) | public void setPhoneScreen(ScreenType phoneScreen) {
method getPhoneBattery (line 29) | public Battery getPhoneBattery() {
method setPhoneBattery (line 33) | public void setPhoneBattery(Battery phoneBattery) {
method getPhoneOS (line 37) | public OperatingSystem getPhoneOS() {
method setPhoneOS (line 41) | public void setPhoneOS(OperatingSystem phoneOS) {
method getPhoneStylus (line 45) | public Stylus getPhoneStylus() {
method setPhoneStylus (line 49) | public void setPhoneStylus(Stylus phoneStylus) {
method toString (line 54) | @Override
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/OperatingSystem.java
type OperatingSystem (line 4) | public enum OperatingSystem {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/ScreenType.java
type ScreenType (line 4) | public enum ScreenType {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Stylus.java
type Stylus (line 4) | public enum Stylus {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/WindowsPhoneBuilder.java
class WindowsPhoneBuilder (line 4) | public class WindowsPhoneBuilder implements IMobilePhoneBuilder {
method WindowsPhoneBuilder (line 8) | public WindowsPhoneBuilder() {
method buildScreen (line 12) | @Override
method buildBattery (line 17) | @Override
method buildOS (line 22) | @Override
method buildStylus (line 27) | @Override
method getPhone (line 32) | @Override
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/javabean/JavaBeanMain.java
class JavaBeanMain (line 3) | public class JavaBeanMain {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/javabean/User.java
class User (line 4) | public class User {
method User (line 14) | public User() {}
method getFirstName (line 16) | public String getFirstName() {
method setFirstName (line 19) | public void setFirstName(String firstName) {
method getLastName (line 22) | public String getLastName() {
method setLastName (line 25) | public void setLastName(String lastName) {
method getAge (line 28) | public int getAge() {
method setAge (line 31) | public void setAge(int age) {
method getPhone (line 34) | public String getPhone() {
method setPhone (line 37) | public void setPhone(String phone) {
method getAddress (line 40) | public String getAddress() {
method setAddress (line 43) | public void setAddress(String address) {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/modernbuilder/ModernBuilderMain.java
class ModernBuilderMain (line 3) | public class ModernBuilderMain {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/modernbuilder/User.java
class User (line 4) | public class User {
method User (line 12) | private User(UserBuilder builder) {
method getFirstName (line 21) | public String getFirstName() {
method getLastName (line 25) | public String getLastName() {
method getAge (line 29) | public int getAge() {
method getPhone (line 33) | public String getPhone() {
method getAddress (line 37) | public String getAddress() {
method toString (line 41) | @Override
class UserBuilder (line 48) | public static class UserBuilder {
method UserBuilder (line 55) | public UserBuilder(String firstName, String lastName) {
method age (line 60) | public UserBuilder age(int age) {
method phone (line 65) | public UserBuilder phone(String phone) {
method address (line 70) | public UserBuilder address(String address) {
method build (line 76) | public User build() {
method validateUserObject (line 82) | private void validateUserObject(User user) {
FILE: patterns/creation/builder/src/main/java/io/spring2go/corespring/telescoping_constructor/User.java
class User (line 4) | public class User {
method User (line 14) | public User(String firstName, String lastName, int age, String phone) {
method User (line 21) | public User(String firstName, String lastName, String phone, String ad...
method User (line 28) | public User(String firstName, String lastName, int age) {
method User (line 34) | public User(String firstName, String lastName) {
method getFirstName (line 40) | public String getFirstName() {
method getLastName (line 44) | public String getLastName() {
method getAge (line 48) | public int getAge() {
method getPhone (line 52) | public String getPhone() {
method getAddress (line 56) | public String getAddress() {
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/CeilingFan.java
class CeilingFan (line 4) | public class CeilingFan implements IFan {
method swithOn (line 6) | @Override
method switchOff (line 11) | @Override
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/CeilingFanFactory.java
class CeilingFanFactory (line 3) | public class CeilingFanFactory implements IFanFactory {
method createFan (line 5) | @Override
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/ExhaustFan.java
class ExhaustFan (line 3) | public class ExhaustFan implements IFan {
method swithOn (line 5) | @Override
method switchOff (line 10) | @Override
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/ExhaustFanFactory.java
class ExhaustFanFactory (line 3) | public class ExhaustFanFactory implements IFanFactory {
method createFan (line 5) | @Override
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/FactoryMethodMain.java
class FactoryMethodMain (line 4) | public class FactoryMethodMain {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/IFan.java
type IFan (line 3) | public interface IFan {
method swithOn (line 5) | public void swithOn();
method switchOff (line 7) | public void switchOff();
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/IFanFactory.java
type IFanFactory (line 3) | public interface IFanFactory {
method createFan (line 4) | IFan createFan();
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/PropellerFan.java
class PropellerFan (line 4) | public class PropellerFan implements IFan {
method swithOn (line 6) | @Override
method switchOff (line 11) | @Override
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/PropellerFanFactory.java
class PropellerFanFactory (line 3) | public class PropellerFanFactory implements IFanFactory {
method createFan (line 5) | @Override
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/TableFan.java
class TableFan (line 4) | public class TableFan implements IFan {
method swithOn (line 6) | @Override
method switchOff (line 11) | @Override
FILE: patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/TableFanFactory.java
class TableFanFactory (line 3) | public class TableFanFactory implements IFanFactory {
method createFan (line 5) | @Override
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/nofactory/NoFactoryMain.java
class NoFactoryMain (line 3) | public class NoFactoryMain {
method main (line 5) | public static void main(String[] args) {
class TableFan (line 12) | class TableFan {
method switchOn (line 13) | public void switchOn() {
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/CeilingFan.java
class CeilingFan (line 3) | public class CeilingFan implements IFan {
method swithOn (line 5) | @Override
method switchOff (line 10) | @Override
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/ExhaustFan.java
class ExhaustFan (line 3) | public class ExhaustFan implements IFan {
method swithOn (line 5) | @Override
method switchOff (line 10) | @Override
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/FanFactory.java
class FanFactory (line 3) | public class FanFactory implements IFanFactory {
method createFan (line 5) | @Override
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/FanType.java
type FanType (line 3) | public enum FanType {
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/IFan.java
type IFan (line 3) | public interface IFan {
method swithOn (line 5) | public void swithOn();
method switchOff (line 7) | public void switchOff();
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/IFanFactory.java
type IFanFactory (line 3) | public interface IFanFactory {
method createFan (line 4) | IFan createFan(FanType type);
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/SimpleFactoryMain.java
class SimpleFactoryMain (line 4) | public class SimpleFactoryMain {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/TableFan.java
class TableFan (line 3) | public class TableFan implements IFan {
method swithOn (line 5) | @Override
method switchOff (line 10) | @Override
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v3/BillPughSingleton.java
class BillPughSingleton (line 4) | public class BillPughSingleton {
method BillPughSingleton (line 6) | private BillPughSingleton() {}
class LazyHolder (line 8) | private static class LazyHolder {
method getInstance (line 12) | public static BillPughSingleton getInstance() {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v4/EnumSingleton.java
type EnumSingleton (line 4) | public enum EnumSingleton {
method method (line 8) | public void method() {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v4/TestEnumSingleton.java
class TestEnumSingleton (line 3) | public class TestEnumSingleton {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_deserialization/DemoSingleton.java
class DemoSingleton (line 5) | public class DemoSingleton implements Serializable {
class LazyHolder (line 8) | private static class LazyHolder{
method getInstance (line 12) | public static DemoSingleton getInstance(){
method readResolve (line 17) | protected Object readResolve() {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_deserialization/SerializationTest.java
class SerializationTest (line 12) | public class SerializationTest {
method main (line 14) | public static void main(String[] args) throws FileNotFoundException, I...
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_reflection/ReflectionSingleton.java
class ReflectionSingleton (line 3) | public class ReflectionSingleton {
method ReflectionSingleton (line 6) | private ReflectionSingleton() {
method getInstance (line 10) | public static synchronized ReflectionSingleton getInstance() {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_reflection/ReflectionTest.java
class ReflectionTest (line 5) | public class ReflectionTest {
method main (line 7) | public static void main(String[] args) {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v1/EagerSingleton.java
class EagerSingleton (line 4) | public class EagerSingleton {
method EagerSingleton (line 8) | private EagerSingleton() {}
method getInstance (line 10) | public static EagerSingleton getInstance() {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v1_1/StaticBlockSingleton.java
class StaticBlockSingleton (line 4) | public class StaticBlockSingleton {
method StaticBlockSingleton (line 8) | private StaticBlockSingleton() {}
method getInstance (line 18) | public static StaticBlockSingleton getInstance() {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2/LazySingleton.java
class LazySingleton (line 4) | public class LazySingleton {
method LazySingleton (line 7) | private LazySingleton(){}
method getInstance (line 9) | public static LazySingleton getInstance(){
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2_1/ThreadSafeSingleton.java
class ThreadSafeSingleton (line 4) | public class ThreadSafeSingleton {
method ThreadSafeSingleton (line 8) | private ThreadSafeSingleton(){}
method getInstance (line 10) | public static synchronized ThreadSafeSingleton getInstance() {
FILE: patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2_2/DoubleCheckLockingSingleton.java
class DoubleCheckLockingSingleton (line 4) | public class DoubleCheckLockingSingleton {
method DoubleCheckLockingSingleton (line 8) | private DoubleCheckLockingSingleton() {}
method getInstance (line 10) | public static DoubleCheckLockingSingleton getInstance() {
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/injection/AppMonitorConstructorInjection.java
class AppMonitorConstructorInjection (line 6) | public class AppMonitorConstructorInjection {
method AppMonitorConstructorInjection (line 10) | public AppMonitorConstructorInjection(INotifier notifier) {
method notify (line 15) | public void notify(String message) {
method main (line 19) | public static void main(String[] args) {
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/injection/AppMonitorSetterInjection.java
class AppMonitorSetterInjection (line 6) | public class AppMonitorSetterInjection {
method SetNotifier (line 10) | public void SetNotifier(INotifier notifier) {
method notify (line 15) | public void notify(String message) {
method main (line 19) | public static void main(String[] args) {
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/AppMonitorIOC.java
class AppMonitorIOC (line 3) | public class AppMonitorIOC {
method notify (line 8) | public void notify(String message) {
method main (line 16) | public static void main(String[] args) {
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/EmailSender.java
class EmailSender (line 3) | public class EmailSender implements INotifier {
method notify (line 5) | public void notify(String message) {
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/EventLogWriter.java
class EventLogWriter (line 3) | public class EventLogWriter implements INotifier {
method notify (line 5) | public void notify(String message) {
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/INotifier.java
type INotifier (line 4) | public interface INotifier {
method notify (line 5) | public void notify(String message);
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/SMSSender.java
class SMSSender (line 3) | public class SMSSender implements INotifier {
method notify (line 5) | public void notify(String message) {
FILE: patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/nodip/AppMonitorNoDIP.java
class AppMonitorNoDIP (line 3) | public class AppMonitorNoDIP {
method notify (line 9) | public void notify(String message) {
method main (line 16) | public static void main(String[] args) {
class EventLogWriter (line 22) | class EventLogWriter {
method write (line 24) | public void write(String message) {
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/IHdmi.java
type IHdmi (line 4) | public interface IHdmi {
method openHdmi (line 6) | public void openHdmi();
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/IVga.java
type IVga (line 4) | public interface IVga {
method openVga (line 6) | public void openVga();
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/LaptopMain.java
class LaptopMain (line 3) | public class LaptopMain {
method main (line 5) | public static void main(String[] args) {
method operateHdmiLaptop (line 14) | static void operateHdmiLaptop(IHdmi hdmiDisplay) {
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/Vga2HdmiAdapter.java
class Vga2HdmiAdapter (line 4) | public class Vga2HdmiAdapter implements IHdmi {
method Vga2HdmiAdapter (line 8) | public Vga2HdmiAdapter(IVga vgaDisplay) {
method openHdmi (line 12) | public void openHdmi() {
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/VgaDisplay.java
class VgaDisplay (line 4) | public class VgaDisplay implements IVga {
method openVga (line 6) | public void openVga() {
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/ArrayStack.java
class ArrayStack (line 4) | public class ArrayStack<T> implements IStack<T> {
method ArrayStack (line 14) | public ArrayStack(int initialCapacity) {
method ArrayStack (line 26) | public ArrayStack() {
method isEmpty (line 34) | public boolean isEmpty() {
method pop (line 41) | public T pop() throws StackException {
method peek (line 51) | public T peek() throws StackException {
method push (line 60) | public void push(T e) throws StackException {
method clear (line 70) | public void clear() {
method toString (line 80) | public String toString() {
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/ArrayStackMain.java
class ArrayStackMain (line 3) | public class ArrayStackMain {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/IStack.java
type IStack (line 4) | public interface IStack<T> {
method isEmpty (line 5) | public boolean isEmpty();
method pop (line 7) | public T pop() throws StackException;
method peek (line 9) | public T peek() throws StackException;
method push (line 11) | public void push (T e) throws StackException;
method clear (line 13) | public void clear();
FILE: patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/StackException.java
class StackException (line 3) | public class StackException extends RuntimeException {
method StackException (line 7) | public StackException(String name) {
method StackException (line 11) | public StackException() {
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/Client.java
class Client (line 3) | public class Client {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloadImplementor.java
type FileDownloadImplementor (line 4) | public interface FileDownloadImplementor {
method downloadFile (line 6) | public Object downloadFile(String path);
method storeFile (line 8) | public boolean storeFile(Object object);
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloaderAbstraction.java
type FileDownloaderAbstraction (line 4) | public interface FileDownloaderAbstraction {
method download (line 6) | public Object download(String path);
method store (line 8) | public boolean store(Object object);
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloaderAbstractionImpl.java
class FileDownloaderAbstractionImpl (line 4) | public class FileDownloaderAbstractionImpl implements FileDownloaderAbst...
method FileDownloaderAbstractionImpl (line 7) | public FileDownloaderAbstractionImpl(FileDownloadImplementor provider) {
method download (line 12) | @Override
method store (line 17) | @Override
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/LinuxFileDownloadImplementor.java
class LinuxFileDownloadImplementor (line 4) | public class LinuxFileDownloadImplementor implements FileDownloadImpleme...
method downloadFile (line 6) | @Override
method storeFile (line 11) | @Override
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/WindowsFileDownloadImplementor.java
class WindowsFileDownloadImplementor (line 4) | public class WindowsFileDownloadImplementor implements FileDownloadImple...
method downloadFile (line 6) | @Override
method storeFile (line 11) | @Override
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/abstraction_change/FileDownloaderAbstraction.java
type FileDownloaderAbstraction (line 3) | public interface FileDownloaderAbstraction {
method download (line 4) | public Object download(String path);
method store (line 6) | public boolean store(Object object);
method delete (line 9) | public boolean delete(String object);
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/abstraction_change/FileDownloaderAbstractionImpl.java
class FileDownloaderAbstractionImpl (line 6) | public class FileDownloaderAbstractionImpl implements FileDownloaderAbst...
method FileDownloaderAbstractionImpl (line 10) | public FileDownloaderAbstractionImpl(FileDownloadImplementor provider) {
method download (line 15) | @Override
method store (line 20) | @Override
method delete (line 25) | @Override
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/FileDownloadImplementor.java
type FileDownloadImplementor (line 3) | public interface FileDownloadImplementor {
method downloadFile (line 4) | public Object downloadFile(String path);
method storeFile (line 6) | public boolean storeFile(Object object);
method delete (line 9) | public boolean delete(String object);
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/LinuxFileDownloadImplementor.java
class LinuxFileDownloadImplementor (line 3) | public class LinuxFileDownloadImplementor implements FileDownloadImpleme...
method downloadFile (line 4) | @Override
method storeFile (line 9) | @Override
method delete (line 15) | @Override
FILE: patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/WindowsFileDownloadImplementor.java
class WindowsFileDownloadImplementor (line 3) | public class WindowsFileDownloadImplementor implements FileDownloadImple...
method downloadFile (line 5) | @Override
method storeFile (line 10) | @Override
method delete (line 16) | @Override
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/BaseEmployee.java
class BaseEmployee (line 5) | public abstract class BaseEmployee implements IEmployee {
method getName (line 11) | @Override
method setName (line 16) | @Override
method getEmployeeId (line 21) | @Override
method setEmployeeId (line 26) | @Override
method getSubscriptions (line 31) | @Override
method setSubscriptions (line 36) | @Override
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/CompanyMain.java
class CompanyMain (line 6) | public class CompanyMain {
method main (line 8) | public static void main(String[] args) {
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Developer.java
class Developer (line 4) | public class Developer extends BaseEmployee {
method Developer (line 6) | public Developer(String name, int employeeId) {
method getCost (line 11) | public double getCost() {
method getSubscriptionCount (line 18) | public int getSubscriptionCount(SubscriptionType type) {
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/IEmployee.java
type IEmployee (line 6) | public interface IEmployee {
method getName (line 7) | public String getName();
method setName (line 9) | public void setName(String name);
method getEmployeeId (line 11) | public int getEmployeeId();
method setEmployeeId (line 13) | public void setEmployeeId(int employeeId);
method getSubscriptions (line 15) | public List<Subscription> getSubscriptions();
method setSubscriptions (line 17) | public void setSubscriptions(List<Subscription> subscriptions);
method getCost (line 19) | public double getCost();
method getSubscriptionCount (line 21) | public int getSubscriptionCount(SubscriptionType type);
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Manager.java
class Manager (line 6) | public class Manager extends BaseEmployee {
method Manager (line 10) | public Manager(String name, int employeeId,
method getTeamMembers (line 19) | public List<IEmployee> getTeamMembers() {
method setTeamMembers (line 23) | public void setTeamMembers(List<IEmployee> teamMembers) {
method getCost (line 27) | @Override
method getSubscriptionCount (line 42) | @Override
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Subscription.java
class Subscription (line 3) | public class Subscription {
method getsType (line 8) | public SubscriptionType getsType() {
method setsType (line 11) | public void setsType(SubscriptionType sType) {
method getName (line 14) | public String getName() {
method setName (line 17) | public void setName(String name) {
method getCost (line 20) | public double getCost() {
method setCost (line 23) | public void setCost(double cost) {
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/SubscriptionType.java
type SubscriptionType (line 3) | public enum SubscriptionType {
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Util.java
class Util (line 3) | public class Util {
method printCostDetails (line 5) | public static void printCostDetails(IEmployee employee) {
method getIntellijSubscription (line 14) | public static Subscription getIntellijSubscription() {
method getJProfilierSubscription (line 22) | public static Subscription getJProfilierSubscription() {
method getCSDNSubscription (line 30) | public static Subscription getCSDNSubscription() {
method getTrainingSubscription (line 38) | public static Subscription getTrainingSubscription() {
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/CompositePatternMain.java
class CompositePatternMain (line 4) | public class CompositePatternMain {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/Developer.java
class Developer (line 6) | public class Developer implements IEmployee {
method Developer (line 11) | public Developer(String name, double salary) {
method add (line 16) | @Override
method remove (line 22) | @Override
method getChild (line 28) | @Override
method getName (line 34) | @Override
method getSalary (line 39) | @Override
method print (line 44) | @Override
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/IEmployee.java
type IEmployee (line 4) | public interface IEmployee {
method add (line 5) | public void add(IEmployee employee);
method remove (line 6) | public void remove(IEmployee employee);
method getChild (line 7) | public IEmployee getChild(int i);
method getName (line 8) | public String getName();
method getSalary (line 9) | public double getSalary();
method print (line 10) | public void print();
FILE: patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/Manager.java
class Manager (line 7) | public class Manager implements IEmployee {
method Manager (line 13) | public Manager(String name, double salary) {
method add (line 18) | @Override
method remove (line 23) | @Override
method getChild (line 28) | @Override
method getName (line 33) | @Override
method getSalary (line 38) | @Override
method print (line 43) | @Override
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/ArtificialScentDecorator.java
class ArtificialScentDecorator (line 4) | public class ArtificialScentDecorator extends Decorator {
method ArtificialScentDecorator (line 6) | protected ArtificialScentDecorator(BakeryComponent baseComponent) {
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/BakeryComponent.java
type BakeryComponent (line 4) | public interface BakeryComponent {
method getName (line 6) | public String getName();
method getPrice (line 8) | public double getPrice();
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CakeBase.java
class CakeBase (line 4) | public class CakeBase implements BakeryComponent {
method getName (line 9) | @Override
method getPrice (line 14) | @Override
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CherryDecorator.java
class CherryDecorator (line 4) | public class CherryDecorator extends Decorator {
method CherryDecorator (line 6) | protected CherryDecorator(BakeryComponent baseComponent) {
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CreamDecorator.java
class CreamDecorator (line 4) | public class CreamDecorator extends Decorator {
method CreamDecorator (line 6) | protected CreamDecorator(BakeryComponent baseComponent) {
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/Decorator.java
class Decorator (line 4) | public abstract class Decorator implements BakeryComponent {
method Decorator (line 11) | protected Decorator(BakeryComponent baseComponent) {
method getName (line 15) | @Override
method getPrice (line 20) | @Override
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/DecoratorMain.java
class DecoratorMain (line 3) | public class DecoratorMain {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/NameCardDecorator.java
class NameCardDecorator (line 4) | public class NameCardDecorator extends Decorator {
method NameCardDecorator (line 6) | protected NameCardDecorator(BakeryComponent baseComponent) {
method getName (line 12) | @Override
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/PastryBase.java
class PastryBase (line 4) | public class PastryBase implements BakeryComponent {
method getName (line 9) | @Override
method getPrice (line 14) | @Override
FILE: patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/Util.java
class Util (line 3) | public class Util {
method printProductDetails (line 4) | public static void printProductDetails(BakeryComponent bComponent) {
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/CostManager.java
class CostManager (line 4) | public class CostManager implements ICosting {
method applyDiscount (line 6) | @Override
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/FacadeMain.java
class FacadeMain (line 3) | public class FacadeMain {
method main (line 5) | public static void main(String[] args) {
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/ICosting.java
type ICosting (line 4) | public interface ICosting {
method applyDiscount (line 5) | public float applyDiscount(float price, float discountPercent);
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IInventory.java
type IInventory (line 4) | public interface IInventory {
method update (line 5) | public void update(int productId);
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/ILogistics.java
type ILogistics (line 4) | public interface ILogistics {
method shipProducts (line 5) | public void shipProducts(String productName, String shippingAddress);
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IOrderVerify.java
type IOrderVerify (line 4) | public interface IOrderVerify {
method verifyShippingAddress (line 5) | public boolean verifyShippingAddress(int pincode);
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IPaymentGateway.java
type IPaymentGateway (line 4) | public interface IPaymentGateway {
method verifyCardDetails (line 5) | public boolean verifyCardDetails(String cardNo);
method processPayment (line 6) | public boolean processPayment(String cardNo, float cost);
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/InventoryManager.java
class InventoryManager (line 4) | public class InventoryManager implements IInventory {
method update (line 6) | @Override
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/LogisticsManager.java
class LogisticsManager (line 4) | public class LogisticsManager implements ILogistics {
method shipProducts (line 6) | @Override
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/NoFacadeMain.java
class NoFacadeMain (line 4) | public class NoFacadeMain {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OnlineShoppingFacade.java
class OnlineShoppingFacade (line 3) | public class OnlineShoppingFacade {
method finalizeOrder (line 10) | public void finalizeOrder(OrderDetails orderDetails) {
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OrderDetails.java
class OrderDetails (line 5) | public class OrderDetails {
method OrderDetails (line 18) | public OrderDetails(String productName, String prodDescription, float ...
method getProductNo (line 33) | public int getProductNo() {
method setProductNo (line 37) | public void setProductNo(int productNo) {
method getProductName (line 41) | public String getProductName() {
method setProductName (line 45) | public void setProductName(String productName) {
method getProductDescription (line 49) | public String getProductDescription() {
method setProductDescription (line 53) | public void setProductDescription(String productDescription) {
method getPrice (line 57) | public float getPrice() {
method setPrice (line 61) | public void setPrice(float price) {
method getDiscountPercent (line 65) | public float getDiscountPercent() {
method setDiscountPercent (line 69) | public void setDiscountPercent(float discountPercent) {
method getAddressLine1 (line 73) | public String getAddressLine1() {
method setAddressLine1 (line 77) | public void setAddressLine1(String addressLine1) {
method getAddressLine2 (line 81) | public String getAddressLine2() {
method setAddressLine2 (line 85) | public void setAddressLine2(String addressLine2) {
method getPinCode (line 89) | public int getPinCode() {
method setPinCode (line 93) | public void setPinCode(int pinCode) {
method getCardNo (line 97) | public String getCardNo() {
method setCardNo (line 101) | public void setCardNo(String cardNo) {
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OrderVerificationManager.java
class OrderVerificationManager (line 4) | public class OrderVerificationManager implements IOrderVerify {
method verifyShippingAddress (line 6) | @Override
FILE: patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/PaymentGatewayManager.java
class PaymentGatewayManager (line 4) | public class PaymentGatewayManager implements IPaymentGateway {
method verifyCardDetails (line 6) | @Override
method processPayment (line 14) | @Override
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/Folder.java
class Folder (line 4) | public class Folder implements IFolder {
method performOperations (line 6) | public void performOperations() {
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/FolderProxy.java
class FolderProxy (line 4) | public class FolderProxy implements IFolder {
method FolderProxy (line 9) | public FolderProxy(User user) {
method performOperations (line 13) | public void performOperations() {
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/IFolder.java
type IFolder (line 4) | public interface IFolder {
method performOperations (line 6) | public void performOperations();
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/ProxyDesignPatternMain.java
class ProxyDesignPatternMain (line 4) | public class ProxyDesignPatternMain {
method main (line 6) | public static void main(String[] args) {
FILE: patterns/structural/proxy/src/main/java/io/spring2go/corespring/User.java
class User (line 3) | public class User {
method User (line 8) | public User(String username, String password) {
method getUserName (line 13) | public String getUserName() {
method getPassword (line 17) | public String getPassword() {
Condensed preview — 202 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (188K chars).
[
{
"path": ".gitignore",
"chars": 365,
"preview": "target/\n!.mvn/wrapper/maven-wrapper.jar\n\n### STS ###\n.apt_generated\n.classpath\n.factorypath\n.project\n.settings\n.springBe"
},
{
"path": "LICENSE",
"chars": 1070,
"preview": "MIT License\n\nCopyright (c) 2018 spring2go.com\n\nPermission is hereby granted, free of charge, to any person obtaining a c"
},
{
"path": "README.md",
"chars": 2930,
"preview": "core-spring-patterns\r\n======\r\n\r\nSpring核心原理和模式,波波微课\r\n\r\n## 大纲\r\n\r\n### 1. 创建模式\r\n\r\n名称 | 代码 | ppt | 视频 |\r\n----|-----|-----|---"
},
{
"path": "patterns/behavior/chain_of_responsibility/pom.xml",
"chars": 676,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ApproveHandler.java",
"chars": 189,
"preview": "package io.spring2go.corespring;\r\n\r\n// Handler\r\npublic interface ApproveHandler {\r\n\t\r\n\tpublic void setNextHandler(Approv"
},
{
"path": "patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ClientProgram.java",
"chars": 429,
"preview": "package io.spring2go.corespring;\r\n\r\n// Client\r\npublic class ClientProgram {\r\n\r\n\tpublic static void main(String[] args) {"
},
{
"path": "patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/HR.java",
"chars": 765,
"preview": "package io.spring2go.corespring;\r\n\r\n//ConcreteHandler\r\npublic class HR implements ApproveHandler {\r\n\r\n\tprivate ApproveHa"
},
{
"path": "patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/Leave.java",
"chars": 563,
"preview": "package io.spring2go.corespring;\r\n\r\n// 请求对象\r\npublic class Leave {\r\n\tprivate int leaveId;\r\n\tprivate int numberOfDays;\r\n\t\r"
},
{
"path": "patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/ProjectLeader.java",
"chars": 697,
"preview": "package io.spring2go.corespring;\r\n\r\n//ConcreteHandler\r\npublic class ProjectLeader implements ApproveHandler {\r\n\r\n\tprivat"
},
{
"path": "patterns/behavior/chain_of_responsibility/src/main/java/io/spring2go/corespring/TeamLeader.java",
"chars": 693,
"preview": "package io.spring2go.corespring;\r\n\r\n// ConcreteHandler\r\npublic class TeamLeader implements ApproveHandler {\r\n\t\r\n\tprivate"
},
{
"path": "patterns/behavior/command/pom.xml",
"chars": 662,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/CloseFileCommand.java",
"chars": 325,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Concrete Command\r\npublic class CloseFileCommand implements Command {\r\n\r\n\t"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/Command.java",
"chars": 121,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Command interface\r\npublic interface Command {\r\n\t\r\n\tvoid execute();\r\n\t\r\n}\r"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileInvoker.java",
"chars": 238,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Invoker\r\npublic class FileInvoker {\r\n\r\n\tprivate Command command;\r\n\t\r\n\tpub"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemClient.java",
"chars": 815,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Client\r\npublic class FileSystemClient {\r\n\r\n\tpublic static void main(Strin"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemReceiver.java",
"chars": 168,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Receiver Interface\r\npublic interface FileSystemReceiver {\r\n\tvoid openFile"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/FileSystemReceiverUtil.java",
"chars": 400,
"preview": "package io.spring2go.corespring.command;\r\n\r\npublic class FileSystemReceiverUtil {\r\n\t\r\n\tpublic static FileSystemReceiver "
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/OpenFileCommand.java",
"chars": 382,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Concrete Command\r\npublic class OpenFileCommand implements Command {\r\n\r\n\tp"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/UnixFileSystemReceiver.java",
"chars": 418,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Receiver\r\npublic class UnixFileSystemReceiver implements FileSystemReceiv"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/WindowsFileSystemReceiver.java",
"chars": 430,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Receiver\r\npublic class WindowsFileSystemReceiver implements FileSystemRec"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/WriteFileCommand.java",
"chars": 325,
"preview": "package io.spring2go.corespring.command;\r\n\r\n// Concrete Command\r\npublic class WriteFileCommand implements Command {\r\n\r\n\t"
},
{
"path": "patterns/behavior/command/src/main/java/io/spring2go/corespring/command/uml.ucls",
"chars": 9161,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<class-diagram version=\"1.2.2\" icons=\"true\" always-add-relationships=\"false\" gen"
},
{
"path": "patterns/behavior/interpreter/pom.xml",
"chars": 668,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/App.java",
"chars": 1527,
"preview": "package io.spring2go.corespring.interpreter;\r\n\r\nimport java.util.Stack;\r\n\r\n// Interpreter\r\npublic class App {\r\n\r\n\t/**\r\n\t"
},
{
"path": "patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/Expression.java",
"chars": 194,
"preview": "package io.spring2go.corespring.interpreter;\r\n\r\n// Expression\r\npublic abstract class Expression {\r\n\t\r\n\tpublic abstract i"
},
{
"path": "patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/MinusExpression.java",
"chars": 560,
"preview": "package io.spring2go.corespring.interpreter;\r\n\r\n// MinusExpression\r\npublic class MinusExpression extends Expression {\r\n\r"
},
{
"path": "patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/MultiplyExpression.java",
"chars": 569,
"preview": "package io.spring2go.corespring.interpreter;\r\n\r\n// MultiplyExpression\r\npublic class MultiplyExpression extends Expressio"
},
{
"path": "patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/NumberExpression.java",
"chars": 436,
"preview": "package io.spring2go.corespring.interpreter;\r\n\r\n// NumberExpression\r\npublic class NumberExpression extends Expression {\r"
},
{
"path": "patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/PlusExpression.java",
"chars": 557,
"preview": "package io.spring2go.corespring.interpreter;\r\n\r\n// PlusExpression\r\npublic class PlusExpression extends Expression {\r\n\r\n\t"
},
{
"path": "patterns/behavior/interpreter/src/main/java/io/spring2go/corespring/interpreter/uml.ucls",
"chars": 6977,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<class-diagram version=\"1.2.2\" icons=\"true\" always-add-relationships=\"false\" gen"
},
{
"path": "patterns/behavior/iterator/pom.xml",
"chars": 663,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/App.java",
"chars": 1397,
"preview": "package io.spring2go.corespring.iterator;\r\n\r\n// Client App\r\npublic class App {\r\n\r\n\tpublic static void main(String[] args"
},
{
"path": "patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/Channel.java",
"chars": 478,
"preview": "package io.spring2go.corespring.iterator;\r\n\r\npublic class Channel {\r\n\tprivate double frequency;\r\n\tprivate ChannelTypeEnu"
},
{
"path": "patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollection.java",
"chars": 243,
"preview": "package io.spring2go.corespring.iterator;\r\n\r\n// Aggregate\r\npublic interface ChannelCollection {\r\n\t\r\n\tpublic void addChan"
},
{
"path": "patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelCollectionImpl.java",
"chars": 1375,
"preview": "package io.spring2go.corespring.iterator;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\n// ConcreteAggregate"
},
{
"path": "patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelIterator.java",
"chars": 159,
"preview": "package io.spring2go.corespring.iterator;\r\n\r\n// Iterator\r\npublic interface ChannelIterator {\r\n\t\r\n\tpublic boolean hasNext"
},
{
"path": "patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/ChannelTypeEnum.java",
"chars": 112,
"preview": "package io.spring2go.corespring.iterator;\r\n\r\npublic enum ChannelTypeEnum {\r\n\tENGLISH, CHINESE, FRENCH, ALL;\r\n}\r\n"
},
{
"path": "patterns/behavior/iterator/src/main/java/io/spring2go/corespring/iterator/uml.ucls",
"chars": 7511,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<class-diagram version=\"1.2.2\" icons=\"true\" always-add-relationships=\"false\" gen"
},
{
"path": "patterns/behavior/observer/pom.xml",
"chars": 661,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Follower.java",
"chars": 468,
"preview": "package io.spring2go.patterns.observer;\r\n\r\npublic class Follower implements Observer {\r\n\t\r\n\tprivate String followerName;"
},
{
"path": "patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Observer.java",
"chars": 182,
"preview": "package io.spring2go.patterns.observer;\r\n\r\n// The Observers are notified when the Subject changes\r\npublic interface Obse"
},
{
"path": "patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/ObserverPatternMain.java",
"chars": 855,
"preview": "package io.spring2go.patterns.observer;\r\n\r\npublic class ObserverPatternMain {\r\n\r\n\tpublic static void main(String[] args)"
},
{
"path": "patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/OfficialAccount.java",
"chars": 945,
"preview": "package io.spring2go.patterns.observer;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\npublic class OfficialA"
},
{
"path": "patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/Subject.java",
"chars": 259,
"preview": "package io.spring2go.patterns.observer;\r\n\r\n// interface for adding, deleting \r\n// and updating all observers\r\npublic int"
},
{
"path": "patterns/behavior/observer/src/main/java/io/spring2go/patterns/observer/uml.ucls",
"chars": 4128,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<class-diagram version=\"1.2.2\" icons=\"true\" always-add-relationships=\"false\" gen"
},
{
"path": "patterns/behavior/strategy/pom.xml",
"chars": 663,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/HeapSortStrategy.java",
"chars": 245,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\nimport java.util.List;\r\n\r\npublic class HeapSortStrategy implements SortingS"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/MergeSortStrategy.java",
"chars": 273,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\nimport java.util.List;\r\n\r\n// ConcreteStrategy\r\npublic class MergeSortStrate"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/QuickSortStrategy.java",
"chars": 273,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\nimport java.util.List;\r\n\r\n// ConcreteStrategy\r\npublic class QuickSortStrate"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingMainV1.java",
"chars": 611,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\nimport java.util.Arrays;\r\nimport java.util.List;\r\n\r\npublic class SortingMai"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingMainV2.java",
"chars": 697,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\nimport java.util.Arrays;\r\nimport java.util.List;\r\n\r\npublic class SortingMai"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingManagerV1.java",
"chars": 993,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\nimport java.util.List;\r\n\r\npublic class SortingManagerV1 {\r\n\tList list;\r\n\r\n\t"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingManagerV2.java",
"chars": 898,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\nimport java.util.List;\r\n\r\npublic class SortingManagerV2 {\r\n\tSortingStrategy"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingStrategy.java",
"chars": 156,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\nimport java.util.List;\r\n\r\n// Strategy\r\npublic interface SortingStrategy {\r\n"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/SortingType.java",
"chars": 112,
"preview": "package io.spring2go.corespring.strategy;\r\n\r\npublic enum SortingType {\r\n\tMERGE_SORT, QUICK_SORT, HEAP_SORT;\r\n}\r\n"
},
{
"path": "patterns/behavior/strategy/src/main/java/io/spring2go/corespring/strategy/uml.ucls",
"chars": 5761,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<class-diagram version=\"1.2.2\" icons=\"true\" always-add-relationships=\"false\" gen"
},
{
"path": "patterns/behavior/template/pom.xml",
"chars": 670,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/behavior/template/src/main/java/io/spring2go/patterns/template/CSVDataParser.java",
"chars": 287,
"preview": "package io.spring2go.patterns.template;\r\n\r\npublic class CSVDataParser extends DataParser {\r\n\r\n\t@Override\r\n\tvoid readData"
},
{
"path": "patterns/behavior/template/src/main/java/io/spring2go/patterns/template/DataParser.java",
"chars": 408,
"preview": "package io.spring2go.patterns.template;\r\n\r\nabstract class DataParser {\r\n\t\r\n\t// generic data processing flow\r\n\tpublic fin"
},
{
"path": "patterns/behavior/template/src/main/java/io/spring2go/patterns/template/DatabaseDataParser.java",
"chars": 290,
"preview": "package io.spring2go.patterns.template;\r\n\r\npublic class DatabaseDataParser extends DataParser {\r\n\r\n\t@Override\r\n\tvoid rea"
},
{
"path": "patterns/behavior/template/src/main/java/io/spring2go/patterns/template/TemplateMethodMain.java",
"chars": 365,
"preview": "package io.spring2go.patterns.template;\r\n\r\npublic class TemplateMethodMain {\r\n\r\n\tpublic static void main(String[] args) "
},
{
"path": "patterns/creation/abstract-factory/pom.xml",
"chars": 670,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/AbstractFactoryMain.java",
"chars": 480,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\npublic class AbstractFactoryMain {\r\n\r\n\tpublic static void main(Strin"
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseElectricalFactory.java",
"chars": 270,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\npublic class ChineseElectricalFactory implements IElectricalFactory "
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseFan.java",
"chars": 285,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\npublic class ChineseFan implements IFan {\r\n\r\n\tpublic void swithOn() "
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ChineseTubeLight.java",
"chars": 403,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\npublic class ChineseTubeLight implements ITubeLight {\r\n\tpublic void "
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/IElectricalFactory.java",
"chars": 163,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\n// 电器工厂接口\r\npublic interface IElectricalFactory {\r\n\t\r\n\tIFan createFan"
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/IFan.java",
"chars": 149,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\n// 电扇接口\r\npublic interface IFan {\r\n\t\r\n\tpublic void swithOn();\r\n\t\r\n\tpu"
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/ITubeLight.java",
"chars": 181,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\n// 日光灯接口\r\npublic interface ITubeLight {\r\n\tpublic void swithOn();\r\n\t\r"
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USElectricalFactory.java",
"chars": 254,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\npublic class USElectricalFactory implements IElectricalFactory {\r\n\r"
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USFan.java",
"chars": 270,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\npublic class USFan implements IFan {\r\n\r\n\tpublic void swithOn() {\r\n\t\t"
},
{
"path": "patterns/creation/abstract-factory/src/main/java/io/spring2go/corespring/abstractfactory/USTubeLight.java",
"chars": 378,
"preview": "package io.spring2go.corespring.abstractfactory;\r\n\r\npublic class USTubeLight implements ITubeLight {\r\n\tpublic void swith"
},
{
"path": "patterns/creation/builder/pom.xml",
"chars": 666,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/AndroidPhoneBuilder.java",
"chars": 745,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 安卓手机具体构建者\"ConcreteBuilder\"\r\npublic class AndroidPhoneBuilder imple"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Battery.java",
"chars": 123,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 电池容量\r\npublic enum Battery {\r\n\tMAH_1000,\r\n\tMAH_1500,\r\n\tMAH_2000\r\n}\r"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/ClassicBuilderMain.java",
"chars": 747,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 客户程序\r\npublic class ClassicBuilderMain {\r\n\r\n\tpublic static void mai"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/IMobilePhoneBuilder.java",
"chars": 227,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 这个是构建者\"Builder\"接口\r\npublic interface IMobilePhoneBuilder {\r\n\tvoid b"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Manufacturer.java",
"chars": 288,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 这个是导演\"Director\"\r\npublic class Manufacturer {\r\n\tpublic void constru"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/MobilePhone.java",
"chars": 1305,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 这是\"Product\"产品类\r\npublic class MobilePhone {\r\n\t// 部件类型\r\n\tprivate Str"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/OperatingSystem.java",
"chars": 150,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 操作系统\r\npublic enum OperatingSystem {\r\n\tANDROID,\r\n\tWINDOWS_MOBILE,\r\n"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/ScreenType.java",
"chars": 187,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 屏幕类型\r\npublic enum ScreenType {\r\n\tSCREENTYPE_TOUCH_CAPACITIVE, // 电"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/Stylus.java",
"chars": 96,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// 触控笔\r\npublic enum Stylus {\r\n\tYES,\r\n\tNO\r\n}\r\n"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/classicbuilder/WindowsPhoneBuilder.java",
"chars": 742,
"preview": "package io.spring2go.corespring.classicbuilder;\r\n\r\n// Windows手机具体构建者\"ConcreteBuilder\"\r\npublic class WindowsPhoneBuilder "
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/javabean/JavaBeanMain.java",
"chars": 327,
"preview": "package io.spring2go.corespring.javabean;\r\n\r\npublic class JavaBeanMain {\r\n\r\n\t// JavaBean构造对象\r\n\tpublic static void main(S"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/javabean/User.java",
"chars": 883,
"preview": "package io.spring2go.corespring.javabean;\r\n\r\n// JavaBeans模式\r\npublic class User {\r\n\t\r\n\t//region 私有成员\r\n\tprivate String fir"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/modernbuilder/ModernBuilderMain.java",
"chars": 625,
"preview": "package io.spring2go.corespring.modernbuilder;\r\n\r\npublic class ModernBuilderMain {\r\n\r\n\tpublic static void main(String[] "
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/modernbuilder/User.java",
"chars": 1820,
"preview": "package io.spring2go.corespring.modernbuilder;\r\n\r\n// 流畅接口(Fluent Interface)\r\npublic class User {\r\n\t// 所有字段final\r\n\tprivat"
},
{
"path": "patterns/creation/builder/src/main/java/io/spring2go/corespring/telescoping_constructor/User.java",
"chars": 1213,
"preview": "package io.spring2go.corespring.telescoping_constructor;\r\n\r\n// 显微镜构造函数模式\r\npublic class User {\r\n\t\r\n\t// region 私有成员\r\n\tpriv"
},
{
"path": "patterns/creation/factory-method/pom.xml",
"chars": 668,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/CeilingFan.java",
"chars": 312,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\n// 吊扇\r\npublic class CeilingFan implements IFan {\r\n\r\n\t@Override\r\n\tpubli"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/CeilingFanFactory.java",
"chars": 186,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\npublic class CeilingFanFactory implements IFanFactory {\r\n\r\n\t@Override\r"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/ExhaustFan.java",
"chars": 305,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\npublic class ExhaustFan implements IFan {\r\n\r\n\t@Override\r\n\tpublic void "
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/ExhaustFanFactory.java",
"chars": 186,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\npublic class ExhaustFanFactory implements IFanFactory {\r\n\r\n\t@Override\r"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/FactoryMethodMain.java",
"chars": 326,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\n//客户端代码\r\npublic class FactoryMethodMain {\r\n\t\r\n\tpublic static void main"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/IFan.java",
"chars": 138,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\npublic interface IFan {\r\n\t\r\n\tpublic void swithOn();\r\n\t\r\n\tpublic void s"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/IFanFactory.java",
"chars": 105,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\npublic interface IFanFactory {\r\n\tIFan createFan();\r\n}\r\n"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/PropellerFan.java",
"chars": 325,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\n// 螺旋桨式通风扇\r\npublic class PropellerFan implements IFan {\r\n\r\n\t@Override\r"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/PropellerFanFactory.java",
"chars": 190,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\npublic class PropellerFanFactory implements IFanFactory {\r\n\r\n\t@Overrid"
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/TableFan.java",
"chars": 308,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\n// 台扇\r\npublic class TableFan implements IFan {\r\n\r\n\t@Override\r\n\tpublic "
},
{
"path": "patterns/creation/factory-method/src/main/java/io/spring2go/corespring/factorymethod/TableFanFactory.java",
"chars": 182,
"preview": "package io.spring2go.corespring.factorymethod;\r\n\r\npublic class TableFanFactory implements IFanFactory {\r\n\r\n\t@Override\r\n\t"
},
{
"path": "patterns/creation/simple-factory/pom.xml",
"chars": 668,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/nofactory/NoFactoryMain.java",
"chars": 295,
"preview": "package io.spring2go.corespring.nofactory;\r\n\r\npublic class NoFactoryMain {\r\n\r\n\tpublic static void main(String[] args) {\r"
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/CeilingFan.java",
"chars": 305,
"preview": "package io.spring2go.corespring.simplefactory;\r\n\r\npublic class CeilingFan implements IFan {\r\n\r\n\t@Override\r\n\tpublic void "
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/ExhaustFan.java",
"chars": 305,
"preview": "package io.spring2go.corespring.simplefactory;\r\n\r\npublic class ExhaustFan implements IFan {\r\n\r\n\t@Override\r\n\tpublic void "
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/FanFactory.java",
"chars": 369,
"preview": "package io.spring2go.corespring.simplefactory;\r\n\r\npublic class FanFactory implements IFanFactory {\r\n\r\n\t@Override\r\n\tpubli"
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/FanType.java",
"chars": 135,
"preview": "package io.spring2go.corespring.simplefactory;\r\n\r\npublic enum FanType {\r\n\t\r\n\tTableFan, //台扇\r\n\tCeilingFan, //吊扇\r\n\tExhaust"
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/IFan.java",
"chars": 138,
"preview": "package io.spring2go.corespring.simplefactory;\r\n\r\npublic interface IFan {\r\n\t\r\n\tpublic void swithOn();\r\n\t\r\n\tpublic void s"
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/IFanFactory.java",
"chars": 117,
"preview": "package io.spring2go.corespring.simplefactory;\r\n\r\npublic interface IFanFactory {\r\n\tIFan createFan(FanType type);\r\n}\r\n"
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/SimpleFactoryMain.java",
"chars": 311,
"preview": "package io.spring2go.corespring.simplefactory;\r\n\r\n// 客户端代码\r\npublic class SimpleFactoryMain {\r\n\r\n\tpublic static void main"
},
{
"path": "patterns/creation/simple-factory/src/main/java/io/spring2go/corespring/simplefactory/TableFan.java",
"chars": 301,
"preview": "package io.spring2go.corespring.simplefactory;\r\n\r\npublic class TableFan implements IFan {\r\n\r\n\t@Override\r\n\tpublic void sw"
},
{
"path": "patterns/creation/singleton/pom.xml",
"chars": 664,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v3/BillPughSingleton.java",
"chars": 359,
"preview": "package io.spring2go.corespring.singleton.v3;\r\n\r\n// 比尔.普夫单例\r\npublic class BillPughSingleton {\r\n\t// 私有构造函数,避免被客户端代码使用\r\n\tp"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v4/EnumSingleton.java",
"chars": 217,
"preview": "package io.spring2go.corespring.singleton.v4;\r\n\r\n// 枚举单例\r\npublic enum EnumSingleton {\r\n INSTANCE;\r\n \r\n // 添加单例方法\r\n"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton/v4/TestEnumSingleton.java",
"chars": 180,
"preview": "package io.spring2go.corespring.singleton.v4;\r\n\r\npublic class TestEnumSingleton {\r\n\r\n public static void main(String[]"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_deserialization/DemoSingleton.java",
"chars": 536,
"preview": "package io.spring2go.corespring.singleton_deserialization;\r\n\r\nimport java.io.Serializable;\r\n\r\npublic class DemoSingleton"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_deserialization/SerializationTest.java",
"chars": 1126,
"preview": "package io.spring2go.corespring.singleton_deserialization;\r\n\r\nimport java.io.FileInputStream;\r\nimport java.io.FileNotFou"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_reflection/ReflectionSingleton.java",
"chars": 408,
"preview": "package io.spring2go.corespring.singleton_reflection;\r\n\r\npublic class ReflectionSingleton {\r\n\tprivate static ReflectionS"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_reflection/ReflectionTest.java",
"chars": 673,
"preview": "package io.spring2go.corespring.singleton_reflection;\r\n\r\nimport java.lang.reflect.Constructor;\r\n\r\npublic class Reflectio"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v1/EagerSingleton.java",
"chars": 294,
"preview": "package io.spring2go.corespring.singleton_v1;\r\n\r\n// 提前初始化单例\r\npublic class EagerSingleton {\r\n\tprivate static final EagerS"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v1_1/StaticBlockSingleton.java",
"chars": 476,
"preview": "package io.spring2go.corespring.singleton_v1_1;\r\n\r\n// 静态初始化块单例\r\npublic class StaticBlockSingleton {\r\n\tprivate static fin"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2/LazySingleton.java",
"chars": 346,
"preview": "package io.spring2go.corespring.singleton_v2;\r\n\r\n// 延迟初始化单例\r\npublic class LazySingleton {\r\n private static LazySingle"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2_1/ThreadSafeSingleton.java",
"chars": 360,
"preview": "package io.spring2go.corespring.singleton_v2_1;\r\n\r\n// ̰߳ȫ\r\npublic class ThreadSafeSingleton {\r\n\tprivate static ThreadSaf"
},
{
"path": "patterns/creation/singleton/src/main/java/io/spring2go/corespring/singleton_v2_2/DoubleCheckLockingSingleton.java",
"chars": 523,
"preview": "package io.spring2go.corespring.singleton_v2_2;\r\n\r\n// 双重检查锁定单例\r\npublic class DoubleCheckLockingSingleton {\r\n\tprivate sta"
},
{
"path": "patterns/general/dependency-inversion/pom.xml",
"chars": 674,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/injection/AppMonitorConstructorInjection.java",
"chars": 676,
"preview": "package io.spring2go.corespring.injection;\r\n\r\nimport io.spring2go.corespring.ioc.EventLogWriter;\r\nimport io.spring2go.co"
},
{
"path": "patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/injection/AppMonitorSetterInjection.java",
"chars": 702,
"preview": "package io.spring2go.corespring.injection;\r\n\r\nimport io.spring2go.corespring.ioc.EventLogWriter;\r\nimport io.spring2go.co"
},
{
"path": "patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/AppMonitorIOC.java",
"chars": 450,
"preview": "package io.spring2go.corespring.ioc;\r\n\r\npublic class AppMonitorIOC {\r\n\t// 事件通知器\r\n\tprivate INotifier notifier = null;\r\n\t\r"
},
{
"path": "patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/EmailSender.java",
"chars": 212,
"preview": "package io.spring2go.corespring.ioc;\r\n\r\npublic class EmailSender implements INotifier {\r\n\r\n\tpublic void notify(String me"
},
{
"path": "patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/EventLogWriter.java",
"chars": 222,
"preview": "package io.spring2go.corespring.ioc;\r\n\r\npublic class EventLogWriter implements INotifier {\r\n\r\n\tpublic void notify(String"
},
{
"path": "patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/INotifier.java",
"chars": 123,
"preview": "package io.spring2go.corespring.ioc;\r\n\r\n// 事件通知器接口\r\npublic interface INotifier {\r\n\tpublic void notify(String message);\r\n"
},
{
"path": "patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/ioc/SMSSender.java",
"chars": 204,
"preview": "package io.spring2go.corespring.ioc;\r\n\r\npublic class SMSSender implements INotifier {\r\n\r\n\tpublic void notify(String mess"
},
{
"path": "patterns/general/dependency-inversion/src/main/java/io/spring2go/corespring/nodip/AppMonitorNoDIP.java",
"chars": 604,
"preview": "package io.spring2go.corespring.nodip;\r\n\r\npublic class AppMonitorNoDIP {\r\n\r\n\t// 负责将事件日志写到日志系统\r\n\tprivate EventLogWriter w"
},
{
"path": "patterns/structural/adapter/pom.xml",
"chars": 664,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/IHdmi.java",
"chars": 113,
"preview": "package io.spring2go.corespring.display;\r\n\r\n// HDMI接口\r\npublic interface IHdmi {\r\n\t\r\n\tpublic void openHdmi();\r\n}\r\n"
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/IVga.java",
"chars": 110,
"preview": "package io.spring2go.corespring.display;\r\n\r\n// VGA接口\r\npublic interface IVga {\r\n\t\r\n\tpublic void openVga();\r\n}\r\n"
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/LaptopMain.java",
"chars": 360,
"preview": "package io.spring2go.corespring.display;\r\n\r\npublic class LaptopMain {\r\n\r\n\tpublic static void main(String[] args) {\r\n\r\n\t\t"
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/Vga2HdmiAdapter.java",
"chars": 348,
"preview": "package io.spring2go.corespring.display;\r\n\r\n// VGA2HDMI适配器\r\npublic class Vga2HdmiAdapter implements IHdmi {\r\n\r\n\tprivate "
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/display/VgaDisplay.java",
"chars": 191,
"preview": "package io.spring2go.corespring.display;\r\n\r\n// 支持VGA接口的显示器\r\npublic class VgaDisplay implements IVga {\r\n\r\n\tpublic void o"
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/ArrayStack.java",
"chars": 1485,
"preview": "package io.spring2go.corespring.stack;\r\n\r\n// ջʵ\r\npublic class ArrayStack<T> implements IStack<T> {\r\n\r\n\tprivate static fi"
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/ArrayStackMain.java",
"chars": 457,
"preview": "package io.spring2go.corespring.stack;\r\n\r\npublic class ArrayStackMain {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\t"
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/IStack.java",
"chars": 274,
"preview": "package io.spring2go.corespring.stack;\r\n\r\n// ջӿ\r\npublic interface IStack<T> {\r\n\tpublic boolean isEmpty();\r\n\t\r\n\tpublic T "
},
{
"path": "patterns/structural/adapter/src/main/java/io/spring2go/corespring/stack/StackException.java",
"chars": 263,
"preview": "package io.spring2go.corespring.stack;\r\n\r\npublic class StackException extends RuntimeException {\r\n\r\n\tprivate static fina"
},
{
"path": "patterns/structural/bridge/pom.xml",
"chars": 661,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/Client.java",
"chars": 607,
"preview": "package io.spring2go.corespring.bridge;\r\n\r\npublic class Client {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\tString "
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloadImplementor.java",
"chars": 201,
"preview": "package io.spring2go.corespring.bridge;\r\n\r\n// Implementor\r\npublic interface FileDownloadImplementor {\r\n\t\r\n\tpublic Object"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloaderAbstraction.java",
"chars": 192,
"preview": "package io.spring2go.corespring.bridge;\r\n\r\n// Abstraction\r\npublic interface FileDownloaderAbstraction {\r\n\t\r\n\tpublic Obje"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/FileDownloaderAbstractionImpl.java",
"chars": 516,
"preview": "package io.spring2go.corespring.bridge;\r\n\r\n// RefinedAbstraction\r\npublic class FileDownloaderAbstractionImpl implements "
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/LinuxFileDownloadImplementor.java",
"chars": 382,
"preview": "package io.spring2go.corespring.bridge;\r\n\r\n// Concrete Implementor\r\npublic class LinuxFileDownloadImplementor implements"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/WindowsFileDownloadImplementor.java",
"chars": 385,
"preview": "package io.spring2go.corespring.bridge;\r\n\r\n//Concrete Implementor\r\npublic class WindowsFileDownloadImplementor implement"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/abstraction_change/FileDownloaderAbstraction.java",
"chars": 241,
"preview": "package io.spring2go.corespring.bridge.abstraction_change;\r\n\r\npublic interface FileDownloaderAbstraction {\r\n\tpublic Obje"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/abstraction_change/FileDownloaderAbstractionImpl.java",
"chars": 745,
"preview": "package io.spring2go.corespring.bridge.abstraction_change;\r\n\r\nimport io.spring2go.corespring.bridge.FileDownloadImplemen"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/FileDownloadImplementor.java",
"chars": 250,
"preview": "package io.spring2go.corespring.bridge.implementation_change;\r\n\r\npublic interface FileDownloadImplementor {\r\n\tpublic Obj"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/LinuxFileDownloadImplementor.java",
"chars": 451,
"preview": "package io.spring2go.corespring.bridge.implementation_change;\r\n\r\npublic class LinuxFileDownloadImplementor implements Fi"
},
{
"path": "patterns/structural/bridge/src/main/java/io/spring2go/corespring/bridge/implementation_change/WindowsFileDownloadImplementor.java",
"chars": 507,
"preview": "package io.spring2go.corespring.bridge.implementation_change;\r\n\r\npublic class WindowsFileDownloadImplementor implements "
},
{
"path": "patterns/structural/composite/pom.xml",
"chars": 653,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/BaseEmployee.java",
"chars": 787,
"preview": "package io.spring2go.corespring.composite_complex;\r\n\r\nimport java.util.List;\r\n\r\npublic abstract class BaseEmployee imple"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/CompanyMain.java",
"chars": 3188,
"preview": "package io.spring2go.corespring.composite_complex;\r\n\r\nimport java.util.Arrays;\r\nimport java.util.List;\r\n\r\npublic class C"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Developer.java",
"chars": 609,
"preview": "package io.spring2go.corespring.composite_complex;\r\n\r\n// Leaf\r\npublic class Developer extends BaseEmployee {\r\n\r\n\tpublic "
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/IEmployee.java",
"chars": 484,
"preview": "package io.spring2go.corespring.composite_complex;\r\n\r\nimport java.util.List;\r\n\r\n//Component\r\npublic interface IEmployee "
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Manager.java",
"chars": 1559,
"preview": "package io.spring2go.corespring.composite_complex;\r\n\r\nimport java.util.List;\r\n\r\n// Composite\r\npublic class Manager exten"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Subscription.java",
"chars": 545,
"preview": "package io.spring2go.corespring.composite_complex;\r\n\r\npublic class Subscription {\r\n\tprivate SubscriptionType sType; // 订"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/SubscriptionType.java",
"chars": 155,
"preview": "package io.spring2go.corespring.composite_complex;\r\n\r\npublic enum SubscriptionType {\r\n\tPRINT, // 打印\r\n\tSOFTWARE_LICENSE, "
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_complex/Util.java",
"chars": 1559,
"preview": "package io.spring2go.corespring.composite_complex;\r\n\r\npublic class Util {\r\n\r\n\tpublic static void printCostDetails(IEmplo"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/CompositePatternMain.java",
"chars": 554,
"preview": "package io.spring2go.corespring.composite_simple;\r\n\r\n// Client\r\npublic class CompositePatternMain {\r\n\r\n\tpublic static vo"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/Developer.java",
"chars": 1164,
"preview": "package io.spring2go.corespring.composite_simple;\r\n\r\nimport io.spring2go.corespring.composite_simple.IEmployee;\r\n\r\n// le"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/IEmployee.java",
"chars": 296,
"preview": "package io.spring2go.corespring.composite_simple;\r\n\r\n// Component\r\npublic interface IEmployee {\r\n\tpublic void add(IEmplo"
},
{
"path": "patterns/structural/composite/src/main/java/io/spring2go/corespring/composite_simple/Manager.java",
"chars": 1077,
"preview": "package io.spring2go.corespring.composite_simple;\r\n\r\nimport java.util.ArrayList;\r\nimport java.util.List;\r\n\r\n// Composite"
},
{
"path": "patterns/structural/decorator/pom.xml",
"chars": 664,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/ArtificialScentDecorator.java",
"chars": 290,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\n//Concrete Decorator\r\npublic class ArtificialScentDecorator extends Decora"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/BakeryComponent.java",
"chars": 173,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\n// Component Interface\r\npublic interface BakeryComponent {\r\n\t\r\n\tpublic Str"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CakeBase.java",
"chars": 333,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\n// ConcreteComponent\r\npublic class CakeBase implements BakeryComponent {\r\n"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CherryDecorator.java",
"chars": 261,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\n//Concrete Decorator\r\npublic class CherryDecorator extends Decorator {\r\n\r\n"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/CreamDecorator.java",
"chars": 259,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\n// Concrete Decorator\r\npublic class CreamDecorator extends Decorator {\r\n\r\n"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/Decorator.java",
"chars": 569,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\n// Decorator\r\npublic abstract class Decorator implements BakeryComponent {"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/DecoratorMain.java",
"chars": 1048,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\npublic class DecoratorMain {\r\n\r\n\tpublic static void main(String[] args) {\r"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/NameCardDecorator.java",
"chars": 422,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\n//Concrete Decorator\r\npublic class NameCardDecorator extends Decorator {\r\n"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/PastryBase.java",
"chars": 336,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\n// ConcreteComponent\r\npublic class PastryBase implements BakeryComponent {"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/Util.java",
"chars": 265,
"preview": "package io.spring2go.corespring.decorator;\r\n\r\npublic class Util {\r\n\tpublic static void printProductDetails(BakeryCompone"
},
{
"path": "patterns/structural/decorator/src/main/java/io/spring2go/corespring/decorator/uml.ucls",
"chars": 6892,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n<class-diagram version=\"1.2.2\" icons=\"true\" always-add-relationships=\"false\" gen"
},
{
"path": "patterns/structural/facade/pom.xml",
"chars": 661,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/CostManager.java",
"chars": 408,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 费用计算实现\r\npublic class CostManager implements ICosting {\r\n\r\n\t@Override\r\n\tpub"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/FacadeMain.java",
"chars": 493,
"preview": "package io.spring2go.corespring.facade;\r\n\r\npublic class FacadeMain {\r\n\r\n\tpublic static void main(String[] args) {\r\n\t\t// "
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/ICosting.java",
"chars": 152,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 费用计算接口\r\npublic interface ICosting {\r\n\tpublic float applyDiscount(float pri"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IInventory.java",
"chars": 123,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 库存接口\r\npublic interface IInventory {\r\n\tpublic void update(int productId);\r\n"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/ILogistics.java",
"chars": 158,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 物流接口\r\npublic interface ILogistics {\r\n\tpublic void shipProducts(String prod"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IOrderVerify.java",
"chars": 143,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 订单校验接口\r\npublic interface IOrderVerify {\r\n\tpublic boolean verifyShippingAdd"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/IPaymentGateway.java",
"chars": 202,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 支付接口\r\npublic interface IPaymentGateway {\r\n\tpublic boolean verifyCardDetail"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/InventoryManager.java",
"chars": 285,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 库存实现\r\npublic class InventoryManager implements IInventory {\r\n\r\n\t@Override\r"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/LogisticsManager.java",
"chars": 387,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 物流实现\r\npublic class LogisticsManager implements ILogistics {\r\n\r\n\t@Override\r"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/NoFacadeMain.java",
"chars": 1669,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// Client Code without Facade.\r\npublic class NoFacadeMain {\r\n\r\n\tpublic static"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OnlineShoppingFacade.java",
"chars": 1061,
"preview": "package io.spring2go.corespring.facade;\r\n\r\npublic class OnlineShoppingFacade {\r\n\tIInventory inventory = new InventoryMan"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OrderDetails.java",
"chars": 2288,
"preview": "package io.spring2go.corespring.facade;\r\n\r\nimport java.util.Random;\r\n\r\npublic class OrderDetails {\r\n\t// region 私有成员\r\n\tpr"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/OrderVerificationManager.java",
"chars": 308,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 订单校验实现\r\npublic class OrderVerificationManager implements IOrderVerify {\r\n\r"
},
{
"path": "patterns/structural/facade/src/main/java/io/spring2go/corespring/facade/PaymentGatewayManager.java",
"chars": 529,
"preview": "package io.spring2go.corespring.facade;\r\n\r\n// 支付实现\r\npublic class PaymentGatewayManager implements IPaymentGateway {\r\n\r\n\t"
},
{
"path": "patterns/structural/proxy/pom.xml",
"chars": 660,
"preview": "<project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r\n\txsi:schemaLoc"
},
{
"path": "patterns/structural/proxy/src/main/java/io/spring2go/corespring/Folder.java",
"chars": 272,
"preview": "package io.spring2go.corespring;\r\n\r\n// RealSubject\r\npublic class Folder implements IFolder {\r\n\r\n\tpublic void performOper"
},
{
"path": "patterns/structural/proxy/src/main/java/io/spring2go/corespring/FolderProxy.java",
"chars": 480,
"preview": "package io.spring2go.corespring;\r\n\r\n// Proxy\r\npublic class FolderProxy implements IFolder {\r\n\t\r\n\tFolder folder;\r\n\tUser u"
},
{
"path": "patterns/structural/proxy/src/main/java/io/spring2go/corespring/IFolder.java",
"chars": 125,
"preview": "package io.spring2go.corespring;\r\n\r\n// Subject\r\npublic interface IFolder {\r\n\t \r\n public void performOperations();\r\n "
},
{
"path": "patterns/structural/proxy/src/main/java/io/spring2go/corespring/ProxyDesignPatternMain.java",
"chars": 854,
"preview": "package io.spring2go.corespring;\r\n\r\n// Client\r\npublic class ProxyDesignPatternMain {\r\n\r\n\tpublic static void main(String["
},
{
"path": "patterns/structural/proxy/src/main/java/io/spring2go/corespring/User.java",
"chars": 347,
"preview": "package io.spring2go.corespring;\r\n\r\npublic class User {\r\n\t\r\n\tString username;\r\n\tString password;\r\n\t\r\n\tpublic User(String"
}
]
// ... and 2 more files (download for full content)
About this extraction
This page contains the full source code of the spring2go/core-spring-patterns GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 202 files (141.1 KB), approximately 46.9k tokens, and a symbol index with 602 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.