diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..f984e94
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,3 @@
+.idea
+.DS_Store
+*.iml
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/.name b/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/.name
deleted file mode 100644
index 5907067..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-AbstractFactoryDemo
\ No newline at end of file
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/misc.xml b/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/misc.xml
deleted file mode 100644
index 2c2c881..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/misc.xml
+++ /dev/null
@@ -1,168 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
- 5050
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/modules.xml b/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/modules.xml
deleted file mode 100644
index e1aeba8..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/workspace.xml b/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/workspace.xml
deleted file mode 100644
index c47b424..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/workspace.xml
+++ /dev/null
@@ -1,792 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
- 5050
-
-
-
-
-
-
-
-
-
- 1417446695228
-
- 1417446695228
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/AbstractFactory.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/AbstractFactory.class
deleted file mode 100644
index 5b7c99b..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/AbstractFactory.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Animal.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Animal.class
deleted file mode 100644
index 79427d4..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Animal.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Cat.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Cat.class
deleted file mode 100644
index fb57a10..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Cat.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Dog.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Dog.class
deleted file mode 100644
index 11cc274..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Dog.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Lion.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Lion.class
deleted file mode 100644
index bc833a1..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Lion.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Main.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Main.class
deleted file mode 100644
index 7180c19..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Main.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/MammalFactory.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/MammalFactory.class
deleted file mode 100644
index b7a15ed..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/MammalFactory.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/ReptileFactory.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/ReptileFactory.class
deleted file mode 100644
index 216df67..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/ReptileFactory.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Snake.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Snake.class
deleted file mode 100644
index 2112578..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Snake.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/SpeciesFactory.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/SpeciesFactory.class
deleted file mode 100644
index 24e00e6..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/SpeciesFactory.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Tyrannosaurus.class b/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Tyrannosaurus.class
deleted file mode 100644
index 5478a0a..0000000
Binary files a/AbstractFactoryPattern/Java/AbstractFactoryDemo/out/production/AbstractFactoryDemo/Tyrannosaurus.class and /dev/null differ
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/AbstractFactory.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/AbstractFactory.java
deleted file mode 100644
index 7ebb58e..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/AbstractFactory.java
+++ /dev/null
@@ -1,14 +0,0 @@
-public class AbstractFactory
-{
- public SpeciesFactory getSpeciesFactory(String type)
- {
- if ("mammal".equals(type))
- {
- return new MammalFactory();
- }
- else
- {
- return new ReptileFactory();
- }
- }
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Animal.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Animal.java
deleted file mode 100644
index 7a047d3..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Animal.java
+++ /dev/null
@@ -1,4 +0,0 @@
-public abstract class Animal
-{
- public abstract String makeSound();
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Cat.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Cat.java
deleted file mode 100644
index 5277b69..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Cat.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Cat extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Meow";
- }
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Dog.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Dog.java
deleted file mode 100644
index ead4cc1..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Dog.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Dog extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Bark";
- }
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Lion.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Lion.java
deleted file mode 100644
index a8984d1..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Lion.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Lion extends Animal
-{
- @Override
- public String makeSound()
- {
- return "howl";
- }
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Main.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Main.java
deleted file mode 100644
index 1ad8691..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Main.java
+++ /dev/null
@@ -1,19 +0,0 @@
-public class Main
-{
- public static void main(String args[])
- {
- AbstractFactory abstractFactory = new AbstractFactory();
-
- SpeciesFactory speciesFactory1 = abstractFactory.getSpeciesFactory("reptile");
- Animal animal1 = speciesFactory1.getAnimal("tyrannosaurus");
- System.out.println("Animal1: " + animal1.makeSound());
- Animal animal2 = speciesFactory1.getAnimal("snake");
- System.out.println("Animal2: " + animal2.makeSound());
-
- SpeciesFactory speciesFactory2 = abstractFactory.getSpeciesFactory("mammal");
- Animal animal3 = speciesFactory2.getAnimal("dog");
- System.out.println("Animal3: " + animal3.makeSound());
- Animal animal4 = speciesFactory2.getAnimal("cat");
- System.out.println("Animal4: " + animal4.makeSound());
- }
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/MammalFactory.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/MammalFactory.java
deleted file mode 100644
index 18b05c5..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/MammalFactory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-public class MammalFactory extends SpeciesFactory
-{
- @Override
- public Animal getAnimal(String animalType)
- {
- if ("dog".equals(animalType))
- {
- return new Dog();
- }
- else
- {
- return new Cat();
- }
- }
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/ReptileFactory.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/ReptileFactory.java
deleted file mode 100644
index 585449d..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/ReptileFactory.java
+++ /dev/null
@@ -1,15 +0,0 @@
-public class ReptileFactory extends SpeciesFactory
-{
- @Override
- public Animal getAnimal(String animalType)
- {
- if ("snake".equals(animalType))
- {
- return new Snake();
- }
- else
- {
- return new Tyrannosaurus();
- }
- }
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Snake.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Snake.java
deleted file mode 100644
index 91cd1c6..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Snake.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Created by chris on 12/1/14.
- */
-public class Snake extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Hsi";
- }
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/SpeciesFactory.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/SpeciesFactory.java
deleted file mode 100644
index d63f699..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/SpeciesFactory.java
+++ /dev/null
@@ -1,4 +0,0 @@
-public abstract class SpeciesFactory
-{
- public abstract Animal getAnimal(String animalType);
-}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Tyrannosaurus.java b/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Tyrannosaurus.java
deleted file mode 100644
index 4f69c33..0000000
--- a/AbstractFactoryPattern/Java/AbstractFactoryDemo/src/Tyrannosaurus.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Tyrannosaurus extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Haou";
- }
-}
diff --git a/Behavioral/ChainOfResponsibility/src/io/csie/chris/Main.java b/Behavioral/ChainOfResponsibility/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..3c9d3e7
--- /dev/null
+++ b/Behavioral/ChainOfResponsibility/src/io/csie/chris/Main.java
@@ -0,0 +1,28 @@
+package io.csie.chris;
+
+import io.csie.chris.logger.AbstractLogger;
+import io.csie.chris.logger.ConsoleLogger;
+import io.csie.chris.logger.DebugLogger;
+import io.csie.chris.logger.common.LoggerLevel;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ AbstractLogger loggerChain = getLoggers();
+
+ loggerChain.showMessage(LoggerLevel.KERN_EMERG.getLevel(), "Start kernel stracing.");
+
+ loggerChain.showMessage(LoggerLevel.KERN_DEBUG.getLevel(), "An error occured.");
+ }
+
+ private static AbstractLogger getLoggers() {
+
+ AbstractLogger debugLogger = new DebugLogger(LoggerLevel.KERN_DEBUG.getLevel());
+ AbstractLogger consoleLogger = new ConsoleLogger(LoggerLevel.KERN_EMERG.getLevel());
+
+ debugLogger.setLogger(consoleLogger);
+
+ return debugLogger;
+ }
+}
diff --git a/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/AbstractLogger.java b/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/AbstractLogger.java
new file mode 100644
index 0000000..6941579
--- /dev/null
+++ b/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/AbstractLogger.java
@@ -0,0 +1,29 @@
+package io.csie.chris.logger;
+
+public abstract class AbstractLogger {
+
+ protected int level;
+
+ public AbstractLogger(int level) {
+ this.level = level;
+ }
+
+ /* The next logger in the chain of responsibility */
+ protected AbstractLogger nextLogger;
+
+ public void setLogger(AbstractLogger nextLogger) {
+ this.nextLogger = nextLogger;
+ }
+
+ abstract protected void writeMessage(String msg);
+
+ public void showMessage(int priority, String msg) {
+ if (priority <= level) {
+ writeMessage(msg);
+ }
+
+ if (nextLogger != null) {
+ nextLogger.showMessage(priority, msg);
+ }
+ }
+}
diff --git a/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/ConsoleLogger.java b/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/ConsoleLogger.java
new file mode 100644
index 0000000..27ec334
--- /dev/null
+++ b/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/ConsoleLogger.java
@@ -0,0 +1,15 @@
+package io.csie.chris.logger;
+
+public class ConsoleLogger extends AbstractLogger {
+
+ private static final String TAG = ConsoleLogger.class.getSimpleName();
+
+ public ConsoleLogger(int priority) {
+ super(priority);
+ }
+
+ @Override
+ protected void writeMessage(String msg) {
+ System.out.println(TAG + ": " + msg);
+ }
+}
diff --git a/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/DebugLogger.java b/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/DebugLogger.java
new file mode 100644
index 0000000..480e0fc
--- /dev/null
+++ b/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/DebugLogger.java
@@ -0,0 +1,15 @@
+package io.csie.chris.logger;
+
+public class DebugLogger extends AbstractLogger {
+
+ private static final String TAG = DebugLogger.class.getSimpleName();
+
+ public DebugLogger(int level) {
+ super(level);
+ }
+
+ @Override
+ protected void writeMessage(String msg) {
+ System.out.println(TAG + ": " + msg);
+ }
+}
diff --git a/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/common/LoggerLevel.java b/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/common/LoggerLevel.java
new file mode 100644
index 0000000..477783d
--- /dev/null
+++ b/Behavioral/ChainOfResponsibility/src/io/csie/chris/logger/common/LoggerLevel.java
@@ -0,0 +1,23 @@
+package io.csie.chris.logger.common;
+
+public enum LoggerLevel {
+
+ /* Define the level, 1 the heightest one. */
+ KERN_EMERG(1),
+ KERN_ALERT(2),
+ KERN_CRIT(3),
+ KERN_WARNING(4),
+ KERN_NOTICE(5),
+ KERN_INFO(6),
+ KERN_DEBUG(7);
+
+ private int level;
+
+ LoggerLevel(int level) {
+ this.level = level;
+ }
+
+ public int getLevel() {
+ return this.level;
+ }
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/Main.java b/Behavioral/CommandPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..1edc22e
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,24 @@
+package io.csie.chris;
+
+import io.csie.chris.stock.*;
+import io.csie.chris.stock.broker.Broker;
+import io.csie.chris.stock.common.IStock;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ IStockFactory ibmStockFactory = new IBMStockFactory();
+ IStock IBMStock = ibmStockFactory.createStock();
+
+ BuyStock buyStockOrder = new BuyStock(IBMStock);
+ SellStock sellStockOrder = new SellStock(IBMStock);
+
+ Broker broker = new Broker();
+ broker.takeOrder(buyStockOrder);
+ broker.takeOrder(sellStockOrder);
+
+ broker.placeOrders();
+ }
+
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/stock/BuyStock.java b/Behavioral/CommandPattern/src/io/csie/chris/stock/BuyStock.java
new file mode 100644
index 0000000..13b1a0a
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/stock/BuyStock.java
@@ -0,0 +1,17 @@
+package io.csie.chris.stock;
+
+import io.csie.chris.stock.common.IStock;
+import io.csie.chris.stock.common.Order;
+
+public class BuyStock implements Order {
+
+ private IStock ibmStock;
+
+ public BuyStock(IStock ibmStock) {
+ this.ibmStock = ibmStock;
+ }
+
+ public void execute() {
+ ibmStock.buy();
+ }
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/stock/IBMStock.java b/Behavioral/CommandPattern/src/io/csie/chris/stock/IBMStock.java
new file mode 100644
index 0000000..a4c3244
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/stock/IBMStock.java
@@ -0,0 +1,24 @@
+package io.csie.chris.stock;
+
+import io.csie.chris.stock.common.IStock;
+
+public class IBMStock implements IStock {
+
+ private String name;
+ private int quantity;
+
+ IBMStock() {
+ this.name = "IBM";
+ this.quantity = 100;
+ }
+
+ @Override
+ public void buy() {
+ System.out.println("[Buy] Stock name: " + name + " quantity: " + quantity);
+ }
+
+ @Override
+ public void sell() {
+ System.out.println("[Sell] Stock name: " + name + " quantity: " + quantity);
+ }
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/stock/IBMStockFactory.java b/Behavioral/CommandPattern/src/io/csie/chris/stock/IBMStockFactory.java
new file mode 100644
index 0000000..314242f
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/stock/IBMStockFactory.java
@@ -0,0 +1,11 @@
+package io.csie.chris.stock;
+
+import io.csie.chris.stock.common.IStock;
+
+public class IBMStockFactory implements IStockFactory {
+
+ @Override
+ public IStock createStock() {
+ return new IBMStock();
+ }
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/stock/IStockFactory.java b/Behavioral/CommandPattern/src/io/csie/chris/stock/IStockFactory.java
new file mode 100644
index 0000000..878ffd5
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/stock/IStockFactory.java
@@ -0,0 +1,8 @@
+package io.csie.chris.stock;
+
+import io.csie.chris.stock.common.IStock;
+
+public interface IStockFactory {
+
+ IStock createStock();
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/stock/SellStock.java b/Behavioral/CommandPattern/src/io/csie/chris/stock/SellStock.java
new file mode 100644
index 0000000..0966062
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/stock/SellStock.java
@@ -0,0 +1,18 @@
+package io.csie.chris.stock;
+
+import io.csie.chris.stock.common.IStock;
+import io.csie.chris.stock.common.Order;
+
+public class SellStock implements Order {
+
+ private IStock ibmStock;
+
+ public SellStock(IStock ibmStock) {
+ this.ibmStock = ibmStock;
+ }
+
+ @Override
+ public void execute() {
+ ibmStock.sell();
+ }
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/stock/broker/Broker.java b/Behavioral/CommandPattern/src/io/csie/chris/stock/broker/Broker.java
new file mode 100644
index 0000000..0fa6284
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/stock/broker/Broker.java
@@ -0,0 +1,22 @@
+package io.csie.chris.stock.broker;
+
+import io.csie.chris.stock.common.Order;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Broker {
+
+ private List orderList = new ArrayList<>();
+
+ public void takeOrder(Order order) {
+ orderList.add(order);
+ }
+
+ public void placeOrders() {
+ for (Order order : orderList) {
+ order.execute();
+ }
+ orderList.clear();
+ }
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/stock/common/IStock.java b/Behavioral/CommandPattern/src/io/csie/chris/stock/common/IStock.java
new file mode 100644
index 0000000..0830212
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/stock/common/IStock.java
@@ -0,0 +1,8 @@
+package io.csie.chris.stock.common;
+
+public interface IStock {
+
+ void buy();
+
+ void sell();
+}
diff --git a/Behavioral/CommandPattern/src/io/csie/chris/stock/common/Order.java b/Behavioral/CommandPattern/src/io/csie/chris/stock/common/Order.java
new file mode 100644
index 0000000..86285a1
--- /dev/null
+++ b/Behavioral/CommandPattern/src/io/csie/chris/stock/common/Order.java
@@ -0,0 +1,6 @@
+package io.csie.chris.stock.common;
+
+public interface Order {
+
+ void execute();
+}
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/Evaluator.java b/Behavioral/InterpreterPattern/src/io/csie/chris/Evaluator.java
new file mode 100644
index 0000000..3d5a26a
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/Evaluator.java
@@ -0,0 +1,61 @@
+package io.csie.chris;
+
+import io.csie.chris.expression.*;
+import io.csie.chris.expression.common.Expression;
+import io.csie.chris.expression.operation.*;
+
+import java.util.Map;
+import java.util.Stack;
+
+public class Evaluator implements Expression {
+
+ private Expression syntaxTree;
+
+ Evaluator(final String expression) {
+
+ final Stack expressionStack = new Stack<>();
+
+ Expression rightOperand;
+ Expression leftOperand;
+ Expression subExpression;
+
+ for (final String token : expression.split(" ")) {
+ switch (token) {
+ case "+":
+ subExpression = new Plus(expressionStack.pop(), expressionStack.pop());
+ expressionStack.push(subExpression);
+ break;
+ case "-":
+ rightOperand = expressionStack.pop();
+ leftOperand = expressionStack.pop();
+ subExpression = new Minus(leftOperand, rightOperand);
+ expressionStack.push(subExpression);
+ break;
+ case "*":
+ subExpression = new Multiplication(expressionStack.pop(), expressionStack.pop());
+ expressionStack.push(subExpression);
+ break;
+ case "/":
+ rightOperand = expressionStack.pop();
+ leftOperand = expressionStack.pop();
+ subExpression = new Divide(leftOperand, rightOperand);
+ expressionStack.push(subExpression);
+ break;
+ case "^":
+ rightOperand = expressionStack.pop();
+ leftOperand = expressionStack.pop();
+ subExpression = new Power(leftOperand, rightOperand);
+ expressionStack.push(subExpression);
+ break;
+ default:
+ expressionStack.push(new Variable(token));
+ break;
+ }
+ }
+ syntaxTree = expressionStack.pop();
+ }
+
+ public int interpret(final Map context) {
+ return syntaxTree.interpret(context);
+ }
+}
\ No newline at end of file
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/Main.java b/Behavioral/InterpreterPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..5e871f4
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,30 @@
+package io.csie.chris;
+
+import io.csie.chris.expression.common.Expression;
+import io.csie.chris.expression.operation.Number;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class Main {
+
+ public static void main(final String[] args) {
+
+ final String expression = "t u v w x z - + * / ^";
+
+ final Evaluator sentence = new Evaluator(expression);
+
+ final Map variables = new HashMap<>();
+
+ variables.put("t", new Number(3));
+ variables.put("u", new Number(-108));
+ variables.put("v", new Number(2));
+ variables.put("w", new Number(5));
+ variables.put("x", new Number(10));
+ variables.put("z", new Number(42));
+
+ final int result = sentence.interpret(variables);
+
+ System.out.println(result);
+ }
+}
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/expression/Variable.java b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/Variable.java
new file mode 100644
index 0000000..025fda3
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/Variable.java
@@ -0,0 +1,21 @@
+package io.csie.chris.expression;
+
+import io.csie.chris.expression.common.Expression;
+
+import java.util.Map;
+
+public class Variable implements Expression {
+
+ private String name;
+
+ public Variable(final String name) {
+ this.name = name;
+ }
+
+ public int interpret(final Map variables) {
+ if (null == variables.get(name))
+ return 0; // Either return new Number(0).
+
+ return variables.get(name).interpret(variables);
+ }
+}
\ No newline at end of file
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/expression/common/Expression.java b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/common/Expression.java
new file mode 100644
index 0000000..2b6fb15
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/common/Expression.java
@@ -0,0 +1,8 @@
+package io.csie.chris.expression.common;
+
+import java.util.Map;
+
+public interface Expression {
+
+ int interpret(final Map variables);
+}
\ No newline at end of file
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Divide.java b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Divide.java
new file mode 100644
index 0000000..6a3d22d
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Divide.java
@@ -0,0 +1,22 @@
+package io.csie.chris.expression.operation;
+
+import io.csie.chris.expression.common.Expression;
+
+import java.util.Map;
+
+public class Divide implements Expression {
+
+ private Expression leftOperand;
+
+ private Expression rightOperand;
+
+ public Divide(Expression leftOperand, Expression rightOperand) {
+ this.leftOperand = leftOperand;
+ this.rightOperand = rightOperand;
+ }
+
+ @Override
+ public int interpret(Map variables) {
+ return leftOperand.interpret(variables) / rightOperand.interpret(variables);
+ }
+}
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Minus.java b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Minus.java
new file mode 100644
index 0000000..493506b
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Minus.java
@@ -0,0 +1,21 @@
+package io.csie.chris.expression.operation;
+
+import io.csie.chris.expression.common.Expression;
+
+import java.util.Map;
+
+public class Minus implements Expression {
+
+ private Expression leftOperand;
+
+ private Expression rightOperand;
+
+ public Minus(final Expression left, final Expression right) {
+ leftOperand = left;
+ rightOperand = right;
+ }
+
+ public int interpret(final Map variables) {
+ return leftOperand.interpret(variables) - rightOperand.interpret(variables);
+ }
+}
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Multiplication.java b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Multiplication.java
new file mode 100644
index 0000000..ec0dd3c
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Multiplication.java
@@ -0,0 +1,22 @@
+package io.csie.chris.expression.operation;
+
+import io.csie.chris.expression.common.Expression;
+
+import java.util.Map;
+
+public class Multiplication implements Expression {
+
+ private Expression leftOperand;
+
+ private Expression rightOperand;
+
+ public Multiplication(Expression leftOperand, Expression rightOperand) {
+ this.leftOperand = leftOperand;
+ this.rightOperand = rightOperand;
+ }
+
+ @Override
+ public int interpret(Map variables) {
+ return leftOperand.interpret(variables) * rightOperand.interpret(variables);
+ }
+}
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Number.java b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Number.java
new file mode 100644
index 0000000..09a62a5
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Number.java
@@ -0,0 +1,18 @@
+package io.csie.chris.expression.operation;
+
+import io.csie.chris.expression.common.Expression;
+
+import java.util.Map;
+
+public class Number implements Expression {
+
+ private int number;
+
+ public Number(final int number) {
+ this.number = number;
+ }
+
+ public int interpret(final Map variables) {
+ return number;
+ }
+}
\ No newline at end of file
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Plus.java b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Plus.java
new file mode 100644
index 0000000..b5352d0
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Plus.java
@@ -0,0 +1,21 @@
+package io.csie.chris.expression.operation;
+
+import io.csie.chris.expression.common.Expression;
+
+import java.util.Map;
+
+public class Plus implements Expression {
+
+ private Expression leftOperand;
+
+ private Expression rightOperand;
+
+ public Plus(final Expression left, final Expression right) {
+ leftOperand = left;
+ rightOperand = right;
+ }
+
+ public int interpret(final Map variables) {
+ return leftOperand.interpret(variables) + rightOperand.interpret(variables);
+ }
+}
\ No newline at end of file
diff --git a/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Power.java b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Power.java
new file mode 100644
index 0000000..3a83595
--- /dev/null
+++ b/Behavioral/InterpreterPattern/src/io/csie/chris/expression/operation/Power.java
@@ -0,0 +1,22 @@
+package io.csie.chris.expression.operation;
+
+import io.csie.chris.expression.common.Expression;
+
+import java.util.Map;
+
+public class Power implements Expression {
+
+ private Expression leftOperand;
+
+ private Expression rightOperand;
+
+ public Power(final Expression left, final Expression right) {
+ leftOperand = left;
+ rightOperand = right;
+ }
+
+ @Override
+ public int interpret(Map variables) {
+ return (int) Math.pow((double) leftOperand.interpret(variables), (double) rightOperand.interpret(variables));
+ }
+}
diff --git a/Behavioral/IteratorPattern/src/io/csie/chris/Main.java b/Behavioral/IteratorPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..d1b389e
--- /dev/null
+++ b/Behavioral/IteratorPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,17 @@
+package io.csie.chris;
+
+import io.csie.chris.container.NameRepository;
+import io.csie.chris.iterator.Iterator;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ NameRepository namesRepository = new NameRepository();
+
+ for (Iterator iterator = namesRepository.getIterator(); iterator.hasNext(); ) {
+ String name = (String) iterator.next();
+ System.out.println(name);
+ }
+ }
+}
diff --git a/Behavioral/IteratorPattern/src/io/csie/chris/container/Container.java b/Behavioral/IteratorPattern/src/io/csie/chris/container/Container.java
new file mode 100644
index 0000000..e7eded6
--- /dev/null
+++ b/Behavioral/IteratorPattern/src/io/csie/chris/container/Container.java
@@ -0,0 +1,8 @@
+package io.csie.chris.container;
+
+import io.csie.chris.iterator.Iterator;
+
+public interface Container {
+
+ Iterator getIterator();
+}
diff --git a/Behavioral/IteratorPattern/src/io/csie/chris/container/NameRepository.java b/Behavioral/IteratorPattern/src/io/csie/chris/container/NameRepository.java
new file mode 100644
index 0000000..24ea224
--- /dev/null
+++ b/Behavioral/IteratorPattern/src/io/csie/chris/container/NameRepository.java
@@ -0,0 +1,12 @@
+package io.csie.chris.container;
+
+import io.csie.chris.iterator.Iterator;
+import io.csie.chris.iterator.NameIterator;
+
+public class NameRepository implements Container {
+
+ @Override
+ public Iterator getIterator() {
+ return new NameIterator();
+ }
+}
diff --git a/Behavioral/IteratorPattern/src/io/csie/chris/iterator/Iterator.java b/Behavioral/IteratorPattern/src/io/csie/chris/iterator/Iterator.java
new file mode 100644
index 0000000..2075324
--- /dev/null
+++ b/Behavioral/IteratorPattern/src/io/csie/chris/iterator/Iterator.java
@@ -0,0 +1,8 @@
+package io.csie.chris.iterator;
+
+public interface Iterator {
+
+ boolean hasNext();
+
+ Object next();
+}
diff --git a/Behavioral/IteratorPattern/src/io/csie/chris/iterator/NameIterator.java b/Behavioral/IteratorPattern/src/io/csie/chris/iterator/NameIterator.java
new file mode 100644
index 0000000..92dfdb0
--- /dev/null
+++ b/Behavioral/IteratorPattern/src/io/csie/chris/iterator/NameIterator.java
@@ -0,0 +1,21 @@
+package io.csie.chris.iterator;
+
+public class NameIterator implements Iterator {
+
+ private String names[] = {"Apple", "Banana", "Car", "Dog", "Elephant", "Fork"};
+
+ private int index;
+
+ @Override
+ public boolean hasNext() {
+ return index < names.length;
+ }
+
+ @Override
+ public Object next() {
+ if (this.hasNext()) {
+ return names[index++];
+ }
+ return null;
+ }
+}
diff --git a/Behavioral/ObserverPattern/src/io/csie/chris/EventSource.java b/Behavioral/ObserverPattern/src/io/csie/chris/EventSource.java
new file mode 100644
index 0000000..e5f38d5
--- /dev/null
+++ b/Behavioral/ObserverPattern/src/io/csie/chris/EventSource.java
@@ -0,0 +1,17 @@
+package io.csie.chris;
+
+import java.util.Observable;
+import java.util.Scanner;
+
+public class EventSource extends Observable implements Runnable {
+
+ @Override
+ public void run() {
+
+ while (true) {
+ String response = new Scanner(System.in).next();
+ setChanged();
+ notifyObservers(response);
+ }
+ }
+}
diff --git a/Behavioral/ObserverPattern/src/io/csie/chris/Main.java b/Behavioral/ObserverPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..7c96a62
--- /dev/null
+++ b/Behavioral/ObserverPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,13 @@
+package io.csie.chris;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ EventSource eventSource = new EventSource();
+
+ eventSource.addObserver((o, arg) -> System.out.println(arg));
+
+ new Thread(eventSource).start();
+ }
+}
diff --git a/Behavioral/StrategyPattern/src/io/csie/chris/Main.java b/Behavioral/StrategyPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..289216f
--- /dev/null
+++ b/Behavioral/StrategyPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,35 @@
+package io.csie.chris;
+
+import io.csie.chris.operation.AddOperation;
+import io.csie.chris.operation.DividOperation;
+import io.csie.chris.operation.MultipleOperation;
+import io.csie.chris.operation.SubstractOperation;
+import io.csie.chris.operation.common.Context;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ int number1 = 10, number2 = 5, result;
+
+ // Add
+ Context context = new Context(new AddOperation());
+ result = context.doStrategy(number1, number2);
+ System.out.println("Result: " + result);
+
+ // Sub
+ context = new Context(new SubstractOperation());
+ result = context.doStrategy(number1, number2);
+ System.out.println("Result: " + result);
+
+ // Multiplication
+ context = new Context(new MultipleOperation());
+ result = context.doStrategy(number1, number2);
+ System.out.println("Result: " + result);
+
+ // Divide
+ context = new Context(new DividOperation());
+ result = context.doStrategy(number1, number2);
+ System.out.println("Result: " + result);
+ }
+}
diff --git a/Behavioral/StrategyPattern/src/io/csie/chris/operation/AddOperation.java b/Behavioral/StrategyPattern/src/io/csie/chris/operation/AddOperation.java
new file mode 100644
index 0000000..d9e1895
--- /dev/null
+++ b/Behavioral/StrategyPattern/src/io/csie/chris/operation/AddOperation.java
@@ -0,0 +1,11 @@
+package io.csie.chris.operation;
+
+import io.csie.chris.operation.common.IStrategy;
+
+public class AddOperation implements IStrategy {
+
+ @Override
+ public int doOperation(int number1, int number2) {
+ return number1 + number2;
+ }
+}
diff --git a/Behavioral/StrategyPattern/src/io/csie/chris/operation/DividOperation.java b/Behavioral/StrategyPattern/src/io/csie/chris/operation/DividOperation.java
new file mode 100644
index 0000000..326431a
--- /dev/null
+++ b/Behavioral/StrategyPattern/src/io/csie/chris/operation/DividOperation.java
@@ -0,0 +1,11 @@
+package io.csie.chris.operation;
+
+import io.csie.chris.operation.common.IStrategy;
+
+public class DividOperation implements IStrategy {
+
+ @Override
+ public int doOperation(int number1, int number2) {
+ return number1 / number2;
+ }
+}
diff --git a/Behavioral/StrategyPattern/src/io/csie/chris/operation/MultipleOperation.java b/Behavioral/StrategyPattern/src/io/csie/chris/operation/MultipleOperation.java
new file mode 100644
index 0000000..6d3f53f
--- /dev/null
+++ b/Behavioral/StrategyPattern/src/io/csie/chris/operation/MultipleOperation.java
@@ -0,0 +1,11 @@
+package io.csie.chris.operation;
+
+import io.csie.chris.operation.common.IStrategy;
+
+public class MultipleOperation implements IStrategy {
+
+ @Override
+ public int doOperation(int number1, int number2) {
+ return number1 * number2;
+ }
+}
diff --git a/Behavioral/StrategyPattern/src/io/csie/chris/operation/SubstractOperation.java b/Behavioral/StrategyPattern/src/io/csie/chris/operation/SubstractOperation.java
new file mode 100644
index 0000000..f052443
--- /dev/null
+++ b/Behavioral/StrategyPattern/src/io/csie/chris/operation/SubstractOperation.java
@@ -0,0 +1,12 @@
+package io.csie.chris.operation;
+
+import io.csie.chris.operation.common.IStrategy;
+
+public class SubstractOperation implements IStrategy {
+
+ @Override
+ public int doOperation(int number1, int number2) {
+ return number1 - number2;
+ }
+
+}
diff --git a/Behavioral/StrategyPattern/src/io/csie/chris/operation/common/Context.java b/Behavioral/StrategyPattern/src/io/csie/chris/operation/common/Context.java
new file mode 100644
index 0000000..72891bb
--- /dev/null
+++ b/Behavioral/StrategyPattern/src/io/csie/chris/operation/common/Context.java
@@ -0,0 +1,14 @@
+package io.csie.chris.operation.common;
+
+public class Context {
+
+ private IStrategy strategy;
+
+ public Context(IStrategy strategy) {
+ this.strategy = strategy;
+ }
+
+ public int doStrategy(int number1, int number2) {
+ return strategy.doOperation(number1, number2);
+ }
+}
diff --git a/Behavioral/StrategyPattern/src/io/csie/chris/operation/common/IStrategy.java b/Behavioral/StrategyPattern/src/io/csie/chris/operation/common/IStrategy.java
new file mode 100644
index 0000000..1ac094b
--- /dev/null
+++ b/Behavioral/StrategyPattern/src/io/csie/chris/operation/common/IStrategy.java
@@ -0,0 +1,7 @@
+package io.csie.chris.operation.common;
+
+public interface IStrategy {
+
+ int doOperation(int number1, int number2);
+
+}
diff --git a/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/AttackCommand.cs b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/AttackCommand.cs
new file mode 100644
index 0000000..30a7a75
--- /dev/null
+++ b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/AttackCommand.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CommandPattern
+{
+ public class AttackCommand : Command
+ {
+ public AttackCommand(ReceiveRole pRole)
+ : base(pRole)
+ {
+ }
+
+ public override void Execute()
+ {
+ mReceiveRole.Attack();
+ }
+ }
+}
diff --git a/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/Command.cs b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/Command.cs
new file mode 100644
index 0000000..3971207
--- /dev/null
+++ b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/Command.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CommandPattern
+{
+ public abstract class Command
+ {
+ protected ReceiveRole mReceiveRole;
+
+ public Command(ReceiveRole pRole)
+ {
+ mReceiveRole = pRole;
+ }
+
+ public abstract void Execute();
+ }
+}
diff --git a/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/CommandPatternDemo.cs b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/CommandPatternDemo.cs
new file mode 100644
index 0000000..10ca943
--- /dev/null
+++ b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/CommandPatternDemo.cs
@@ -0,0 +1,32 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CommandPattern
+{
+ class CommandPatternDemo
+ {
+ static void Main(string[] args)
+ {
+ Invoker tInvoker = new Invoker();
+ ReceiveRole tRole = new ReceiveRole();
+ MoveForwardCommand tMoveForwardCommand = new MoveForwardCommand(tRole);
+ TurnLeftCommand tTurnLeftCommand = new TurnLeftCommand(tRole);
+ TurnRightCommand tTurnRightCommand = new TurnRightCommand(tRole);
+ AttackCommand tAttackCommand = new AttackCommand(tRole);
+
+ // set command list
+ tInvoker.SetCommand(tTurnLeftCommand);
+ tInvoker.SetCommand(tMoveForwardCommand);
+ tInvoker.SetCommand(tMoveForwardCommand);
+ tInvoker.SetCommand(tTurnRightCommand);
+ tInvoker.SetCommand(tMoveForwardCommand);
+ tInvoker.SetCommand(tAttackCommand);
+
+ // Notify the role to execute command
+ tInvoker.NotifyExecute();
+
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/Invoker.cs b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/Invoker.cs
new file mode 100644
index 0000000..05a7008
--- /dev/null
+++ b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/Invoker.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CommandPattern
+{
+ public class Invoker
+ {
+ private List mCommands = new List();
+
+ public void SetCommand(Command pCommand)
+ {
+ mCommands.Add(pCommand);
+ }
+
+ public void CancelCommand(Command pCommand)
+ {
+ mCommands.Remove(pCommand);
+ }
+
+ public void NotifyExecute ()
+ {
+ foreach (Command tCommand in mCommands)
+ {
+ tCommand.Execute();
+ }
+ }
+
+ }
+}
diff --git a/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/MoveForwardCommand.cs b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/MoveForwardCommand.cs
new file mode 100644
index 0000000..71ecb38
--- /dev/null
+++ b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/MoveForwardCommand.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CommandPattern
+{
+ public class MoveForwardCommand : Command
+ {
+ public MoveForwardCommand(ReceiveRole pRole)
+ : base(pRole)
+ {
+ }
+
+ public override void Execute()
+ {
+ mReceiveRole.Moveward();
+ }
+ }
+}
diff --git a/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/ReceiveRole.cs b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/ReceiveRole.cs
new file mode 100644
index 0000000..e24689f
--- /dev/null
+++ b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/ReceiveRole.cs
@@ -0,0 +1,30 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CommandPattern
+{
+ public class ReceiveRole
+ {
+ public void Moveward()
+ {
+ Console.WriteLine("Move forward");
+ }
+
+ public void TurnLeft()
+ {
+ Console.WriteLine("Turn left");
+ }
+
+ public void TurnRight()
+ {
+ Console.WriteLine("Turn right");
+ }
+
+ public void Attack()
+ {
+ Console.WriteLine("Attack");
+ }
+
+ }
+}
diff --git a/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/TurnLeftCommand.cs b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/TurnLeftCommand.cs
new file mode 100644
index 0000000..4fc3568
--- /dev/null
+++ b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/TurnLeftCommand.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CommandPattern
+{
+ public class TurnLeftCommand : Command
+ {
+ public TurnLeftCommand(ReceiveRole pRole)
+ : base(pRole)
+ {
+ }
+
+ public override void Execute()
+ {
+ mReceiveRole.TurnLeft();
+ }
+ }
+}
diff --git a/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/TurnRightCommand.cs b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/TurnRightCommand.cs
new file mode 100644
index 0000000..23542d8
--- /dev/null
+++ b/BehavioralDesignPattern/CommandPattern/CSharp/CommandPatternDemo/TurnRightCommand.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace CommandPattern
+{
+ public class TurnRightCommand : Command
+ {
+ public TurnRightCommand(ReceiveRole pRole)
+ : base(pRole)
+ {
+ }
+
+ public override void Execute()
+ {
+ mReceiveRole.TurnRight();
+ }
+ }
+}
diff --git a/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/Aggregate.cs b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/Aggregate.cs
new file mode 100644
index 0000000..5cefb51
--- /dev/null
+++ b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/Aggregate.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace IteratorPattern
+{
+ public abstract class Aggregate
+ {
+ public abstract Iterator CreateIterator();
+ }
+}
diff --git a/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/ConcreteAggregate.cs b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/ConcreteAggregate.cs
new file mode 100644
index 0000000..2b8c758
--- /dev/null
+++ b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/ConcreteAggregate.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Collections;
+
+namespace IteratorPattern
+{
+ public class ConcreteAggregate : Aggregate
+ {
+ private ArrayList mItems = new ArrayList();
+
+ public override Iterator CreateIterator()
+ {
+ return new ConcreteIterator(this);
+ }
+
+ public int Count
+ {
+ get { return mItems.Count; }
+ }
+
+ public object this[int index]
+ {
+ get { return mItems[index]; }
+ set { mItems.Insert(index, value); }
+ }
+ }
+}
diff --git a/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/ConcreteIterator.cs b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/ConcreteIterator.cs
new file mode 100644
index 0000000..cdfa296
--- /dev/null
+++ b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/ConcreteIterator.cs
@@ -0,0 +1,58 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace IteratorPattern
+{
+ public class ConcreteIterator : Iterator
+ {
+ private ConcreteAggregate mAggregate;
+ private int mCurrent = 0;
+
+ public ConcreteIterator(ConcreteAggregate pAggregate)
+ {
+ this.mAggregate = pAggregate;
+ }
+
+ public override object First()
+ {
+ return mAggregate[ConvertIndex(0)];
+ }
+
+ public override object Next()
+ {
+ object tResult = null;
+ if (mCurrent < mAggregate.Count - 1)
+ {
+ tResult = mAggregate[ConvertIndex(++mCurrent)];
+ }
+
+ return tResult;
+ }
+
+ public override object CurrentItem()
+ {
+ return mAggregate[ConvertIndex(mCurrent)];
+ }
+
+ public override bool IsDone()
+ {
+ return mCurrent >= mAggregate.Count;
+ }
+
+ private int ConvertIndex(int pIndex)
+ {
+ int nNewIndex = 0;
+ if (0 == pIndex % 2)
+ {
+ nNewIndex = pIndex / 2;
+ }
+ else
+ {
+ nNewIndex = (pIndex - 1) / 2 + ((0 == mAggregate.Count % 2) ? mAggregate.Count / 2 : (mAggregate.Count - 1 / 2));
+ }
+
+ return nNewIndex;
+ }
+ }
+}
diff --git a/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/InteratorPatternDemo.cs b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/InteratorPatternDemo.cs
new file mode 100644
index 0000000..53d521f
--- /dev/null
+++ b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/InteratorPatternDemo.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace IteratorPattern
+{
+ public class IteratorPatternDemo
+ {
+ static void Main(string[] args)
+ {
+ ConcreteAggregate tConcreteAggregate = new ConcreteAggregate();
+ tConcreteAggregate[0] = "Item 1";
+ tConcreteAggregate[1] = "Item 2";
+ tConcreteAggregate[2] = "Item 3";
+ tConcreteAggregate[3] = "Item 4";
+
+ ConcreteIterator tConcreteIterator = new ConcreteIterator(tConcreteAggregate);
+
+ object tItem = tConcreteIterator.First();
+ while (tItem != null)
+ {
+ Console.WriteLine(tItem);
+ tItem = tConcreteIterator.Next();
+ }
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/Iterator.cs b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/Iterator.cs
new file mode 100644
index 0000000..3d83e1f
--- /dev/null
+++ b/BehavioralDesignPattern/IteratorPattern/CSharp/IteratorPatternDemo/Iterator.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace IteratorPattern
+{
+ public abstract class Iterator
+ {
+ public abstract object First();
+ public abstract object Next();
+ public abstract bool IsDone();
+ public abstract object CurrentItem();
+ }
+}
diff --git a/BuilderPattern/Java/BuilderPattern.java b/BuilderPattern/Java/BuilderPattern.java
deleted file mode 100644
index 55899c8..0000000
--- a/BuilderPattern/Java/BuilderPattern.java
+++ /dev/null
@@ -1,94 +0,0 @@
-import java.util.*;
-
-public class BuilderPattern {
- public static void main(String args[])
- {
- // Create director and builders
- Director tDirector = new Director();
-
- Builder tBuilder1 = new ConcreteBuilder1();
- Builder tBuilder2 = new ConcreteBuilder2();
-
- // Construct two products
- tDirector.Construct(tBuilder1);
- Product tProduct1 = tBuilder1.GetResult();
- tProduct1.Show();
-
- tDirector.Construct(tBuilder2);
- Product tProduct2 = tBuilder2.GetResult();
- tProduct2.Show();
- }
-}
-
-class Director
-{
- public void Construct(Builder builder)
- {
- builder.BuildPartA();
- builder.BuildPartB();
- }
-}
-
-abstract class Builder
-{
- public abstract void BuildPartA();
- public abstract void BuildPartB();
- public abstract Product GetResult();
-}
-
-class ConcreteBuilder1 extends Builder
-{
- private Product mProduct = new Product();
-
- public void BuildPartA()
- {
- mProduct.Add("Part A");
- }
-
- public void BuildPartB()
- {
- mProduct.Add("Part B");
- }
-
- public Product GetResult()
- {
- return mProduct;
- }
-}
-
-class ConcreteBuilder2 extends Builder
-{
- private Product mProduct = new Product();
-
- public void BuildPartA()
- {
- mProduct.Add("Part X");
- }
-
- public void BuildPartB()
- {
- mProduct.Add("Part Y");
- }
-
- public Product GetResult()
- {
- return mProduct;
- }
-}
-
-class Product
-{
- private ArrayList szParts = new ArrayList();
-
- public void Add(String pPart)
- {
- szParts.add(pPart);
- }
-
- public void Show()
- {
- System.out.println("\nParts on product:");
- for(int i = 0; i < szParts.size(); ++i)
- System.out.println(szParts.get(i));
- }
-}
\ No newline at end of file
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/Main.java b/Creational/AbstractFactory/java/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..ef75706
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/Main.java
@@ -0,0 +1,29 @@
+package io.csie.chris;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.common.AnimalType;
+import io.csie.chris.animal.common.SpeciesType;
+import io.csie.chris.factory.AbstractFactory;
+import io.csie.chris.factory.SpeciesFactory;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ AbstractFactory abstractFactory = new AbstractFactory();
+
+ SpeciesFactory reptileFactory = abstractFactory.getSpeciesFactory(SpeciesType.Reptile.name());
+ Animal tyrannosaurus = reptileFactory.getAnimal(AnimalType.Tyrannosaurus.name());
+ System.out.println("Animal1: " + tyrannosaurus.makeSound());
+
+ Animal snake = reptileFactory.getAnimal(AnimalType.Snake.name());
+ System.out.println("Animal2: " + snake.makeSound());
+
+ SpeciesFactory mammalFactory = abstractFactory.getSpeciesFactory(SpeciesType.Mammal.name());
+ Animal dog = mammalFactory.getAnimal(AnimalType.Dog.name());
+ System.out.println("Animal3: " + dog.makeSound());
+
+ Animal cat = mammalFactory.getAnimal(AnimalType.Cat.name());
+ System.out.println("Animal4: " + cat.makeSound());
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/animal/Animal.java b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Animal.java
new file mode 100644
index 0000000..2fdfbb0
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Animal.java
@@ -0,0 +1,6 @@
+package io.csie.chris.animal;
+
+public abstract class Animal {
+
+ public abstract String makeSound();
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/animal/Cat.java b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Cat.java
new file mode 100644
index 0000000..ec53e48
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Cat.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Cat extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Cat.getSound();
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/animal/Dog.java b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Dog.java
new file mode 100644
index 0000000..4bc3e46
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Dog.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Dog extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Dog.getSound();
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/animal/Lion.java b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Lion.java
new file mode 100644
index 0000000..84c74f2
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Lion.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Lion extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Lion.getSound();
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/animal/Snake.java b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Snake.java
new file mode 100644
index 0000000..07c9cfe
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Snake.java
@@ -0,0 +1,14 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+/**
+ * Created by chris on 12/1/14.
+ */
+public class Snake extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Snake.getSound();
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/animal/Tyrannosaurus.java b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Tyrannosaurus.java
new file mode 100644
index 0000000..1f111d0
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/animal/Tyrannosaurus.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Tyrannosaurus extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Tyrannosaurus.getSound();
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/animal/common/AnimalType.java b/Creational/AbstractFactory/java/src/io/csie/chris/animal/common/AnimalType.java
new file mode 100644
index 0000000..4c5721e
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/animal/common/AnimalType.java
@@ -0,0 +1,31 @@
+package io.csie.chris.animal.common;
+
+public enum AnimalType {
+
+ Cat("Meow", SpeciesType.Mammal),
+
+ Dog("Bark", SpeciesType.Mammal),
+
+ Lion("Howl", SpeciesType.Mammal),
+
+ Snake("Hsi", SpeciesType.Reptile),
+
+ Tyrannosaurus("Haou", SpeciesType.Reptile);
+
+ private String sound;
+
+ private SpeciesType speciesType;
+
+ AnimalType(String sound, SpeciesType speciesType) {
+ this.sound = sound;
+ this.speciesType = speciesType;
+ }
+
+ public String getSound() {
+ return this.sound;
+ }
+
+ public SpeciesType getSpeciesType() {
+ return speciesType;
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/animal/common/SpeciesType.java b/Creational/AbstractFactory/java/src/io/csie/chris/animal/common/SpeciesType.java
new file mode 100644
index 0000000..69de8cb
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/animal/common/SpeciesType.java
@@ -0,0 +1,8 @@
+package io.csie.chris.animal.common;
+
+public enum SpeciesType {
+
+ Mammal,
+
+ Reptile;
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/factory/AbstractFactory.java b/Creational/AbstractFactory/java/src/io/csie/chris/factory/AbstractFactory.java
new file mode 100644
index 0000000..457db22
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/factory/AbstractFactory.java
@@ -0,0 +1,14 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.common.SpeciesType;
+
+public class AbstractFactory {
+
+ public SpeciesFactory getSpeciesFactory(String type) {
+ if (SpeciesType.Mammal.name().equals(type)) {
+ return new MammalFactory();
+ } else {
+ return new ReptileFactory();
+ }
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/factory/MammalFactory.java b/Creational/AbstractFactory/java/src/io/csie/chris/factory/MammalFactory.java
new file mode 100644
index 0000000..715f63c
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/factory/MammalFactory.java
@@ -0,0 +1,17 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.common.AnimalType;
+import io.csie.chris.animal.Cat;
+import io.csie.chris.animal.Dog;
+
+public class MammalFactory extends SpeciesFactory {
+ @Override
+ public Animal getAnimal(String animalType) {
+ if (AnimalType.Dog.name().equals(animalType)) {
+ return new Dog();
+ } else {
+ return new Cat();
+ }
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/factory/ReptileFactory.java b/Creational/AbstractFactory/java/src/io/csie/chris/factory/ReptileFactory.java
new file mode 100644
index 0000000..d8a285d
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/factory/ReptileFactory.java
@@ -0,0 +1,17 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.common.AnimalType;
+import io.csie.chris.animal.Snake;
+import io.csie.chris.animal.Tyrannosaurus;
+
+public class ReptileFactory extends SpeciesFactory {
+ @Override
+ public Animal getAnimal(String animalType) {
+ if (AnimalType.Snake.name().equals(animalType)) {
+ return new Snake();
+ } else {
+ return new Tyrannosaurus();
+ }
+ }
+}
diff --git a/Creational/AbstractFactory/java/src/io/csie/chris/factory/SpeciesFactory.java b/Creational/AbstractFactory/java/src/io/csie/chris/factory/SpeciesFactory.java
new file mode 100644
index 0000000..34df8cd
--- /dev/null
+++ b/Creational/AbstractFactory/java/src/io/csie/chris/factory/SpeciesFactory.java
@@ -0,0 +1,8 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.Animal;
+
+public abstract class SpeciesFactory {
+
+ public abstract Animal getAnimal(String animalType);
+}
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.pbxproj b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..c900594
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.pbxproj
@@ -0,0 +1,345 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 50;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ B9E9975221DC9C6300D7FA35 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9E9975121DC9C6300D7FA35 /* AppDelegate.swift */; };
+ B9E9975421DC9C6300D7FA35 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9E9975321DC9C6300D7FA35 /* ViewController.swift */; };
+ B9E9975721DC9C6300D7FA35 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B9E9975521DC9C6300D7FA35 /* Main.storyboard */; };
+ B9E9975921DC9C6400D7FA35 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = B9E9975821DC9C6400D7FA35 /* Assets.xcassets */; };
+ B9E9975C21DC9C6400D7FA35 /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = B9E9975A21DC9C6400D7FA35 /* LaunchScreen.storyboard */; };
+ B9E9976421DC9CC800D7FA35 /* CalendarFactory.swift in Sources */ = {isa = PBXBuildFile; fileRef = B9E9976321DC9CC800D7FA35 /* CalendarFactory.swift */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ B9E9974E21DC9C6300D7FA35 /* AbstractFactoryDemo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AbstractFactoryDemo.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ B9E9975121DC9C6300D7FA35 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
+ B9E9975321DC9C6300D7FA35 /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
+ B9E9975621DC9C6300D7FA35 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
+ B9E9975821DC9C6400D7FA35 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ B9E9975B21DC9C6400D7FA35 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ B9E9975D21DC9C6400D7FA35 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ B9E9976321DC9CC800D7FA35 /* CalendarFactory.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CalendarFactory.swift; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ B9E9974B21DC9C6300D7FA35 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ B9E9974521DC9C6300D7FA35 = {
+ isa = PBXGroup;
+ children = (
+ B9E9975021DC9C6300D7FA35 /* AbstractFactoryDemo */,
+ B9E9974F21DC9C6300D7FA35 /* Products */,
+ );
+ sourceTree = "";
+ };
+ B9E9974F21DC9C6300D7FA35 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ B9E9974E21DC9C6300D7FA35 /* AbstractFactoryDemo.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ B9E9975021DC9C6300D7FA35 /* AbstractFactoryDemo */ = {
+ isa = PBXGroup;
+ children = (
+ B9E9976321DC9CC800D7FA35 /* CalendarFactory.swift */,
+ B9E9975121DC9C6300D7FA35 /* AppDelegate.swift */,
+ B9E9975321DC9C6300D7FA35 /* ViewController.swift */,
+ B9E9975521DC9C6300D7FA35 /* Main.storyboard */,
+ B9E9975821DC9C6400D7FA35 /* Assets.xcassets */,
+ B9E9975A21DC9C6400D7FA35 /* LaunchScreen.storyboard */,
+ B9E9975D21DC9C6400D7FA35 /* Info.plist */,
+ );
+ path = AbstractFactoryDemo;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ B9E9974D21DC9C6300D7FA35 /* AbstractFactoryDemo */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = B9E9976021DC9C6400D7FA35 /* Build configuration list for PBXNativeTarget "AbstractFactoryDemo" */;
+ buildPhases = (
+ B9E9974A21DC9C6300D7FA35 /* Sources */,
+ B9E9974B21DC9C6300D7FA35 /* Frameworks */,
+ B9E9974C21DC9C6300D7FA35 /* Resources */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = AbstractFactoryDemo;
+ productName = AbstractFactoryDemo;
+ productReference = B9E9974E21DC9C6300D7FA35 /* AbstractFactoryDemo.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ B9E9974621DC9C6300D7FA35 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastSwiftUpdateCheck = 1010;
+ LastUpgradeCheck = 1010;
+ ORGANIZATIONNAME = Chris;
+ TargetAttributes = {
+ B9E9974D21DC9C6300D7FA35 = {
+ CreatedOnToolsVersion = 10.1;
+ };
+ };
+ };
+ buildConfigurationList = B9E9974921DC9C6300D7FA35 /* Build configuration list for PBXProject "AbstractFactoryDemo" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = B9E9974521DC9C6300D7FA35;
+ productRefGroup = B9E9974F21DC9C6300D7FA35 /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ B9E9974D21DC9C6300D7FA35 /* AbstractFactoryDemo */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ B9E9974C21DC9C6300D7FA35 /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B9E9975C21DC9C6400D7FA35 /* LaunchScreen.storyboard in Resources */,
+ B9E9975921DC9C6400D7FA35 /* Assets.xcassets in Resources */,
+ B9E9975721DC9C6300D7FA35 /* Main.storyboard in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ B9E9974A21DC9C6300D7FA35 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ B9E9975421DC9C6300D7FA35 /* ViewController.swift in Sources */,
+ B9E9976421DC9CC800D7FA35 /* CalendarFactory.swift in Sources */,
+ B9E9975221DC9C6300D7FA35 /* AppDelegate.swift in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ B9E9975521DC9C6300D7FA35 /* Main.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ B9E9975621DC9C6300D7FA35 /* Base */,
+ );
+ name = Main.storyboard;
+ sourceTree = "";
+ };
+ B9E9975A21DC9C6400D7FA35 /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ B9E9975B21DC9C6400D7FA35 /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ B9E9975E21DC9C6400D7FA35 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
+ SWIFT_OPTIMIZATION_LEVEL = "-Onone";
+ };
+ name = Debug;
+ };
+ B9E9975F21DC9C6400D7FA35 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ CODE_SIGN_IDENTITY = "iPhone Developer";
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 12.1;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ SWIFT_COMPILATION_MODE = wholemodule;
+ SWIFT_OPTIMIZATION_LEVEL = "-O";
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ B9E9976121DC9C6400D7FA35 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = 37BZLLD35D;
+ INFOPLIST_FILE = AbstractFactoryDemo/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.csie.chris.AbstractFactoryDemo;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 4.2;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ B9E9976221DC9C6400D7FA35 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = 37BZLLD35D;
+ INFOPLIST_FILE = AbstractFactoryDemo/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = io.csie.chris.AbstractFactoryDemo;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 4.2;
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ B9E9974921DC9C6300D7FA35 /* Build configuration list for PBXProject "AbstractFactoryDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B9E9975E21DC9C6400D7FA35 /* Debug */,
+ B9E9975F21DC9C6400D7FA35 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ B9E9976021DC9C6400D7FA35 /* Build configuration list for PBXNativeTarget "AbstractFactoryDemo" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ B9E9976121DC9C6400D7FA35 /* Debug */,
+ B9E9976221DC9C6400D7FA35 /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = B9E9974621DC9C6300D7FA35 /* Project object */;
+}
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 0000000..b7336fb
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 0000000..18d9810
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/xcuserdata/chrissw.huang.xcuserdatad/UserInterfaceState.xcuserstate b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/xcuserdata/chrissw.huang.xcuserdatad/UserInterfaceState.xcuserstate
new file mode 100644
index 0000000..7ae951d
Binary files /dev/null and b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/project.xcworkspace/xcuserdata/chrissw.huang.xcuserdatad/UserInterfaceState.xcuserstate differ
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/xcuserdata/chrissw.huang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/xcuserdata/chrissw.huang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
new file mode 100644
index 0000000..fe2b454
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/xcuserdata/chrissw.huang.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist
@@ -0,0 +1,5 @@
+
+
+
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/xcuserdata/chrissw.huang.xcuserdatad/xcschemes/xcschememanagement.plist b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/xcuserdata/chrissw.huang.xcuserdatad/xcschemes/xcschememanagement.plist
new file mode 100644
index 0000000..e21d660
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo.xcodeproj/xcuserdata/chrissw.huang.xcuserdatad/xcschemes/xcschememanagement.plist
@@ -0,0 +1,14 @@
+
+
+
+
+ SchemeUserState
+
+ AbstractFactoryDemo.xcscheme_^#shared#^_
+
+ orderHint
+ 0
+
+
+
+
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/AppDelegate.swift b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/AppDelegate.swift
new file mode 100644
index 0000000..f407b67
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/AppDelegate.swift
@@ -0,0 +1,46 @@
+//
+// AppDelegate.swift
+// AbstractFactoryDemo
+//
+// Created by Chris on 2019/1/2.
+// Copyright © 2019 Chris. All rights reserved.
+//
+
+import UIKit
+
+@UIApplicationMain
+class AppDelegate: UIResponder, UIApplicationDelegate {
+
+ var window: UIWindow?
+
+
+ func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
+ // Override point for customization after application launch.
+ return true
+ }
+
+ func applicationWillResignActive(_ application: UIApplication) {
+ // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
+ // Use this method to pause ongoing tasks, disable timers, and invalidate graphics rendering callbacks. Games should use this method to pause the game.
+ }
+
+ func applicationDidEnterBackground(_ application: UIApplication) {
+ // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
+ // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
+ }
+
+ func applicationWillEnterForeground(_ application: UIApplication) {
+ // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
+ }
+
+ func applicationDidBecomeActive(_ application: UIApplication) {
+ // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
+ }
+
+ func applicationWillTerminate(_ application: UIApplication) {
+ // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
+ }
+
+
+}
+
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Assets.xcassets/AppIcon.appiconset/Contents.json b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..d8db8d6
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,98 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "83.5x83.5",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "size" : "1024x1024",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Assets.xcassets/Contents.json b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Base.lproj/LaunchScreen.storyboard b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..bfa3612
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Base.lproj/Main.storyboard b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Base.lproj/Main.storyboard
new file mode 100644
index 0000000..f1bcf38
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Base.lproj/Main.storyboard
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/CalendarFactory.swift b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/CalendarFactory.swift
new file mode 100644
index 0000000..b189f47
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/CalendarFactory.swift
@@ -0,0 +1,74 @@
+//
+// CalendarFactory.swift
+// AbstractFactoryDemo
+//
+// Created by Chris on 2019/1/2.
+// Copyright © 2019 Chris. All rights reserved.
+//
+
+import Foundation
+
+protocol Calendar {
+ var accessToken: String { get }
+ var refreshToken: String { get }
+ var userName: String { get }
+}
+
+private struct Google: Calendar {
+ var accessToken: String
+ var refreshToken: String
+ var userName: String
+}
+
+private struct Microsoft: Calendar {
+ var accessToken: String
+ var refreshToken: String
+ var userName: String
+}
+
+protocol CalendarFactory {
+ func createCalendar() -> Calendar?
+}
+
+class GoogleCalendarFactory: CalendarFactory {
+
+ func createCalendar() -> Calendar? {
+ return Google(accessToken: "Google-Access-Token", refreshToken: "Google-Refresh-Token", userName: "Google")
+ }
+}
+
+class MicrosoftCalendarFactory: CalendarFactory {
+ func createCalendar() -> Calendar? {
+ return Microsoft(accessToken: "Microsoft-Access-Token", refreshToken: "Microsoft-Refresh-Token", userName: "Microsoft")
+ }
+}
+
+enum CalType: String {
+ case microsoft = "Microsoft"
+ case google = "Google"
+}
+
+class CalendarBuilder {
+ private var platform: String
+ private var factory: CalendarFactory?
+
+ init(platform: String) {
+ self.platform = platform
+ }
+
+ func initFactory() -> Void {
+ if nil != factory { return }
+
+ if platform == CalType.google.rawValue {
+ factory = GoogleCalendarFactory()
+ } else {
+ factory = MicrosoftCalendarFactory()
+ }
+ }
+
+ func buildCalendar() -> Calendar {
+ initFactory()
+ return (factory?.createCalendar())!
+ }
+
+}
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Info.plist b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Info.plist
new file mode 100644
index 0000000..16be3b6
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/Info.plist
@@ -0,0 +1,45 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ APPL
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIMainStoryboardFile
+ Main
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/ViewController.swift b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/ViewController.swift
new file mode 100644
index 0000000..b1a3808
--- /dev/null
+++ b/Creational/AbstractFactory/swift/AbstractFactoryDemo/AbstractFactoryDemo/ViewController.swift
@@ -0,0 +1,30 @@
+//
+// ViewController.swift
+// AbstractFactoryDemo
+//
+// Created by Chris on 2019/1/2.
+// Copyright © 2019 Chris. All rights reserved.
+//
+
+import UIKit
+
+class ViewController: UIViewController {
+
+ let googleCalendarBuilder: CalendarBuilder = CalendarBuilder(platform: CalType.google.rawValue)
+ let microsoftCalendarBuildr: CalendarBuilder = CalendarBuilder(platform: CalType.microsoft.rawValue)
+
+ override func viewDidLoad() {
+ super.viewDidLoad()
+
+ let googleCalendar = googleCalendarBuilder.buildCalendar()
+ let microsoftCalendar = microsoftCalendarBuildr.buildCalendar()
+
+ print(googleCalendar.userName)
+ print(googleCalendar.accessToken)
+ print(googleCalendar.refreshToken)
+
+ print(microsoftCalendar.userName)
+ print(microsoftCalendar.accessToken)
+ print(microsoftCalendar.refreshToken)
+ }
+}
diff --git a/Creational/BuilderPattern/src/io/csie/chris/Main.java b/Creational/BuilderPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..3b2475c
--- /dev/null
+++ b/Creational/BuilderPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,27 @@
+package io.csie.chris;
+
+import io.csie.chris.builder.*;
+import io.csie.chris.builder.common.Builder;
+import io.csie.chris.builder.common.Director;
+import io.csie.chris.builder.common.Product;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ // Create director and builders
+ Director director = new Director();
+
+ Builder builder1 = new ConcreteBuilder1();
+ Builder builder2 = new ConcreteBuilder2();
+
+ // Construct two products
+ director.Construct(builder1);
+ Product product1 = builder1.GetResult();
+ product1.Show();
+
+ director.Construct(builder2);
+ Product product2 = builder2.GetResult();
+ product2.Show();
+ }
+}
diff --git a/Creational/BuilderPattern/src/io/csie/chris/builder/ConcreteBuilder1.java b/Creational/BuilderPattern/src/io/csie/chris/builder/ConcreteBuilder1.java
new file mode 100644
index 0000000..0aafc80
--- /dev/null
+++ b/Creational/BuilderPattern/src/io/csie/chris/builder/ConcreteBuilder1.java
@@ -0,0 +1,21 @@
+package io.csie.chris.builder;
+
+import io.csie.chris.builder.common.Builder;
+import io.csie.chris.builder.common.Product;
+
+public class ConcreteBuilder1 extends Builder {
+
+ private Product mProduct = new Product();
+
+ public void BuildPartA() {
+ mProduct.Add("Part A");
+ }
+
+ public void BuildPartB() {
+ mProduct.Add("Part B");
+ }
+
+ public Product GetResult() {
+ return mProduct;
+ }
+}
diff --git a/Creational/BuilderPattern/src/io/csie/chris/builder/ConcreteBuilder2.java b/Creational/BuilderPattern/src/io/csie/chris/builder/ConcreteBuilder2.java
new file mode 100644
index 0000000..14d80c1
--- /dev/null
+++ b/Creational/BuilderPattern/src/io/csie/chris/builder/ConcreteBuilder2.java
@@ -0,0 +1,21 @@
+package io.csie.chris.builder;
+
+import io.csie.chris.builder.common.Builder;
+import io.csie.chris.builder.common.Product;
+
+public class ConcreteBuilder2 extends Builder {
+
+ private Product mProduct = new Product();
+
+ public void BuildPartA() {
+ mProduct.Add("Part X");
+ }
+
+ public void BuildPartB() {
+ mProduct.Add("Part Y");
+ }
+
+ public Product GetResult() {
+ return mProduct;
+ }
+}
\ No newline at end of file
diff --git a/Creational/BuilderPattern/src/io/csie/chris/builder/common/Builder.java b/Creational/BuilderPattern/src/io/csie/chris/builder/common/Builder.java
new file mode 100644
index 0000000..00adc7b
--- /dev/null
+++ b/Creational/BuilderPattern/src/io/csie/chris/builder/common/Builder.java
@@ -0,0 +1,10 @@
+package io.csie.chris.builder.common;
+
+public abstract class Builder {
+
+ public abstract void BuildPartA();
+
+ public abstract void BuildPartB();
+
+ public abstract Product GetResult();
+}
\ No newline at end of file
diff --git a/Creational/BuilderPattern/src/io/csie/chris/builder/common/Director.java b/Creational/BuilderPattern/src/io/csie/chris/builder/common/Director.java
new file mode 100644
index 0000000..32f7b75
--- /dev/null
+++ b/Creational/BuilderPattern/src/io/csie/chris/builder/common/Director.java
@@ -0,0 +1,11 @@
+package io.csie.chris.builder.common;
+
+public class Director {
+
+ public void Construct(Builder builder) {
+
+ builder.BuildPartA();
+
+ builder.BuildPartB();
+ }
+}
\ No newline at end of file
diff --git a/Creational/BuilderPattern/src/io/csie/chris/builder/common/Product.java b/Creational/BuilderPattern/src/io/csie/chris/builder/common/Product.java
new file mode 100644
index 0000000..3268eee
--- /dev/null
+++ b/Creational/BuilderPattern/src/io/csie/chris/builder/common/Product.java
@@ -0,0 +1,20 @@
+package io.csie.chris.builder.common;
+
+import java.util.ArrayList;
+
+public class Product {
+
+ private ArrayList szParts = new ArrayList<>();
+
+ public void Add(String pPart) {
+ szParts.add(pPart);
+ }
+
+ public void Show() {
+
+ System.out.println("\nParts on product:");
+
+ for (String szPart : szParts)
+ System.out.println(szPart);
+ }
+}
\ No newline at end of file
diff --git a/Creational/ClassicSingleton/src/io/csie/chris/Main.java b/Creational/ClassicSingleton/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..4e797cf
--- /dev/null
+++ b/Creational/ClassicSingleton/src/io/csie/chris/Main.java
@@ -0,0 +1,15 @@
+package io.csie.chris;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ Singleton singletonInstance1 = Singleton.getInstance();
+
+ Singleton singletonInstance2 = Singleton.getInstance();
+
+ if (singletonInstance1 == singletonInstance2) {
+ System.out.println("They're the same instance");
+ }
+ }
+}
diff --git a/Creational/ClassicSingleton/src/io/csie/chris/Singleton.java b/Creational/ClassicSingleton/src/io/csie/chris/Singleton.java
new file mode 100644
index 0000000..eeb88ed
--- /dev/null
+++ b/Creational/ClassicSingleton/src/io/csie/chris/Singleton.java
@@ -0,0 +1,18 @@
+package io.csie.chris;
+
+public class Singleton {
+
+ private static Singleton instance;
+
+ // Prevent creating new instance from other class.
+ private Singleton() {
+ }
+
+ // If other memebers want to get instance, they have to use this method.
+ public static Singleton getInstance() {
+ if (instance == null) {
+ instance = new Singleton();
+ }
+ return instance;
+ }
+}
diff --git a/Creational/DoubleCheckedLockSingleton/src/io/csie/chris/DCLSingleton.java b/Creational/DoubleCheckedLockSingleton/src/io/csie/chris/DCLSingleton.java
new file mode 100644
index 0000000..1dcda57
--- /dev/null
+++ b/Creational/DoubleCheckedLockSingleton/src/io/csie/chris/DCLSingleton.java
@@ -0,0 +1,25 @@
+package io.csie.chris;
+
+public class DCLSingleton {
+
+ // Use volatile to ensure that works on multithread.
+ private volatile static DCLSingleton instance = null;
+
+ // Make this instance can be accessed only by public method.
+ private DCLSingleton() {
+ }
+
+ public static DCLSingleton getInstance() {
+ // Only if it's the first for creating instance.
+ if (instance == null) {
+ // The method is synchronized on the class object.
+ synchronized (DCLSingleton.class) {
+ // If the instance isn't existed, create the instance.
+ if (instance == null) {
+ instance = new DCLSingleton();
+ }
+ }
+ }
+ return instance;
+ }
+}
diff --git a/Creational/DoubleCheckedLockSingleton/src/io/csie/chris/Main.java b/Creational/DoubleCheckedLockSingleton/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..d0aae03
--- /dev/null
+++ b/Creational/DoubleCheckedLockSingleton/src/io/csie/chris/Main.java
@@ -0,0 +1,15 @@
+package io.csie.chris;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ DCLSingleton instance1 = DCLSingleton.getInstance();
+
+ DCLSingleton instance2 = DCLSingleton.getInstance();
+
+ if (instance1 == instance2) {
+ System.out.println("They're the same instance");
+ }
+ }
+}
diff --git a/Creational/EagerlySingleton/src/io/csie/chris/ESingleton.java b/Creational/EagerlySingleton/src/io/csie/chris/ESingleton.java
new file mode 100644
index 0000000..9bc604c
--- /dev/null
+++ b/Creational/EagerlySingleton/src/io/csie/chris/ESingleton.java
@@ -0,0 +1,15 @@
+package io.csie.chris;
+
+public class ESingleton {
+
+ // Use static initiallizer, that will make instace created fast.
+ private static ESingleton instance = new ESingleton();
+
+ private ESingleton() {
+ }
+
+ // Just get the instance
+ public static ESingleton getInstance() {
+ return instance;
+ }
+}
diff --git a/Creational/EagerlySingleton/src/io/csie/chris/Main.java b/Creational/EagerlySingleton/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..03277c5
--- /dev/null
+++ b/Creational/EagerlySingleton/src/io/csie/chris/Main.java
@@ -0,0 +1,15 @@
+package io.csie.chris;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ ESingleton singletonInstance1 = ESingleton.getInstance();
+
+ ESingleton singletonInstance2 = ESingleton.getInstance();
+
+ if (singletonInstance1 == singletonInstance2) {
+ System.out.println("They're the same instance");
+ }
+ }
+}
diff --git a/Creational/FactoryMethod/src/io/csie/chris/Main.java b/Creational/FactoryMethod/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..79aa06e
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/Main.java
@@ -0,0 +1,26 @@
+package io.csie.chris;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.factory.*;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ IAnimalFactory dogFactory = new DogFactory();
+ Animal dog = dogFactory.createAnimal();
+ System.out.println(dog.makeSound());
+
+ IAnimalFactory catFactory = new CatFactory();
+ Animal cat = catFactory.createAnimal();
+ System.out.println(cat.makeSound());
+
+ IAnimalFactory foxFactory = new FoxFactory();
+ Animal fox = foxFactory.createAnimal();
+ System.out.println(fox.makeSound());
+
+ IAnimalFactory monsterFactory = new MonsterFactory();
+ Animal monster = monsterFactory.createAnimal();
+ System.out.println(monster.makeSound());
+ }
+}
\ No newline at end of file
diff --git a/Creational/FactoryMethod/src/io/csie/chris/animal/Animal.java b/Creational/FactoryMethod/src/io/csie/chris/animal/Animal.java
new file mode 100644
index 0000000..4cfa3e3
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/animal/Animal.java
@@ -0,0 +1,6 @@
+package io.csie.chris.animal;
+
+public abstract class Animal {
+
+ public abstract String makeSound();
+}
\ No newline at end of file
diff --git a/Creational/FactoryMethod/src/io/csie/chris/animal/Cat.java b/Creational/FactoryMethod/src/io/csie/chris/animal/Cat.java
new file mode 100644
index 0000000..ec53e48
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/animal/Cat.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Cat extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Cat.getSound();
+ }
+}
diff --git a/Creational/FactoryMethod/src/io/csie/chris/animal/Dog.java b/Creational/FactoryMethod/src/io/csie/chris/animal/Dog.java
new file mode 100644
index 0000000..e3290a6
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/animal/Dog.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Dog extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Dog.getSound();
+ }
+}
\ No newline at end of file
diff --git a/Creational/FactoryMethod/src/io/csie/chris/animal/Fox.java b/Creational/FactoryMethod/src/io/csie/chris/animal/Fox.java
new file mode 100644
index 0000000..96441d0
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/animal/Fox.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Fox extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Fox.getSound();
+ }
+}
\ No newline at end of file
diff --git a/Creational/FactoryMethod/src/io/csie/chris/animal/Monster.java b/Creational/FactoryMethod/src/io/csie/chris/animal/Monster.java
new file mode 100644
index 0000000..1efdb2e
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/animal/Monster.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Monster extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Monster.getSound();
+ }
+}
diff --git a/Creational/FactoryMethod/src/io/csie/chris/animal/common/AnimalType.java b/Creational/FactoryMethod/src/io/csie/chris/animal/common/AnimalType.java
new file mode 100644
index 0000000..1a886b1
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/animal/common/AnimalType.java
@@ -0,0 +1,22 @@
+package io.csie.chris.animal.common;
+
+public enum AnimalType {
+
+ Cat("Meow"),
+
+ Dog("Bark"),
+
+ Fox("Ssbb"),
+
+ Monster("Unknown");
+
+ private String sound;
+
+ private AnimalType(String sound){
+ this.sound = sound;
+ }
+
+ public String getSound() {
+ return this.sound;
+ }
+}
diff --git a/Creational/FactoryMethod/src/io/csie/chris/factory/CatFactory.java b/Creational/FactoryMethod/src/io/csie/chris/factory/CatFactory.java
new file mode 100644
index 0000000..df6faf2
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/factory/CatFactory.java
@@ -0,0 +1,15 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.Cat;
+
+/**
+ * Created by chris on 12/3/14.
+ */
+public class CatFactory implements IAnimalFactory {
+
+ @Override
+ public Animal createAnimal() {
+ return new Cat();
+ }
+}
diff --git a/Creational/FactoryMethod/src/io/csie/chris/factory/DogFactory.java b/Creational/FactoryMethod/src/io/csie/chris/factory/DogFactory.java
new file mode 100644
index 0000000..14e1f82
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/factory/DogFactory.java
@@ -0,0 +1,12 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.Dog;
+
+public class DogFactory implements IAnimalFactory {
+
+ @Override
+ public Animal createAnimal() {
+ return new Dog();
+ }
+}
diff --git a/Creational/FactoryMethod/src/io/csie/chris/factory/FoxFactory.java b/Creational/FactoryMethod/src/io/csie/chris/factory/FoxFactory.java
new file mode 100644
index 0000000..8aeac04
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/factory/FoxFactory.java
@@ -0,0 +1,12 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.Fox;
+
+public class FoxFactory implements IAnimalFactory {
+
+ @Override
+ public Animal createAnimal() {
+ return new Fox();
+ }
+}
diff --git a/Creational/FactoryMethod/src/io/csie/chris/factory/IAnimalFactory.java b/Creational/FactoryMethod/src/io/csie/chris/factory/IAnimalFactory.java
new file mode 100644
index 0000000..5e582d2
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/factory/IAnimalFactory.java
@@ -0,0 +1,8 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.Animal;
+
+public interface IAnimalFactory {
+
+ Animal createAnimal();
+}
\ No newline at end of file
diff --git a/Creational/FactoryMethod/src/io/csie/chris/factory/MonsterFactory.java b/Creational/FactoryMethod/src/io/csie/chris/factory/MonsterFactory.java
new file mode 100644
index 0000000..7d8ffaf
--- /dev/null
+++ b/Creational/FactoryMethod/src/io/csie/chris/factory/MonsterFactory.java
@@ -0,0 +1,12 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.Monster;
+
+public class MonsterFactory implements IAnimalFactory {
+
+ @Override
+ public Animal createAnimal() {
+ return new Monster();
+ }
+}
diff --git a/PrototypePattern/Java/PrototypeDemo/src/PrototypeDemo.java b/Creational/ProtypePattern/src/io/csie/chris/Main.java
similarity index 60%
rename from PrototypePattern/Java/PrototypeDemo/src/PrototypeDemo.java
rename to Creational/ProtypePattern/src/io/csie/chris/Main.java
index d86ec8e..e03b1b7 100644
--- a/PrototypePattern/Java/PrototypeDemo/src/PrototypeDemo.java
+++ b/Creational/ProtypePattern/src/io/csie/chris/Main.java
@@ -1,16 +1,21 @@
-public class PrototypeDemo
-{
- public static void main(String args[])
- {
+package io.csie.chris;
+
+import io.csie.chris.prototype.Dog;
+import io.csie.chris.prototype.Person;
+
+public class Main {
+
+ public static void main(String args[]) {
+
Person person1 = new Person("Chris", "1234567", 25);
System.out.println(person1.displayInfo());
- Person person2 = (Person)person1.doClone();
+ Person person2 = (Person) person1.doClone();
person2.setAge(29);
person2.setId("7473821");
System.out.println(person2.displayInfo());
- Person person3 = (Person)person1.doClone();
+ Person person3 = (Person) person1.doClone();
person3.setName("John");
person3.setId("8763541");
System.out.println(person3.displayInfo());
@@ -18,7 +23,7 @@ public static void main(String args[])
Dog dog1 = new Dog("Bark");
System.out.println(dog1.displaySound());
- Dog dog2 = (Dog)dog1.doClone();
+ Dog dog2 = (Dog) dog1.doClone();
System.out.println(dog2.displaySound());
}
}
diff --git a/Creational/ProtypePattern/src/io/csie/chris/prototype/Dog.java b/Creational/ProtypePattern/src/io/csie/chris/prototype/Dog.java
new file mode 100644
index 0000000..bcfb8f8
--- /dev/null
+++ b/Creational/ProtypePattern/src/io/csie/chris/prototype/Dog.java
@@ -0,0 +1,21 @@
+package io.csie.chris.prototype;
+
+import io.csie.chris.prototype.common.IPrototype;
+
+public class Dog implements IPrototype {
+
+ private String sound;
+
+ public Dog(String sound) {
+ this.sound = sound;
+ }
+
+ @Override
+ public IPrototype doClone() {
+ return new Dog(sound);
+ }
+
+ public String displaySound() {
+ return "This dog's sound is:" + sound;
+ }
+}
diff --git a/Creational/ProtypePattern/src/io/csie/chris/prototype/Person.java b/Creational/ProtypePattern/src/io/csie/chris/prototype/Person.java
new file mode 100644
index 0000000..18fa5b9
--- /dev/null
+++ b/Creational/ProtypePattern/src/io/csie/chris/prototype/Person.java
@@ -0,0 +1,38 @@
+package io.csie.chris.prototype;
+
+import io.csie.chris.prototype.common.IPrototype;
+
+public class Person implements IPrototype {
+
+ private String name;
+ private String id;
+ private int age;
+
+ public Person(String name, String id, int age) {
+ this.name = name;
+ this.id = id;
+ this.age = age;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public void setId(String id) {
+ this.id = id;
+ }
+
+ public void setAge(int age) {
+ this.age = age;
+ }
+
+ // Make a copy from io.csie.chris.prototype.common.IPrototype
+ @Override
+ public IPrototype doClone() {
+ return new Person(name, id, age);
+ }
+
+ public String displayInfo() {
+ return "This person's name is:" + name + ", id:" + id + ", age:" + age;
+ }
+}
diff --git a/Creational/ProtypePattern/src/io/csie/chris/prototype/common/IPrototype.java b/Creational/ProtypePattern/src/io/csie/chris/prototype/common/IPrototype.java
new file mode 100644
index 0000000..ddfb862
--- /dev/null
+++ b/Creational/ProtypePattern/src/io/csie/chris/prototype/common/IPrototype.java
@@ -0,0 +1,7 @@
+package io.csie.chris.prototype.common;
+
+public interface IPrototype {
+
+ // Create a public method, which can clone whole instance
+ IPrototype doClone();
+}
diff --git a/Creational/SimpleFactoryPattern/src/io/csie/chris/Main.java b/Creational/SimpleFactoryPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..7f5717b
--- /dev/null
+++ b/Creational/SimpleFactoryPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,23 @@
+package io.csie.chris;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.common.AnimalType;
+import io.csie.chris.factory.AnimalFactory;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ Animal animal1 = AnimalFactory.createAnimal(AnimalType.Dog.getName());
+ System.out.println(animal1.makeSound());
+
+ Animal animal2 = AnimalFactory.createAnimal(AnimalType.Cat.getName());
+ System.out.println(animal2.makeSound());
+
+ Animal animal3 = AnimalFactory.createAnimal(AnimalType.Fox.getName());
+ System.out.println(animal3.makeSound());
+
+ Animal animal4 = AnimalFactory.createAnimal(AnimalType.Monster.getName());
+ System.out.println(animal4.makeSound());
+ }
+}
diff --git a/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Animal.java b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Animal.java
new file mode 100644
index 0000000..4cfa3e3
--- /dev/null
+++ b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Animal.java
@@ -0,0 +1,6 @@
+package io.csie.chris.animal;
+
+public abstract class Animal {
+
+ public abstract String makeSound();
+}
\ No newline at end of file
diff --git a/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Cat.java b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Cat.java
new file mode 100644
index 0000000..e61aa00
--- /dev/null
+++ b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Cat.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Cat extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Cat.getSound();
+ }
+}
\ No newline at end of file
diff --git a/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Dog.java b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Dog.java
new file mode 100644
index 0000000..4bc3e46
--- /dev/null
+++ b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Dog.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Dog extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Dog.getSound();
+ }
+}
diff --git a/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Fox.java b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Fox.java
new file mode 100644
index 0000000..c35c71c
--- /dev/null
+++ b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Fox.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Fox extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Fox.getSound();
+ }
+}
diff --git a/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Monster.java b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Monster.java
new file mode 100644
index 0000000..1efdb2e
--- /dev/null
+++ b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/Monster.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalType;
+
+public class Monster extends Animal {
+
+ @Override
+ public String makeSound() {
+ return AnimalType.Monster.getSound();
+ }
+}
diff --git a/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/common/AnimalType.java b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/common/AnimalType.java
new file mode 100644
index 0000000..3b36db7
--- /dev/null
+++ b/Creational/SimpleFactoryPattern/src/io/csie/chris/animal/common/AnimalType.java
@@ -0,0 +1,29 @@
+package io.csie.chris.animal.common;
+
+public enum AnimalType {
+
+ Cat("feline", "Meow"),
+
+ Dog("canine", "Bark"),
+
+ Fox("vulpine", "Ssbb"),
+
+ Monster("xxxxxxx", "Unknown");
+
+ private String sound;
+
+ private String name;
+
+ AnimalType(String name, String sound) {
+ this.name = name;
+ this.sound = sound;
+ }
+
+ public String getSound() {
+ return this.sound;
+ }
+
+ public String getName() {
+ return this.name;
+ }
+}
diff --git a/Creational/SimpleFactoryPattern/src/io/csie/chris/factory/AnimalFactory.java b/Creational/SimpleFactoryPattern/src/io/csie/chris/factory/AnimalFactory.java
new file mode 100644
index 0000000..ff0bc2b
--- /dev/null
+++ b/Creational/SimpleFactoryPattern/src/io/csie/chris/factory/AnimalFactory.java
@@ -0,0 +1,25 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.animal.*;
+import io.csie.chris.animal.common.AnimalType;
+
+public class AnimalFactory {
+
+ // Create the instance by parameter, and it's a static method
+ public static Animal createAnimal(String animalType) {
+
+ Animal animal;
+
+ if (animalType.equals(AnimalType.Dog.getName())) {
+ animal = new Dog();
+ } else if (animalType.equals(AnimalType.Cat.getName())) {
+ animal = new Cat();
+ } else if (animalType.equals(AnimalType.Fox.getName())) {
+ animal = new Fox();
+ } else {
+ animal = new Monster();
+ }
+
+ return animal;
+ }
+}
diff --git a/Creational/SynchronizedSingletonPattern/src/io/csie/chris/Main.java b/Creational/SynchronizedSingletonPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..98a20b2
--- /dev/null
+++ b/Creational/SynchronizedSingletonPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,15 @@
+package io.csie.chris;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ SSingleton instance1 = SSingleton.getInstance();
+
+ SSingleton instance2 = SSingleton.getInstance();
+
+ if (instance1 == instance2) {
+ System.out.println("They're the same instance");
+ }
+ }
+}
diff --git a/Creational/SynchronizedSingletonPattern/src/io/csie/chris/SSingleton.java b/Creational/SynchronizedSingletonPattern/src/io/csie/chris/SSingleton.java
new file mode 100644
index 0000000..0cf7823
--- /dev/null
+++ b/Creational/SynchronizedSingletonPattern/src/io/csie/chris/SSingleton.java
@@ -0,0 +1,25 @@
+package io.csie.chris;
+
+/**
+ * Title: io.csie.chris.SSingleton
+ * Description: decorate the method, getInstance(), with synchronized and static.
+ *
+ * @author chris
+ * @version 1.0
+ */
+public class SSingleton {
+
+ private static SSingleton instance = null;
+
+ private SSingleton() {
+ }
+
+ // Make sure that only one thread can access the instance
+ synchronized static public SSingleton getInstance() {
+
+ if (instance == null) {
+ instance = new SSingleton();
+ }
+ return instance;
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractFactory.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractFactory.cs
new file mode 100644
index 0000000..658a560
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractFactory.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ interface AbstractFactory
+ {
+ AbstractProductPotatoChip CreatePotatoChip();
+ AbstractProductChocolate CreateChocolate();
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractFactoryDemo.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractFactoryDemo.cs
new file mode 100644
index 0000000..0fd4c1b
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractFactoryDemo.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class AbstractFactoryDemo
+ {
+ public static void Main()
+ {
+ AbstractFactory tFactory = null;
+ AbstractProductPotatoChip bPotatoChip = null;
+ AbstractProductChocolate bChocolate = null;
+
+ tFactory = new FactoryA();
+ bPotatoChip = tFactory.CreatePotatoChip();
+ bPotatoChip.GenaratePotatoChip();
+ bChocolate = tFactory.CreateChocolate();
+ bChocolate.GenarateChocolate();
+
+ tFactory = new FactoryB();
+ bPotatoChip = tFactory.CreatePotatoChip();
+ bPotatoChip.GenaratePotatoChip();
+ bChocolate = tFactory.CreateChocolate();
+ bChocolate.GenarateChocolate();
+ }
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractProductChocolate.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractProductChocolate.cs
new file mode 100644
index 0000000..0a37d56
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractProductChocolate.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ abstract class AbstractProductChocolate
+ {
+ public abstract void GenarateChocolate();
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractProductPotatoChip.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractProductPotatoChip.cs
new file mode 100644
index 0000000..b7acb1a
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/AbstractProductPotatoChip.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ abstract class AbstractProductPotatoChip
+ {
+ public abstract void GenaratePotatoChip();
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/FactoryA.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/FactoryA.cs
new file mode 100644
index 0000000..c236ffb
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/FactoryA.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class FactoryA : AbstractFactory
+ {
+ public AbstractProductPotatoChip CreatePotatoChip()
+ {
+ return new ProductPotatoChipA();
+ }
+
+ public AbstractProductChocolate CreateChocolate()
+ {
+ return new ProductChocolateA();
+ }
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/FactoryB.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/FactoryB.cs
new file mode 100644
index 0000000..f838a53
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/FactoryB.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class FactoryB : AbstractFactory
+ {
+ public AbstractProductPotatoChip CreatePotatoChip()
+ {
+ return new ProductPotatoChipB();
+ }
+
+ public AbstractProductChocolate CreateChocolate()
+ {
+ return new ProductChocolateB();
+ }
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductChocolateA.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductChocolateA.cs
new file mode 100644
index 0000000..93d3a59
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductChocolateA.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class ProductChocolateA : AbstractProductChocolate
+ {
+ public override void GenarateChocolate()
+ {
+ Console.WriteLine("Generate Chocolate A");
+ }
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductChocolateB.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductChocolateB.cs
new file mode 100644
index 0000000..2ef64b1
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductChocolateB.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class ProductChocolateB : AbstractProductChocolate
+ {
+ public override void GenarateChocolate()
+ {
+ Console.WriteLine("Generate Chocolate B");
+ }
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductPotatoChipA.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductPotatoChipA.cs
new file mode 100644
index 0000000..2520e84
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductPotatoChipA.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class ProductPotatoChipA : AbstractProductPotatoChip
+ {
+ public override void GenaratePotatoChip()
+ {
+ Console.WriteLine("Generate PotatoChip A");
+ }
+ }
+}
diff --git a/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductPotatoChipB.cs b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductPotatoChipB.cs
new file mode 100644
index 0000000..0eb19dd
--- /dev/null
+++ b/CreationalDesignPattern/AbstractFactoryPattern/CSharp/ProductPotatoChipB.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class ProductPotatoChipB : AbstractProductPotatoChip
+ {
+ public override void GenaratePotatoChip()
+ {
+ Console.WriteLine("Generate PotatoChip B");
+ }
+ }
+}
diff --git a/BuilderPattern/CSharp/Builder.cs b/CreationalDesignPattern/BuilderPattern/CSharp/Builder.cs
similarity index 100%
rename from BuilderPattern/CSharp/Builder.cs
rename to CreationalDesignPattern/BuilderPattern/CSharp/Builder.cs
diff --git a/CreationalDesignPattern/FactoryMethodPattern/CSharp/AbstractProductSnacks.cs b/CreationalDesignPattern/FactoryMethodPattern/CSharp/AbstractProductSnacks.cs
new file mode 100644
index 0000000..0651ecb
--- /dev/null
+++ b/CreationalDesignPattern/FactoryMethodPattern/CSharp/AbstractProductSnacks.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ abstract class AbstractProductSnacks
+ {
+ public abstract void GenarateSnacks();
+ }
+}
diff --git a/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryChocolate.cs b/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryChocolate.cs
new file mode 100644
index 0000000..9cc87d5
--- /dev/null
+++ b/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryChocolate.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class Factory_Chocolate : IFactory
+ {
+ public AbstractProductSnacks CreateSnacks()
+ {
+ return new ProductChocolate();
+ }
+ }
+}
diff --git a/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryDemo.cs b/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryDemo.cs
new file mode 100644
index 0000000..f18e8b1
--- /dev/null
+++ b/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryDemo.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class FactoryDemo
+ {
+ public static void Main()
+ {
+ IFactory tFactory = null;
+ AbstractProductSnacks bSnacks = null;
+
+ tFactory = new FactoryPotatoChip();
+ bSnacks = tFactory.CreateSnacks();
+ bSnacks.GenarateSnacks();
+
+ tFactory = new Factory_Chocolate();
+ bSnacks = tFactory.CreateSnacks();
+ bSnacks.GenarateSnacks();
+ }
+ }
+}
diff --git a/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryPotatoChip.cs b/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryPotatoChip.cs
new file mode 100644
index 0000000..93d27a5
--- /dev/null
+++ b/CreationalDesignPattern/FactoryMethodPattern/CSharp/FactoryPotatoChip.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class FactoryPotatoChip : IFactory
+ {
+ public AbstractProductSnacks CreateSnacks()
+ {
+ return new ProductPotatoChip();
+ }
+ }
+}
diff --git a/CreationalDesignPattern/FactoryMethodPattern/CSharp/IFactory.cs b/CreationalDesignPattern/FactoryMethodPattern/CSharp/IFactory.cs
new file mode 100644
index 0000000..9ccb6f1
--- /dev/null
+++ b/CreationalDesignPattern/FactoryMethodPattern/CSharp/IFactory.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ interface IFactory
+ {
+ AbstractProductSnacks CreateSnacks();
+ }
+}
diff --git a/CreationalDesignPattern/FactoryMethodPattern/CSharp/ProductChocolate.cs b/CreationalDesignPattern/FactoryMethodPattern/CSharp/ProductChocolate.cs
new file mode 100644
index 0000000..f3c7b91
--- /dev/null
+++ b/CreationalDesignPattern/FactoryMethodPattern/CSharp/ProductChocolate.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class ProductChocolate : AbstractProductSnacks
+ {
+ public override void GenarateSnacks()
+ {
+ Console.WriteLine("Generate Chocolate");
+ }
+ }
+}
diff --git a/CreationalDesignPattern/FactoryMethodPattern/CSharp/ProductPotatoChip.cs b/CreationalDesignPattern/FactoryMethodPattern/CSharp/ProductPotatoChip.cs
new file mode 100644
index 0000000..2823b0c
--- /dev/null
+++ b/CreationalDesignPattern/FactoryMethodPattern/CSharp/ProductPotatoChip.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class ProductPotatoChip : AbstractProductSnacks
+ {
+ public override void GenarateSnacks()
+ {
+ Console.WriteLine("Generate PotatoChip");
+ }
+ }
+}
diff --git a/RegistryofSingletonsPattern/CSharp/RegistryOfSingleton.cs b/CreationalDesignPattern/RegistryofSingletonsPattern/CSharp/RegistryOfSingleton.cs
similarity index 100%
rename from RegistryofSingletonsPattern/CSharp/RegistryOfSingleton.cs
rename to CreationalDesignPattern/RegistryofSingletonsPattern/CSharp/RegistryOfSingleton.cs
diff --git a/RegistryofSingletonsPattern/CSharp/RegistryOfSingletonWithReflection.cs b/CreationalDesignPattern/RegistryofSingletonsPattern/CSharp/RegistryOfSingletonWithReflection.cs
similarity index 100%
rename from RegistryofSingletonsPattern/CSharp/RegistryOfSingletonWithReflection.cs
rename to CreationalDesignPattern/RegistryofSingletonsPattern/CSharp/RegistryOfSingletonWithReflection.cs
diff --git a/CreationalDesignPattern/SimpleFactoryPattern/CSharp/AbstractProductSnacks.cs b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/AbstractProductSnacks.cs
new file mode 100644
index 0000000..0651ecb
--- /dev/null
+++ b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/AbstractProductSnacks.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ abstract class AbstractProductSnacks
+ {
+ public abstract void GenarateSnacks();
+ }
+}
diff --git a/CreationalDesignPattern/SimpleFactoryPattern/CSharp/ProductChocolate.cs b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/ProductChocolate.cs
new file mode 100644
index 0000000..f3c7b91
--- /dev/null
+++ b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/ProductChocolate.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class ProductChocolate : AbstractProductSnacks
+ {
+ public override void GenarateSnacks()
+ {
+ Console.WriteLine("Generate Chocolate");
+ }
+ }
+}
diff --git a/CreationalDesignPattern/SimpleFactoryPattern/CSharp/ProductPotatoChip.cs b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/ProductPotatoChip.cs
new file mode 100644
index 0000000..2823b0c
--- /dev/null
+++ b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/ProductPotatoChip.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class ProductPotatoChip : AbstractProductSnacks
+ {
+ public override void GenarateSnacks()
+ {
+ Console.WriteLine("Generate PotatoChip");
+ }
+ }
+}
diff --git a/CreationalDesignPattern/SimpleFactoryPattern/CSharp/SimpleFactoryDemo.cs b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/SimpleFactoryDemo.cs
new file mode 100644
index 0000000..0fd58ab
--- /dev/null
+++ b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/SimpleFactoryDemo.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class SimpleFactoryDemo
+ {
+ public static void Main()
+ {
+ AbstractProductSnacks bSnacks = null;
+
+ bSnacks = SnacksFactory.CreateSnacks("PotatoChip");
+ bSnacks.GenarateSnacks();
+
+ bSnacks = SnacksFactory.CreateSnacks("Chocolate");
+ bSnacks.GenarateSnacks();
+ }
+ }
+}
diff --git a/CreationalDesignPattern/SimpleFactoryPattern/CSharp/SnacksFactory.cs b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/SnacksFactory.cs
new file mode 100644
index 0000000..f5310f7
--- /dev/null
+++ b/CreationalDesignPattern/SimpleFactoryPattern/CSharp/SnacksFactory.cs
@@ -0,0 +1,27 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DesignPatthenStudy
+{
+ class SnacksFactory
+ {
+ public static AbstractProductSnacks CreateSnacks(string pProductName)
+ {
+ AbstractProductSnacks pSnacks = null;
+ switch (pProductName)
+ {
+ case "PotatoChip":
+ pSnacks = new ProductPotatoChip();
+ break;
+ case "Chocolate":
+ pSnacks = new ProductChocolate();
+ break;
+ default:
+ throw new Exception("UNKNOWN PRODUCT");
+
+ }
+ return pSnacks;
+ }
+ }
+}
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/.name b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/.name
similarity index 100%
rename from SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/.name
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/.name
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/compiler.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/compiler.xml
similarity index 100%
rename from AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/compiler.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/compiler.xml
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/copyright/profiles_settings.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/copyright/profiles_settings.xml
similarity index 100%
rename from AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/copyright/profiles_settings.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/copyright/profiles_settings.xml
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/encodings.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/encodings.xml
similarity index 100%
rename from AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/encodings.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/encodings.xml
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/misc.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/misc.xml
similarity index 100%
rename from SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/misc.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/misc.xml
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/modules.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/modules.xml
similarity index 100%
rename from SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/modules.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/modules.xml
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/scopes/scope_settings.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/scopes/scope_settings.xml
similarity index 100%
rename from AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/scopes/scope_settings.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/scopes/scope_settings.xml
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/uiDesigner.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/uiDesigner.xml
similarity index 100%
rename from AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/uiDesigner.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/uiDesigner.xml
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/vcs.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/vcs.xml
similarity index 100%
rename from AbstractFactoryPattern/Java/AbstractFactoryDemo/.idea/vcs.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/vcs.xml
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/workspace.xml b/CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/workspace.xml
similarity index 100%
rename from SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/workspace.xml
rename to CreationalDesignPattern/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/workspace.xml
diff --git a/SingletonPattern/C++/Singleton.cpp b/CreationalDesignPattern/SingletonPattern/C++/Singleton.cpp
similarity index 100%
rename from SingletonPattern/C++/Singleton.cpp
rename to CreationalDesignPattern/SingletonPattern/C++/Singleton.cpp
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/.name b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/.name
deleted file mode 100644
index 92caa72..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-FactoryMethodDemo
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/compiler.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/compiler.xml
deleted file mode 100644
index 9a8b7e5..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/compiler.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/copyright/profiles_settings.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index e7bedf3..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/encodings.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/encodings.xml
deleted file mode 100644
index d821048..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/misc.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/misc.xml
deleted file mode 100644
index b2ce498..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/misc.xml
+++ /dev/null
@@ -1,168 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
- 5050
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/modules.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/modules.xml
deleted file mode 100644
index 6c5d47c..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/modules.xml
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/scopes/scope_settings.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/scopes/scope_settings.xml
deleted file mode 100644
index 922003b..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/scopes/scope_settings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/uiDesigner.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/uiDesigner.xml
deleted file mode 100644
index e96534f..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/uiDesigner.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/vcs.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/vcs.xml
deleted file mode 100644
index 6564d52..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/workspace.xml b/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/workspace.xml
deleted file mode 100644
index 92fecb0..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/.idea/workspace.xml
+++ /dev/null
@@ -1,710 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- true
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
- 5050
-
-
-
-
-
-
-
-
-
- 1417530870330
-
- 1417530870330
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Animal.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Animal.class
deleted file mode 100644
index 79427d4..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Animal.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Cat.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Cat.class
deleted file mode 100644
index fb57a10..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Cat.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/CatFactory.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/CatFactory.class
deleted file mode 100644
index 79aa05b..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/CatFactory.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Dog.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Dog.class
deleted file mode 100644
index 11cc274..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Dog.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/DogFactory.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/DogFactory.class
deleted file mode 100644
index 1377788..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/DogFactory.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Fox.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Fox.class
deleted file mode 100644
index 893d4c9..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Fox.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/FoxFactory.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/FoxFactory.class
deleted file mode 100644
index bd04bdf..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/FoxFactory.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/IAnimalFactory.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/IAnimalFactory.class
deleted file mode 100644
index 8a905ff..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/IAnimalFactory.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Main.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Main.class
deleted file mode 100644
index 7758e82..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Main.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Monster.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Monster.class
deleted file mode 100644
index 15dd78b..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/Monster.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/MonsterFactory.class b/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/MonsterFactory.class
deleted file mode 100644
index eab6a99..0000000
Binary files a/FactoryMethodPattern/Java/FactoryMethodDemo/out/production/FactoryMethodDemo/MonsterFactory.class and /dev/null differ
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Animal.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/Animal.java
deleted file mode 100644
index b971f3c..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Animal.java
+++ /dev/null
@@ -1,4 +0,0 @@
-public abstract class Animal
-{
- public abstract String makeSound();
-}
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Cat.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/Cat.java
deleted file mode 100644
index 5277b69..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Cat.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Cat extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Meow";
- }
-}
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/CatFactory.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/CatFactory.java
deleted file mode 100644
index 2fcb14f..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/CatFactory.java
+++ /dev/null
@@ -1,11 +0,0 @@
-/**
- * Created by chris on 12/3/14.
- */
-public class CatFactory implements IAnimalFactory
-{
- @Override
- public Animal createAnimal()
- {
- return new Cat();
- }
-}
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Dog.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/Dog.java
deleted file mode 100644
index f5af6a0..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Dog.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Dog extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Bark";
- }
-}
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/DogFactory.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/DogFactory.java
deleted file mode 100644
index 313d829..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/DogFactory.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class DogFactory implements IAnimalFactory
-{
- @Override
- public Animal createAnimal()
- {
- return new Dog();
- }
-}
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Fox.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/Fox.java
deleted file mode 100644
index ed3d588..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Fox.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Fox extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Ssbb";
- }
-}
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/FoxFactory.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/FoxFactory.java
deleted file mode 100644
index 17045d4..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/FoxFactory.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class FoxFactory implements IAnimalFactory
-{
- @Override
- public Animal createAnimal()
- {
- return new Fox();
- }
-}
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/IAnimalFactory.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/IAnimalFactory.java
deleted file mode 100644
index aef0818..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/IAnimalFactory.java
+++ /dev/null
@@ -1,4 +0,0 @@
-public interface IAnimalFactory
-{
- Animal createAnimal();
-}
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Main.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/Main.java
deleted file mode 100644
index 230122e..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Main.java
+++ /dev/null
@@ -1,25 +0,0 @@
-public class Main
-{
- public static void main(String args[])
- {
- // Created by Dog factory
- IAnimalFactory animalFactory1 = new DogFactory();
- Animal animal1 = animalFactory1.createAnimal();
- System.out.println(animal1.makeSound());
-
- // Created by Cat factory
- IAnimalFactory animalFactory2 = new CatFactory();
- Animal animal2 = animalFactory2.createAnimal();
- System.out.println(animal2.makeSound());
-
- // Created by Fox factory
- IAnimalFactory animalFactory3 = new FoxFactory();
- Animal animal3 = animalFactory3.createAnimal();
- System.out.println(animal3.makeSound());
-
- // Created by Monster factory
- IAnimalFactory animalFactory4 = new MonsterFactory();
- Animal animal4 = animalFactory4.createAnimal();
- System.out.println(animal4.makeSound());
- }
-}
\ No newline at end of file
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Monster.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/Monster.java
deleted file mode 100644
index 0a7db78..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/Monster.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Monster extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Unknown";
- }
-}
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/src/MonsterFactory.java b/FactoryMethodPattern/Java/FactoryMethodDemo/src/MonsterFactory.java
deleted file mode 100644
index 5a5031a..0000000
--- a/FactoryMethodPattern/Java/FactoryMethodDemo/src/MonsterFactory.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class MonsterFactory implements IAnimalFactory
-{
- @Override
- public Animal createAnimal()
- {
- return new Monster();
- }
-}
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/.name b/PrototypePattern/Java/PrototypeDemo/.idea/.name
deleted file mode 100644
index 7c87a8c..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/.name
+++ /dev/null
@@ -1 +0,0 @@
-PrototypeDemo
\ No newline at end of file
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/compiler.xml b/PrototypePattern/Java/PrototypeDemo/.idea/compiler.xml
deleted file mode 100644
index 217af47..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/compiler.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/copyright/profiles_settings.xml b/PrototypePattern/Java/PrototypeDemo/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index e7bedf3..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/encodings.xml b/PrototypePattern/Java/PrototypeDemo/.idea/encodings.xml
deleted file mode 100644
index e206d70..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/encodings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/misc.xml b/PrototypePattern/Java/PrototypeDemo/.idea/misc.xml
deleted file mode 100644
index e81053b..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/misc.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/modules.xml b/PrototypePattern/Java/PrototypeDemo/.idea/modules.xml
deleted file mode 100644
index 85b6785..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/modules.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/scopes/scope_settings.xml b/PrototypePattern/Java/PrototypeDemo/.idea/scopes/scope_settings.xml
deleted file mode 100644
index 922003b..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/scopes/scope_settings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/vcs.xml b/PrototypePattern/Java/PrototypeDemo/.idea/vcs.xml
deleted file mode 100644
index def6a6a..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/vcs.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/PrototypePattern/Java/PrototypeDemo/.idea/workspace.xml b/PrototypePattern/Java/PrototypeDemo/.idea/workspace.xml
deleted file mode 100644
index 4ccddd1..0000000
--- a/PrototypePattern/Java/PrototypeDemo/.idea/workspace.xml
+++ /dev/null
@@ -1,523 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- localhost
- 5050
-
-
-
-
-
-
-
-
-
- 1416639898963
- 1416639898963
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/PrototypePattern/Java/PrototypeDemo/PrototypeDemo.iml b/PrototypePattern/Java/PrototypeDemo/PrototypeDemo.iml
deleted file mode 100644
index d5c0743..0000000
--- a/PrototypePattern/Java/PrototypeDemo/PrototypeDemo.iml
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Dog.class b/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Dog.class
deleted file mode 100644
index bddf24d..0000000
Binary files a/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Dog.class and /dev/null differ
diff --git a/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Person.class b/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Person.class
deleted file mode 100644
index 60017b3..0000000
Binary files a/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Person.class and /dev/null differ
diff --git a/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Prototype.class b/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Prototype.class
deleted file mode 100644
index 4437d94..0000000
Binary files a/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/Prototype.class and /dev/null differ
diff --git a/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/PrototypeDemo.class b/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/PrototypeDemo.class
deleted file mode 100644
index 887ed25..0000000
Binary files a/PrototypePattern/Java/PrototypeDemo/out/production/PrototypeDemo/PrototypeDemo.class and /dev/null differ
diff --git a/PrototypePattern/Java/PrototypeDemo/src/Dog.java b/PrototypePattern/Java/PrototypeDemo/src/Dog.java
deleted file mode 100644
index 6cbd685..0000000
--- a/PrototypePattern/Java/PrototypeDemo/src/Dog.java
+++ /dev/null
@@ -1,21 +0,0 @@
-public class Dog implements Prototype
-{
- private String sound;
-
- public Dog(String sound)
- {
- this.sound = sound;
- }
-
- // Make a copy from Prototype
- @Override
- public Prototype doClone()
- {
- return new Dog(sound);
- }
-
- public String displaySound()
- {
- return "This dog's sound is:" + sound;
- }
-}
diff --git a/PrototypePattern/Java/PrototypeDemo/src/Person.java b/PrototypePattern/Java/PrototypeDemo/src/Person.java
deleted file mode 100644
index 9eea6cb..0000000
--- a/PrototypePattern/Java/PrototypeDemo/src/Person.java
+++ /dev/null
@@ -1,40 +0,0 @@
-public class Person implements Prototype
-{
- private String name;
- private String id;
- private int age;
-
- public Person(String name, String id, int age)
- {
- this.name = name;
- this.id = id;
- this.age = age;
- }
-
- public void setName(String name)
- {
- this.name = name;
- }
-
- public void setId(String id)
- {
- this.id = id;
- }
-
- public void setAge(int age)
- {
- this.age = age;
- }
-
- // Make a copy from Prototype
- @Override
- public Prototype doClone()
- {
- return new Person(name, id, age);
- }
-
- public String displayInfo()
- {
- return "This person's name is:" + name + ", id:" + id + ", age:" + age;
- }
-}
diff --git a/PrototypePattern/Java/PrototypeDemo/src/Prototype.java b/PrototypePattern/Java/PrototypeDemo/src/Prototype.java
deleted file mode 100644
index 3024fa6..0000000
--- a/PrototypePattern/Java/PrototypeDemo/src/Prototype.java
+++ /dev/null
@@ -1,5 +0,0 @@
-public interface Prototype
-{
- // Create a public method, which can clone whole instance
- public Prototype doClone();
-}
diff --git a/README.md b/README.md
index 6328062..6a060ed 100644
--- a/README.md
+++ b/README.md
@@ -1,13 +1,29 @@
DesignPatternStudy
==================
#Creational Pattern:
-###Prototype Pattern:
-
-###Singleton Pattern:
-
-###Builder:
-
-###Registry of Singleton:
+## |------ 1. Prototype Pattern
+## |------ 2. Singleton Pattern
+## |------ 3. Builder Pattern
+## |------ 4. Registry of Singleton Pattern
+## |------ 5. Simple Factory Pattern
+## |------ 6. Factory Method Pattern
+## |------ 7. Abstract Factory Pattern:
+#Structural Pattern:
+## |------ 1. Composite Pattern
+## |------ 2. Bridge Pattern
+## |------ 3. Flyweight Pattern
+## |------ 4. Proxy Pattern
+## |------ 5. Decorater Pattern
+## |------ 6. Default Adapter Pattern
+## |------ 7. Object Adapter Pattern
+## |------ 8. Class Adapter Pattern
+#Behavioral Pattern:
+## |------ 1. Chain of Responsibility Pattern
+## |------ 2. Command Pattern
+## |------ 3. Strategy Pattern
+## |------ 4. Iterator Pattern
+## |------ 5. Observer Pattern
+## |------ 6. Interpreter Pattern
Our Discussion:
https://designpattern.hackpad.com/The-Design-Pattern-Study-Group-of-Greeks-7hFUlBCoSNo
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/compiler.xml b/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/compiler.xml
deleted file mode 100644
index 9a8b7e5..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/compiler.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/copyright/profiles_settings.xml b/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/copyright/profiles_settings.xml
deleted file mode 100644
index e7bedf3..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/copyright/profiles_settings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/encodings.xml b/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/encodings.xml
deleted file mode 100644
index d821048..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/encodings.xml
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/scopes/scope_settings.xml b/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/scopes/scope_settings.xml
deleted file mode 100644
index 922003b..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/scopes/scope_settings.xml
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/uiDesigner.xml b/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/uiDesigner.xml
deleted file mode 100644
index e96534f..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/uiDesigner.xml
+++ /dev/null
@@ -1,124 +0,0 @@
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
-
-
- -
-
-
- -
-
-
-
-
-
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/vcs.xml b/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/vcs.xml
deleted file mode 100644
index 6564d52..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/.idea/vcs.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/SimpleFactoryDemo.iml b/SimpleFactoryPattern/Java/SimpleFactoryDemo/SimpleFactoryDemo.iml
deleted file mode 100644
index c90834f..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/SimpleFactoryDemo.iml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Animal.class b/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Animal.class
deleted file mode 100644
index 79427d4..0000000
Binary files a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Animal.class and /dev/null differ
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/AnimalFactory.class b/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/AnimalFactory.class
deleted file mode 100644
index 3f101b8..0000000
Binary files a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/AnimalFactory.class and /dev/null differ
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Cat.class b/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Cat.class
deleted file mode 100644
index fb57a10..0000000
Binary files a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Cat.class and /dev/null differ
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Dog.class b/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Dog.class
deleted file mode 100644
index 11cc274..0000000
Binary files a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Dog.class and /dev/null differ
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Fox.class b/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Fox.class
deleted file mode 100644
index 893d4c9..0000000
Binary files a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Fox.class and /dev/null differ
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Main.class b/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Main.class
deleted file mode 100644
index 397d583..0000000
Binary files a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Main.class and /dev/null differ
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Monster.class b/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Monster.class
deleted file mode 100644
index 15dd78b..0000000
Binary files a/SimpleFactoryPattern/Java/SimpleFactoryDemo/out/production/SimpleFactoryDemo/Monster.class and /dev/null differ
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Animal.java b/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Animal.java
deleted file mode 100644
index b971f3c..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Animal.java
+++ /dev/null
@@ -1,4 +0,0 @@
-public abstract class Animal
-{
- public abstract String makeSound();
-}
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/AnimalFactory.java b/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/AnimalFactory.java
deleted file mode 100644
index cda8e38..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/AnimalFactory.java
+++ /dev/null
@@ -1,28 +0,0 @@
-import com.sun.istack.internal.Nullable;
-
-public class AnimalFactory
-{
- // Create the instance by parameter, and it's a static method
- public static Animal createAnimal(String animalType)
- {
- Animal animal = null;
-
- if (animalType.equals("canine"))
- {
- animal = new Dog();
- }
- else if (animalType.equals("feline"))
- {
- animal = new Cat();
- }
- else if (animalType.equals("vulpine"))
- {
- animal = new Fox();
- }
- else
- {
- animal = new Monster();
- }
- return animal;
- }
-}
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Cat.java b/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Cat.java
deleted file mode 100644
index c957d62..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Cat.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Cat extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Meow";
- }
-}
\ No newline at end of file
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Dog.java b/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Dog.java
deleted file mode 100644
index ead4cc1..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Dog.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Dog extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Bark";
- }
-}
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Fox.java b/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Fox.java
deleted file mode 100644
index b51d607..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Fox.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Fox extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Ssbb";
- }
-}
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Main.java b/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Main.java
deleted file mode 100644
index f218535..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Main.java
+++ /dev/null
@@ -1,19 +0,0 @@
-public class Main
-{
- public static void main(String args[])
- {
- AnimalFactory animalFactory = new AnimalFactory();
-
- Animal animal1 = animalFactory.createAnimal("canine");
- System.out.println(animal1.makeSound());
-
- Animal animal2 = animalFactory.createAnimal("feline");
- System.out.println(animal2.makeSound());
-
- Animal animal3 = animalFactory.createAnimal("vulpine");
- System.out.println(animal3.makeSound());
-
- Animal animal4 = animalFactory.createAnimal("xxxxxxx");
- System.out.println(animal4.makeSound());
- }
-}
diff --git a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Monster.java b/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Monster.java
deleted file mode 100644
index 0a7db78..0000000
--- a/SimpleFactoryPattern/Java/SimpleFactoryDemo/src/Monster.java
+++ /dev/null
@@ -1,8 +0,0 @@
-public class Monster extends Animal
-{
- @Override
- public String makeSound()
- {
- return "Unknown";
- }
-}
diff --git a/SingletonPattern/Java/DoubleCheckLockSingleton.java b/SingletonPattern/Java/DoubleCheckLockSingleton.java
deleted file mode 100644
index 69fc1ea..0000000
--- a/SingletonPattern/Java/DoubleCheckLockSingleton.java
+++ /dev/null
@@ -1,28 +0,0 @@
-public class DoubleCheckLockSingleton
-{
- // Use volatile to ensure that works on multithread.
- private volatile static DoubleCheckLockSingleton instance = null;
-
- // Make this instance can be accessed only by public method.
- private DoubleCheckLockSingleton()
- {
- }
-
- public static DoubleCheckLockSingleton getInstance()
- {
- // Only if it's the first for creating instance.
- if (instance == null)
- {
- // The method is synchronized on the class object.
- synchronized(DoubleCheckLockSingleton.class)
- {
- // If the instance isn't existed, create the instance.
- if(instance == null)
- {
- instance = new DoubleCheckLockSingleton();
- }
- }
- }
- return instance;
- }
-}
diff --git a/SingletonPattern/Java/EagerlySingleton.java b/SingletonPattern/Java/EagerlySingleton.java
deleted file mode 100644
index 474c20e..0000000
--- a/SingletonPattern/Java/EagerlySingleton.java
+++ /dev/null
@@ -1,26 +0,0 @@
-public class EagerlySingleton
-{
- // Use static initiallizer, that will make instace created fast.
- private static EagerlySingleton instance = new EagerlySingleton();
-
- private EagerlySingleton()
- {
- }
-
- // Just get the instance
- public static EagerlySingleton getInstance()
- {
- return instance;
- }
-
- public static void main(String[] args)
- {
- EagerlySingleton singletonInstance1 = EagerlySingleton.getInstance();
- EagerlySingleton singletonInstance2 = EagerlySingleton.getInstance();
-
- if(singletonInstance1 == singletonInstance2)
- {
- System.out.println("They're the same instance");
- }
- }
-}
diff --git a/SingletonPattern/Java/Singleton.java b/SingletonPattern/Java/Singleton.java
deleted file mode 100644
index d6c15f9..0000000
--- a/SingletonPattern/Java/Singleton.java
+++ /dev/null
@@ -1,30 +0,0 @@
-class Singleton
-{
- private static Singleton instance;
-
- // Prevent creating new instance from other class.
- private Singleton()
- {
- }
-
- // If other memebers want to get instance, they have to use this method.
- public static Singleton GetInstance()
- {
- if(instance == null)
- {
- instance = new Singleton();
- }
- return instance;
- }
-
- public static void main(String[] args)
- {
- Singleton singletonInstance1 = Singleton.GetInstance();
- Singleton singletonInstance2 = Singleton.GetInstance();
-
- if(singletonInstance1 == singletonInstance2)
- {
- System.out.println("They're the same instance");
- }
- }
-}
diff --git a/SingletonPattern/Java/SynchronizedSingleton.java b/SingletonPattern/Java/SynchronizedSingleton.java
deleted file mode 100644
index bd883f3..0000000
--- a/SingletonPattern/Java/SynchronizedSingleton.java
+++ /dev/null
@@ -1,18 +0,0 @@
-public class SynchronizedSingleton
-{
- private static SynchronizedSingleton instance = null;
-
- private SynchronizedSingleton()
- {
- }
-
- // Make sure that only one thread can access the instance
- synchronized static public SynchronizedSingleton getInstance()
- {
- if (instance == null)
- {
- instance = new SynchronizedSingleton();
- }
- return instance;
- }
-}
diff --git a/Structural/BridgePattern/src/io/csie/chris/Main.java b/Structural/BridgePattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..b8b5c84
--- /dev/null
+++ b/Structural/BridgePattern/src/io/csie/chris/Main.java
@@ -0,0 +1,21 @@
+package io.csie.chris;
+
+import io.csie.chris.remote.AppleRemoteControl;
+import io.csie.chris.tv.ITV;
+import io.csie.chris.tv.SonyTV;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ ITV myTV = new SonyTV();
+
+ AppleRemoteControl myRemoteControl = new AppleRemoteControl(myTV);
+
+ myRemoteControl.setChannelPad(200);
+
+ myRemoteControl.turnOn();
+
+ myRemoteControl.turnOff();
+ }
+}
diff --git a/Structural/BridgePattern/src/io/csie/chris/remote/AbstractRemoteControl.java b/Structural/BridgePattern/src/io/csie/chris/remote/AbstractRemoteControl.java
new file mode 100644
index 0000000..0ffaef8
--- /dev/null
+++ b/Structural/BridgePattern/src/io/csie/chris/remote/AbstractRemoteControl.java
@@ -0,0 +1,24 @@
+package io.csie.chris.remote;
+
+import io.csie.chris.tv.ITV;
+
+public abstract class AbstractRemoteControl {
+
+ private ITV tv;
+
+ public AbstractRemoteControl(ITV tv) {
+ this.tv = tv;
+ }
+
+ public void turnOn() {
+ tv.on();
+ }
+
+ public void turnOff() {
+ tv.off();
+ }
+
+ public void setChannel(int channel) {
+ tv.switchChannel(channel);
+ }
+}
diff --git a/Structural/BridgePattern/src/io/csie/chris/remote/AppleRemoteControl.java b/Structural/BridgePattern/src/io/csie/chris/remote/AppleRemoteControl.java
new file mode 100644
index 0000000..f32075b
--- /dev/null
+++ b/Structural/BridgePattern/src/io/csie/chris/remote/AppleRemoteControl.java
@@ -0,0 +1,16 @@
+package io.csie.chris.remote;
+
+import io.csie.chris.tv.ITV;
+
+public class AppleRemoteControl extends AbstractRemoteControl {
+
+ public AppleRemoteControl(ITV tv) {
+ super(tv);
+ }
+
+ public void setChannelPad(int channel) {
+
+ setChannel(channel);
+ System.out.println("Apple Remote Control Set Channel!");
+ }
+}
\ No newline at end of file
diff --git a/Structural/BridgePattern/src/io/csie/chris/tv/ITV.java b/Structural/BridgePattern/src/io/csie/chris/tv/ITV.java
new file mode 100644
index 0000000..b31b0ee
--- /dev/null
+++ b/Structural/BridgePattern/src/io/csie/chris/tv/ITV.java
@@ -0,0 +1,10 @@
+package io.csie.chris.tv;
+
+public interface ITV {
+
+ void on();
+
+ void off();
+
+ void switchChannel(int channel);
+}
\ No newline at end of file
diff --git a/Structural/BridgePattern/src/io/csie/chris/tv/SonyTV.java b/Structural/BridgePattern/src/io/csie/chris/tv/SonyTV.java
new file mode 100644
index 0000000..6d06716
--- /dev/null
+++ b/Structural/BridgePattern/src/io/csie/chris/tv/SonyTV.java
@@ -0,0 +1,19 @@
+package io.csie.chris.tv;
+
+public class SonyTV implements ITV {
+
+ @Override
+ public void on() {
+ System.out.println("Sony TV on!");
+ }
+
+ @Override
+ public void off() {
+ System.out.println("Sony TV off!");
+ }
+
+ @Override
+ public void switchChannel(int channel) {
+ System.out.println("Sony TV is on channel: " + channel);
+ }
+}
diff --git a/Structural/BridgePattern/src/io/csie/chris/tv/ToshibaTV.java b/Structural/BridgePattern/src/io/csie/chris/tv/ToshibaTV.java
new file mode 100644
index 0000000..17220e9
--- /dev/null
+++ b/Structural/BridgePattern/src/io/csie/chris/tv/ToshibaTV.java
@@ -0,0 +1,19 @@
+package io.csie.chris.tv;
+
+public class ToshibaTV implements ITV {
+
+ @Override
+ public void on() {
+ System.out.println("Toshiba TV on!");
+ }
+
+ @Override
+ public void off() {
+ System.out.println("Toshiba TV off!");
+ }
+
+ @Override
+ public void switchChannel(int channel) {
+ System.out.println("Toshiba TV is on channel: " + channel);
+ }
+}
diff --git a/Structural/ClassAdapterPattern/src/io/csie/chris/Main.java b/Structural/ClassAdapterPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..73c54ea
--- /dev/null
+++ b/Structural/ClassAdapterPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,16 @@
+package io.csie.chris;
+
+import io.csie.chris.adapter.ChickenAdapter;
+import io.csie.chris.animal.Cat;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ Cat cat = new Cat();
+ cat.makeSound();
+
+ ChickenAdapter chickenAdapter = new ChickenAdapter();
+ chickenAdapter.makeSound();
+ }
+}
diff --git a/Structural/ClassAdapterPattern/src/io/csie/chris/adapter/ChickenAdapter.java b/Structural/ClassAdapterPattern/src/io/csie/chris/adapter/ChickenAdapter.java
new file mode 100644
index 0000000..29c7101
--- /dev/null
+++ b/Structural/ClassAdapterPattern/src/io/csie/chris/adapter/ChickenAdapter.java
@@ -0,0 +1,12 @@
+package io.csie.chris.adapter;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.Chicken;
+
+public class ChickenAdapter extends Chicken implements Animal {
+
+ @Override
+ public void makeSound() {
+ chickenSound();
+ }
+}
diff --git a/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Animal.java b/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Animal.java
new file mode 100644
index 0000000..af6543d
--- /dev/null
+++ b/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Animal.java
@@ -0,0 +1,6 @@
+package io.csie.chris.animal;
+
+public interface Animal {
+
+ void makeSound();
+}
\ No newline at end of file
diff --git a/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Cat.java b/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Cat.java
new file mode 100644
index 0000000..ca5ad4a
--- /dev/null
+++ b/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Cat.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalSound;
+
+public class Cat implements Animal {
+
+ @Override
+ public void makeSound() {
+ System.out.println(AnimalSound.Cat.getSound());
+ }
+}
diff --git a/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Chicken.java b/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Chicken.java
new file mode 100644
index 0000000..11bfd0c
--- /dev/null
+++ b/Structural/ClassAdapterPattern/src/io/csie/chris/animal/Chicken.java
@@ -0,0 +1,10 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalSound;
+
+public class Chicken {
+
+ public void chickenSound() {
+ System.out.println(AnimalSound.Chicken.getSound());
+ }
+}
diff --git a/Structural/ClassAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java b/Structural/ClassAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java
new file mode 100644
index 0000000..73cf5b3
--- /dev/null
+++ b/Structural/ClassAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java
@@ -0,0 +1,18 @@
+package io.csie.chris.animal.common;
+
+public enum AnimalSound {
+
+ Cat("Meow!"),
+
+ Chicken("Go go go!");
+
+ private String sound;
+
+ AnimalSound(String sound) {
+ this.sound = sound;
+ }
+
+ public String getSound() {
+ return this.sound;
+ }
+}
diff --git a/Structural/CompositePattern/src/io/csie/chris/Main.java b/Structural/CompositePattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..3cfb6f6
--- /dev/null
+++ b/Structural/CompositePattern/src/io/csie/chris/Main.java
@@ -0,0 +1,39 @@
+package io.csie.chris;
+
+import io.csie.chris.menu.CompositeMenu;
+import io.csie.chris.menu.Item;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ CompositeMenu breakfastMenu = new CompositeMenu();
+ CompositeMenu luncuMenu = new CompositeMenu();
+
+ CompositeMenu mainMenu = new CompositeMenu();
+
+ breakfastMenu.add(new Item("Banana", 20));
+ breakfastMenu.add(new Item("Apple", 50));
+
+ luncuMenu.add(new Item("Pork", 100));
+ luncuMenu.add(new Item("Beaf", 150));
+
+ mainMenu.add(breakfastMenu);
+ mainMenu.add(luncuMenu);
+
+ mainMenu.print();
+
+
+ CompositeMenu dinnerMenu = new CompositeMenu();
+
+ dinnerMenu.add(new Item("8 pond beef", 200));
+
+ CompositeMenu dailyMenu = new CompositeMenu();
+
+ dailyMenu.add(mainMenu);
+ dailyMenu.add(dinnerMenu);
+
+ dailyMenu.print();
+
+ }
+}
diff --git a/Structural/CompositePattern/src/io/csie/chris/menu/CompositeMenu.java b/Structural/CompositePattern/src/io/csie/chris/menu/CompositeMenu.java
new file mode 100644
index 0000000..06dada8
--- /dev/null
+++ b/Structural/CompositePattern/src/io/csie/chris/menu/CompositeMenu.java
@@ -0,0 +1,25 @@
+package io.csie.chris.menu;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CompositeMenu implements IMenu {
+
+ // Collection of Menu items
+ private List menuList = new ArrayList<>();
+
+ @Override
+ public void print() {
+ for (IMenu item : menuList) {
+ item.print();
+ }
+ }
+
+ public void add(IMenu item) {
+ menuList.add(item);
+ }
+
+ public void remove(IMenu item) {
+ menuList.remove(item);
+ }
+}
diff --git a/Structural/CompositePattern/src/io/csie/chris/menu/IMenu.java b/Structural/CompositePattern/src/io/csie/chris/menu/IMenu.java
new file mode 100644
index 0000000..08b2e6c
--- /dev/null
+++ b/Structural/CompositePattern/src/io/csie/chris/menu/IMenu.java
@@ -0,0 +1,6 @@
+package io.csie.chris.menu;
+
+public interface IMenu {
+
+ void print();
+}
diff --git a/Structural/CompositePattern/src/io/csie/chris/menu/Item.java b/Structural/CompositePattern/src/io/csie/chris/menu/Item.java
new file mode 100644
index 0000000..8560d6b
--- /dev/null
+++ b/Structural/CompositePattern/src/io/csie/chris/menu/Item.java
@@ -0,0 +1,17 @@
+package io.csie.chris.menu;
+
+public class Item implements IMenu {
+
+ private String name;
+ private int price;
+
+ public Item(String name, int price) {
+ this.name = name;
+ this.price = price;
+ }
+
+ @Override
+ public void print() {
+ System.out.println("Item: " + this.name + ", " + this.price);
+ }
+}
diff --git a/Structural/DecoratorPattern/src/io/csie/chris/EmailSender.java b/Structural/DecoratorPattern/src/io/csie/chris/EmailSender.java
new file mode 100644
index 0000000..b501579
--- /dev/null
+++ b/Structural/DecoratorPattern/src/io/csie/chris/EmailSender.java
@@ -0,0 +1,20 @@
+package io.csie.chris;
+
+import io.csie.chris.decorator.ExternalEmailDecorator;
+import io.csie.chris.decorator.SecureEmailDecorator;
+import io.csie.chris.email.Email;
+
+public class EmailSender {
+
+ public static void main(String args[]) {
+
+ Email email = new Email("This an e-mail!");
+ System.out.println(email.getContents());
+
+ ExternalEmailDecorator externalEmailDecorator = new ExternalEmailDecorator(email);
+ System.out.println(externalEmailDecorator.getContents());
+
+ SecureEmailDecorator secureEmailDecorator = new SecureEmailDecorator(email);
+ System.out.println(secureEmailDecorator.getContents());
+ }
+}
\ No newline at end of file
diff --git a/Structural/DecoratorPattern/src/io/csie/chris/decorator/EmailDecorator.java b/Structural/DecoratorPattern/src/io/csie/chris/decorator/EmailDecorator.java
new file mode 100644
index 0000000..f719b1e
--- /dev/null
+++ b/Structural/DecoratorPattern/src/io/csie/chris/decorator/EmailDecorator.java
@@ -0,0 +1,8 @@
+package io.csie.chris.decorator;
+
+import io.csie.chris.email.IEmail;
+
+public abstract class EmailDecorator implements IEmail {
+
+ IEmail originalEmail;
+}
diff --git a/Structural/DecoratorPattern/src/io/csie/chris/decorator/ExternalEmailDecorator.java b/Structural/DecoratorPattern/src/io/csie/chris/decorator/ExternalEmailDecorator.java
new file mode 100644
index 0000000..c4324d7
--- /dev/null
+++ b/Structural/DecoratorPattern/src/io/csie/chris/decorator/ExternalEmailDecorator.java
@@ -0,0 +1,22 @@
+package io.csie.chris.decorator;
+
+import io.csie.chris.email.IEmail;
+
+public class ExternalEmailDecorator extends EmailDecorator {
+
+ private String content;
+
+ public ExternalEmailDecorator(IEmail iEmail) {
+ originalEmail = iEmail;
+ }
+
+ @Override
+ public String getContents() {
+ content = attachMessage(originalEmail.getContents());
+ return content;
+ }
+
+ private String attachMessage(String message) {
+ return message + " attached!";
+ }
+}
diff --git a/Structural/DecoratorPattern/src/io/csie/chris/decorator/SecureEmailDecorator.java b/Structural/DecoratorPattern/src/io/csie/chris/decorator/SecureEmailDecorator.java
new file mode 100644
index 0000000..06dbd5a
--- /dev/null
+++ b/Structural/DecoratorPattern/src/io/csie/chris/decorator/SecureEmailDecorator.java
@@ -0,0 +1,22 @@
+package io.csie.chris.decorator;
+
+import io.csie.chris.email.IEmail;
+
+public class SecureEmailDecorator extends EmailDecorator {
+
+ private String content;
+
+ public SecureEmailDecorator(IEmail iEmail) {
+ originalEmail = iEmail;
+ }
+
+ @Override
+ public String getContents() {
+ content = encryptEmailContent(originalEmail.getContents());
+ return content;
+ }
+
+ private String encryptEmailContent(String message) {
+ return new StringBuilder(message).reverse().toString();
+ }
+}
\ No newline at end of file
diff --git a/Structural/DecoratorPattern/src/io/csie/chris/email/Email.java b/Structural/DecoratorPattern/src/io/csie/chris/email/Email.java
new file mode 100644
index 0000000..b2d89db
--- /dev/null
+++ b/Structural/DecoratorPattern/src/io/csie/chris/email/Email.java
@@ -0,0 +1,15 @@
+package io.csie.chris.email;
+
+public class Email implements IEmail {
+
+ private String content;
+
+ public Email(String content) {
+ this.content = content;
+ }
+
+ @Override
+ public String getContents() {
+ return this.content;
+ }
+}
diff --git a/Structural/DecoratorPattern/src/io/csie/chris/email/IEmail.java b/Structural/DecoratorPattern/src/io/csie/chris/email/IEmail.java
new file mode 100644
index 0000000..41d655b
--- /dev/null
+++ b/Structural/DecoratorPattern/src/io/csie/chris/email/IEmail.java
@@ -0,0 +1,6 @@
+package io.csie.chris.email;
+
+public interface IEmail {
+
+ String getContents();
+}
diff --git a/Structural/DefaultAdapterPattern/src/io/csie/chris/Main.java b/Structural/DefaultAdapterPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..fcd5bcb
--- /dev/null
+++ b/Structural/DefaultAdapterPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,21 @@
+package io.csie.chris;
+
+import io.csie.chris.adapte.ChickenAdapter;
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.Cat;
+import io.csie.chris.animal.Lion;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ Animal lion = new Lion();
+ lion.makeSound();
+
+ Animal cat = new Cat();
+ cat.makeSound();
+
+ Animal chickenAdapter = new ChickenAdapter();
+ chickenAdapter.makeSound();
+ }
+}
diff --git a/Structural/DefaultAdapterPattern/src/io/csie/chris/adapte/ChickenAdapter.java b/Structural/DefaultAdapterPattern/src/io/csie/chris/adapte/ChickenAdapter.java
new file mode 100644
index 0000000..29841a5
--- /dev/null
+++ b/Structural/DefaultAdapterPattern/src/io/csie/chris/adapte/ChickenAdapter.java
@@ -0,0 +1,14 @@
+package io.csie.chris.adapte;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.Chicken;
+
+public class ChickenAdapter extends Animal {
+
+ private Chicken chicken = new Chicken();
+
+ @Override
+ public void makeSound() {
+ chicken.chickenSound();
+ }
+}
diff --git a/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Animal.java b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Animal.java
new file mode 100644
index 0000000..0e72774
--- /dev/null
+++ b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Animal.java
@@ -0,0 +1,6 @@
+package io.csie.chris.animal;
+
+public abstract class Animal {
+
+ public abstract void makeSound();
+}
diff --git a/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Cat.java b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Cat.java
new file mode 100644
index 0000000..a82cddb
--- /dev/null
+++ b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Cat.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalSound;
+
+public class Cat extends Animal {
+
+ @Override
+ public void makeSound() {
+ System.out.println(AnimalSound.Cat.getSound());
+ }
+}
diff --git a/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Chicken.java b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Chicken.java
new file mode 100644
index 0000000..11bfd0c
--- /dev/null
+++ b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Chicken.java
@@ -0,0 +1,10 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalSound;
+
+public class Chicken {
+
+ public void chickenSound() {
+ System.out.println(AnimalSound.Chicken.getSound());
+ }
+}
diff --git a/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Lion.java b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Lion.java
new file mode 100644
index 0000000..86a08d2
--- /dev/null
+++ b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/Lion.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalSound;
+
+public class Lion extends Animal {
+
+ @Override
+ public void makeSound() {
+ System.out.println(AnimalSound.Lion.getSound());
+ }
+}
diff --git a/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java
new file mode 100644
index 0000000..0c86df1
--- /dev/null
+++ b/Structural/DefaultAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java
@@ -0,0 +1,20 @@
+package io.csie.chris.animal.common;
+
+public enum AnimalSound {
+
+ Cat("Meow!"),
+
+ Chicken("Go go go!"),
+
+ Lion("Howl!");
+
+ private String sound;
+
+ AnimalSound(String sound) {
+ this.sound = sound;
+ }
+
+ public String getSound() {
+ return this.sound;
+ }
+}
diff --git a/Structural/FacadePattern/src/io/csie/chris/Main.java b/Structural/FacadePattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..eeff49c
--- /dev/null
+++ b/Structural/FacadePattern/src/io/csie/chris/Main.java
@@ -0,0 +1,12 @@
+package io.csie.chris;
+
+import io.csie.chris.facade.ComputerFacade;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ ComputerFacade computerFacade = new ComputerFacade();
+ computerFacade.run();
+ }
+}
diff --git a/Structural/FacadePattern/src/io/csie/chris/component/CPU.java b/Structural/FacadePattern/src/io/csie/chris/component/CPU.java
new file mode 100644
index 0000000..290d08c
--- /dev/null
+++ b/Structural/FacadePattern/src/io/csie/chris/component/CPU.java
@@ -0,0 +1,9 @@
+package io.csie.chris.component;
+
+public class CPU implements IComponent {
+
+ @Override
+ public void doProcessing() {
+ System.out.println("CPU is processing.");
+ }
+}
diff --git a/Structural/FacadePattern/src/io/csie/chris/component/HardDrive.java b/Structural/FacadePattern/src/io/csie/chris/component/HardDrive.java
new file mode 100644
index 0000000..6b6ebee
--- /dev/null
+++ b/Structural/FacadePattern/src/io/csie/chris/component/HardDrive.java
@@ -0,0 +1,9 @@
+package io.csie.chris.component;
+
+public class HardDrive implements IComponent {
+
+ @Override
+ public void doProcessing() {
+ System.out.println("Hard drive is processing.");
+ }
+}
diff --git a/Structural/FacadePattern/src/io/csie/chris/component/IComponent.java b/Structural/FacadePattern/src/io/csie/chris/component/IComponent.java
new file mode 100644
index 0000000..23d0f8e
--- /dev/null
+++ b/Structural/FacadePattern/src/io/csie/chris/component/IComponent.java
@@ -0,0 +1,6 @@
+package io.csie.chris.component;
+
+public interface IComponent {
+
+ void doProcessing();
+}
diff --git a/Structural/FacadePattern/src/io/csie/chris/component/Memory.java b/Structural/FacadePattern/src/io/csie/chris/component/Memory.java
new file mode 100644
index 0000000..30be621
--- /dev/null
+++ b/Structural/FacadePattern/src/io/csie/chris/component/Memory.java
@@ -0,0 +1,9 @@
+package io.csie.chris.component;
+
+public class Memory implements IComponent {
+
+ @Override
+ public void doProcessing() {
+ System.out.println("Memory is processing.");
+ }
+}
diff --git a/Structural/FacadePattern/src/io/csie/chris/facade/ComputerFacade.java b/Structural/FacadePattern/src/io/csie/chris/facade/ComputerFacade.java
new file mode 100644
index 0000000..9b0a848
--- /dev/null
+++ b/Structural/FacadePattern/src/io/csie/chris/facade/ComputerFacade.java
@@ -0,0 +1,24 @@
+package io.csie.chris.facade;
+
+import io.csie.chris.component.CPU;
+import io.csie.chris.component.HardDrive;
+import io.csie.chris.component.Memory;
+
+public class ComputerFacade {
+
+ private CPU cpu;
+ private Memory memory;
+ private HardDrive hardDrive;
+
+ public ComputerFacade() {
+ this.cpu = new CPU();
+ this.memory = new Memory();
+ this.hardDrive = new HardDrive();
+ }
+
+ public void run() {
+ cpu.doProcessing();
+ memory.doProcessing();
+ hardDrive.doProcessing();
+ }
+}
diff --git a/Structural/FlyweightPattern/src/io/csie/chris/Main.java b/Structural/FlyweightPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..1b3959c
--- /dev/null
+++ b/Structural/FlyweightPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,19 @@
+import io.csie.chris.factory.ShapeFactory;
+import io.csie.chris.shape.Circle;
+
+public class Main {
+ private static final String colors[] = {"Red", "Orange", "Yellow", "Green", "Blue", "Indigo", "Purple"};
+
+ private static String getRandomColor() {
+ int number = (int) (Math.random() * colors.length);
+ System.out.println(number + " ");
+ return colors[number];
+ }
+
+ public static void main(String args[]) {
+ for (int i = 0; i < 10; ++i) {
+ Circle circle = (Circle) ShapeFactory.getCircle(getRandomColor());
+ circle.draw();
+ }
+ }
+}
diff --git a/Structural/FlyweightPattern/src/io/csie/chris/factory/ShapeFactory.java b/Structural/FlyweightPattern/src/io/csie/chris/factory/ShapeFactory.java
new file mode 100644
index 0000000..e38ed6e
--- /dev/null
+++ b/Structural/FlyweightPattern/src/io/csie/chris/factory/ShapeFactory.java
@@ -0,0 +1,23 @@
+package io.csie.chris.factory;
+
+import io.csie.chris.shape.Circle;
+import io.csie.chris.shape.IShape;
+
+import java.util.HashMap;
+
+public class ShapeFactory {
+
+ private static final HashMap circleMap = new HashMap();
+
+ public static IShape getCircle(String color) {
+
+ Circle circle = (Circle) circleMap.get(color);
+
+ if (circle == null) {
+ circle = new Circle(color);
+ circleMap.put(color, circle);
+ System.out.println("Creating circle of color: " + color);
+ }
+ return circle;
+ }
+}
diff --git a/Structural/FlyweightPattern/src/io/csie/chris/shape/Circle.java b/Structural/FlyweightPattern/src/io/csie/chris/shape/Circle.java
new file mode 100644
index 0000000..5745473
--- /dev/null
+++ b/Structural/FlyweightPattern/src/io/csie/chris/shape/Circle.java
@@ -0,0 +1,15 @@
+package io.csie.chris.shape;
+
+public class Circle implements IShape {
+
+ private String color;
+
+ public Circle(String color) {
+ this.color = color;
+ }
+
+ @Override
+ public void draw() {
+ System.out.println("Color: " + color);
+ }
+}
diff --git a/Structural/FlyweightPattern/src/io/csie/chris/shape/IShape.java b/Structural/FlyweightPattern/src/io/csie/chris/shape/IShape.java
new file mode 100644
index 0000000..c62a45a
--- /dev/null
+++ b/Structural/FlyweightPattern/src/io/csie/chris/shape/IShape.java
@@ -0,0 +1,6 @@
+package io.csie.chris.shape;
+
+public interface IShape {
+
+ void draw();
+}
diff --git a/Structural/ObjectAdapterPattern/src/io/csie/chris/Main.java b/Structural/ObjectAdapterPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..73c54ea
--- /dev/null
+++ b/Structural/ObjectAdapterPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,16 @@
+package io.csie.chris;
+
+import io.csie.chris.adapter.ChickenAdapter;
+import io.csie.chris.animal.Cat;
+
+public class Main {
+
+ public static void main(String args[]) {
+
+ Cat cat = new Cat();
+ cat.makeSound();
+
+ ChickenAdapter chickenAdapter = new ChickenAdapter();
+ chickenAdapter.makeSound();
+ }
+}
diff --git a/Structural/ObjectAdapterPattern/src/io/csie/chris/adapter/ChickenAdapter.java b/Structural/ObjectAdapterPattern/src/io/csie/chris/adapter/ChickenAdapter.java
new file mode 100644
index 0000000..9e7fae1
--- /dev/null
+++ b/Structural/ObjectAdapterPattern/src/io/csie/chris/adapter/ChickenAdapter.java
@@ -0,0 +1,18 @@
+package io.csie.chris.adapter;
+
+import io.csie.chris.animal.Animal;
+import io.csie.chris.animal.Chicken;
+
+public class ChickenAdapter implements Animal {
+
+ private Chicken chicken;
+
+ public ChickenAdapter() {
+ chicken = new Chicken();
+ }
+
+ @Override
+ public void makeSound() {
+ chicken.chickenSound();
+ }
+}
diff --git a/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Animal.java b/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Animal.java
new file mode 100644
index 0000000..af6543d
--- /dev/null
+++ b/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Animal.java
@@ -0,0 +1,6 @@
+package io.csie.chris.animal;
+
+public interface Animal {
+
+ void makeSound();
+}
\ No newline at end of file
diff --git a/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Cat.java b/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Cat.java
new file mode 100644
index 0000000..ca5ad4a
--- /dev/null
+++ b/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Cat.java
@@ -0,0 +1,11 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalSound;
+
+public class Cat implements Animal {
+
+ @Override
+ public void makeSound() {
+ System.out.println(AnimalSound.Cat.getSound());
+ }
+}
diff --git a/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Chicken.java b/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Chicken.java
new file mode 100644
index 0000000..11bfd0c
--- /dev/null
+++ b/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/Chicken.java
@@ -0,0 +1,10 @@
+package io.csie.chris.animal;
+
+import io.csie.chris.animal.common.AnimalSound;
+
+public class Chicken {
+
+ public void chickenSound() {
+ System.out.println(AnimalSound.Chicken.getSound());
+ }
+}
diff --git a/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java b/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java
new file mode 100644
index 0000000..73cf5b3
--- /dev/null
+++ b/Structural/ObjectAdapterPattern/src/io/csie/chris/animal/common/AnimalSound.java
@@ -0,0 +1,18 @@
+package io.csie.chris.animal.common;
+
+public enum AnimalSound {
+
+ Cat("Meow!"),
+
+ Chicken("Go go go!");
+
+ private String sound;
+
+ AnimalSound(String sound) {
+ this.sound = sound;
+ }
+
+ public String getSound() {
+ return this.sound;
+ }
+}
diff --git a/Structural/ProxyPattern/src/io/csie/chris/Main.java b/Structural/ProxyPattern/src/io/csie/chris/Main.java
new file mode 100644
index 0000000..bcc4c37
--- /dev/null
+++ b/Structural/ProxyPattern/src/io/csie/chris/Main.java
@@ -0,0 +1,15 @@
+package io.csie.chris;
+
+import io.csie.chris.image.common.IImage;
+import io.csie.chris.image.proxy.ProxyImage;
+
+public class Main {
+
+ public static void main(String args[]) {
+ IImage iImage = new ProxyImage("picture_2014_12_31.png");
+
+ iImage.display();
+ System.out.println("======================");
+ iImage.display();
+ }
+}
diff --git a/Structural/ProxyPattern/src/io/csie/chris/image/RealImage.java b/Structural/ProxyPattern/src/io/csie/chris/image/RealImage.java
new file mode 100644
index 0000000..84f88ee
--- /dev/null
+++ b/Structural/ProxyPattern/src/io/csie/chris/image/RealImage.java
@@ -0,0 +1,22 @@
+package io.csie.chris.image;
+
+import io.csie.chris.image.common.IImage;
+
+public class RealImage implements IImage {
+
+ private String fileName;
+
+ public RealImage(String fileName) {
+ this.fileName = fileName;
+ this.loadImage(this.fileName);
+ }
+
+ @Override
+ public void display() {
+ System.out.println(this.fileName);
+ }
+
+ public void loadImage(String fileName) {
+ System.out.println("Load " + fileName);
+ }
+}
diff --git a/Structural/ProxyPattern/src/io/csie/chris/image/common/IImage.java b/Structural/ProxyPattern/src/io/csie/chris/image/common/IImage.java
new file mode 100644
index 0000000..3211f53
--- /dev/null
+++ b/Structural/ProxyPattern/src/io/csie/chris/image/common/IImage.java
@@ -0,0 +1,6 @@
+package io.csie.chris.image.common;
+
+public interface IImage {
+
+ void display();
+}
diff --git a/Structural/ProxyPattern/src/io/csie/chris/image/proxy/ProxyImage.java b/Structural/ProxyPattern/src/io/csie/chris/image/proxy/ProxyImage.java
new file mode 100644
index 0000000..f128688
--- /dev/null
+++ b/Structural/ProxyPattern/src/io/csie/chris/image/proxy/ProxyImage.java
@@ -0,0 +1,26 @@
+package io.csie.chris.image.proxy;
+
+import io.csie.chris.image.RealImage;
+import io.csie.chris.image.common.IImage;
+
+/**
+ * Created by chris on 1/4/15.
+ */
+public class ProxyImage implements IImage {
+
+ private RealImage realImage;
+ private String fileName;
+
+ public ProxyImage(String fileName) {
+ this.fileName = fileName;
+ }
+
+ @Override
+ public void display() {
+ if (realImage == null) {
+ System.out.println("realImage doesn't exist!");
+ realImage = new RealImage(fileName);
+ }
+ realImage.display();
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/CanonLens.cs b/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/CanonLens.cs
new file mode 100644
index 0000000..cd053e8
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/CanonLens.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ClassAdapter
+{
+ public class CanonLens
+ {
+ protected string mName;
+ public void SetupCanonCamera(string pCamera)
+ {
+ Console.WriteLine(mName + " setup on camera : " + pCamera);
+ }
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/ClassAdapterDemo.cs b/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/ClassAdapterDemo.cs
new file mode 100644
index 0000000..92fbd7c
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/ClassAdapterDemo.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ClassAdapter
+{
+ class ClassAdapterDemo
+ {
+ static void Main(string[] args)
+ {
+ INikonLens tNikonLens = new LensAdaptor();
+ tNikonLens.SetupNikonCamera("Canon EF 70-200mm F4l USM", "Nikon D5300");
+
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/INikonLens.cs b/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/INikonLens.cs
new file mode 100644
index 0000000..4092b0c
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/INikonLens.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ClassAdapter
+{
+ public interface INikonLens
+ {
+ void SetupNikonCamera(string pLens, string pCamera);
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/LensAdaptor.cs b/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/LensAdaptor.cs
new file mode 100644
index 0000000..73c56c5
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/ClassAdapterPattern/CSharp/LensAdaptor.cs
@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ClassAdapter
+{
+ public class LensAdaptor : CanonLens, INikonLens
+ {
+ public void SetupNikonCamera(string pLens, string pCamera)
+ {
+ this.mName = pLens;
+ this.SetupCanonCamera(pCamera);
+ }
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/DefaultAdapterDemo.cs b/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/DefaultAdapterDemo.cs
new file mode 100644
index 0000000..c362691
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/DefaultAdapterDemo.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DefaultAdapter
+{
+ class DefaultAdapterDemo
+ {
+ static void Main(string[] args)
+ {
+ IDraw tDrawObj = new TextDrawer();
+ tDrawObj.DrawText("I'm the king of the world");
+
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/DrawAdapter.cs b/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/DrawAdapter.cs
new file mode 100644
index 0000000..914cf2a
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/DrawAdapter.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DefaultAdapter
+{
+ public abstract class DrawAdapter : IDraw
+ {
+ public virtual void DrawCircle(int pRadius) { }
+ public virtual void DrawLine(int pLength) { }
+ public virtual void DrawText(string pText) { }
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/IDraw.cs b/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/IDraw.cs
new file mode 100644
index 0000000..40085f1
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/IDraw.cs
@@ -0,0 +1,13 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DefaultAdapter
+{
+ public interface IDraw
+ {
+ void DrawCircle(int pRadius);
+ void DrawLine(int pLength);
+ void DrawText(string pText);
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/TextDrawer.cs b/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/TextDrawer.cs
new file mode 100644
index 0000000..702c201
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/DefaultAdapterPattern/CSharp/TextDrawer.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DefaultAdapter
+{
+ public class TextDrawer : DrawAdapter
+ {
+ public override void DrawText(string pText)
+ {
+ Console.WriteLine("Draw text:" + pText);
+ }
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/CanonLens.cs b/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/CanonLens.cs
new file mode 100644
index 0000000..165063c
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/CanonLens.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ObjectAdapter
+{
+ public class CanonLens
+ {
+ protected string mName;
+
+ public CanonLens(string pName)
+ {
+ mName = pName;
+ }
+
+ public void SetupCanonCamera(string pCamera)
+ {
+ Console.WriteLine(mName + " setup on camera : " + pCamera);
+ }
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/LensAdaptor.cs b/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/LensAdaptor.cs
new file mode 100644
index 0000000..991f4c2
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/LensAdaptor.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ObjectAdapter
+{
+ public class LensAdaptor : NikonLens
+ {
+ private CanonLens mCanonLens = null;
+
+ public LensAdaptor(string pName)
+ : base(pName)
+ {
+ mCanonLens = new CanonLens(pName);
+ }
+
+ public override void SetupNikonCamera(string pCamera)
+ {
+ mCanonLens.SetupCanonCamera(pCamera);
+ }
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/NikonLens.cs b/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/NikonLens.cs
new file mode 100644
index 0000000..b0561e5
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/NikonLens.cs
@@ -0,0 +1,18 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ObjectAdapter
+{
+ public abstract class NikonLens
+ {
+ protected string mName;
+
+ public NikonLens(string pName)
+ {
+ mName = pName;
+ }
+
+ public abstract void SetupNikonCamera(string pCamera);
+ }
+}
diff --git a/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/ObjectAdapterDemo.cs b/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/ObjectAdapterDemo.cs
new file mode 100644
index 0000000..6a80395
--- /dev/null
+++ b/StructuralDesignPattern/AdapterPattern/ObjectAdapterPattern/CSharp/ObjectAdapterDemo.cs
@@ -0,0 +1,17 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace ObjectAdapter
+{
+ class ObjectAdapterDemo
+ {
+ static void Main(string[] args)
+ {
+ NikonLens tNikonLens = new LensAdaptor("Canon EF 70-200mm F4l USM");
+ tNikonLens.SetupNikonCamera("Nikon D5300");
+
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/StructuralDesignPattern/BridgePattern/CSharp/Abstraction.cs b/StructuralDesignPattern/BridgePattern/CSharp/Abstraction.cs
new file mode 100644
index 0000000..274a7b4
--- /dev/null
+++ b/StructuralDesignPattern/BridgePattern/CSharp/Abstraction.cs
@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BridgePattern
+{
+ class Abstraction
+ {
+ protected Implementor implementor;
+
+ // Property
+ public Implementor Implementor
+ {
+ set { implementor = value; }
+ }
+
+ public virtual void Operation()
+ {
+ implementor.Operation();
+ }
+ }
+}
diff --git a/StructuralDesignPattern/BridgePattern/CSharp/BridgePatternDemo.cs b/StructuralDesignPattern/BridgePattern/CSharp/BridgePatternDemo.cs
new file mode 100644
index 0000000..424d7f0
--- /dev/null
+++ b/StructuralDesignPattern/BridgePattern/CSharp/BridgePatternDemo.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BridgePattern
+{
+ class BridgePatternDemo
+ {
+ static void Main(string[] args)
+ {
+ Abstraction ab = new RefinedAbstraction();
+
+ ab.Implementor = new ConcreteImplementorA();
+ ab.Operation();
+
+ ab.Implementor = new ConcreteImplementorB();
+ ab.Operation();
+
+ // Wait for user
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/StructuralDesignPattern/BridgePattern/CSharp/ConcreteImplementorA.cs b/StructuralDesignPattern/BridgePattern/CSharp/ConcreteImplementorA.cs
new file mode 100644
index 0000000..f30e574
--- /dev/null
+++ b/StructuralDesignPattern/BridgePattern/CSharp/ConcreteImplementorA.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BridgePattern
+{
+ class ConcreteImplementorA : Implementor
+ {
+ public override void Operation()
+ {
+ Console.WriteLine("ConcreteImplementorA Operation");
+ }
+ }
+}
diff --git a/StructuralDesignPattern/BridgePattern/CSharp/ConcreteImplementorB.cs b/StructuralDesignPattern/BridgePattern/CSharp/ConcreteImplementorB.cs
new file mode 100644
index 0000000..a94a57b
--- /dev/null
+++ b/StructuralDesignPattern/BridgePattern/CSharp/ConcreteImplementorB.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BridgePattern
+{
+ class ConcreteImplementorB : Implementor
+ {
+ public override void Operation()
+ {
+ Console.WriteLine("ConcreteImplementorB Operation");
+ }
+ }
+}
diff --git a/StructuralDesignPattern/BridgePattern/CSharp/Implementor.cs b/StructuralDesignPattern/BridgePattern/CSharp/Implementor.cs
new file mode 100644
index 0000000..c348599
--- /dev/null
+++ b/StructuralDesignPattern/BridgePattern/CSharp/Implementor.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BridgePattern
+{
+ abstract class Implementor
+ {
+ public abstract void Operation();
+ }
+}
diff --git a/StructuralDesignPattern/BridgePattern/CSharp/RefinedAbstraction.cs b/StructuralDesignPattern/BridgePattern/CSharp/RefinedAbstraction.cs
new file mode 100644
index 0000000..79e20f2
--- /dev/null
+++ b/StructuralDesignPattern/BridgePattern/CSharp/RefinedAbstraction.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace BridgePattern
+{
+ class RefinedAbstraction : Abstraction
+ {
+ public override void Operation()
+ {
+ implementor.Operation();
+ }
+ }
+}
diff --git a/AbstractFactoryPattern/Java/AbstractFactoryDemo/AbstractFactoryDemo.iml b/StructuralDesignPattern/BridgePattern/Java/BridgePatternDemo/BridgePatternDemo.iml
similarity index 100%
rename from AbstractFactoryPattern/Java/AbstractFactoryDemo/AbstractFactoryDemo.iml
rename to StructuralDesignPattern/BridgePattern/Java/BridgePatternDemo/BridgePatternDemo.iml
diff --git a/FactoryMethodPattern/Java/FactoryMethodDemo/FactoryMethodDemo.iml b/StructuralDesignPattern/CompositePattern/Java/CompositePatternDemo/CompositePatternDemo.iml
similarity index 100%
rename from FactoryMethodPattern/Java/FactoryMethodDemo/FactoryMethodDemo.iml
rename to StructuralDesignPattern/CompositePattern/Java/CompositePatternDemo/CompositePatternDemo.iml
diff --git a/StructuralDesignPattern/DecoratorPattern/CSharp/AdBannerDecorator.cs b/StructuralDesignPattern/DecoratorPattern/CSharp/AdBannerDecorator.cs
new file mode 100644
index 0000000..1cbf033
--- /dev/null
+++ b/StructuralDesignPattern/DecoratorPattern/CSharp/AdBannerDecorator.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DecoratorPattern
+{
+ public class AdBannerDecorator : BusDecorator
+ {
+ public override void Decorator(IBus Bus)
+ {
+ base.Decorator(Bus);
+ }
+
+ public override string GetDescription()
+ {
+ return mBus.GetDescription() + " with ad banner";
+ }
+ }
+}
diff --git a/StructuralDesignPattern/DecoratorPattern/CSharp/Bus307.cs b/StructuralDesignPattern/DecoratorPattern/CSharp/Bus307.cs
new file mode 100644
index 0000000..8bc4518
--- /dev/null
+++ b/StructuralDesignPattern/DecoratorPattern/CSharp/Bus307.cs
@@ -0,0 +1,14 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DecoratorPattern
+{
+ public class Bus307 : IBus
+ {
+ public string GetDescription()
+ {
+ return "This is a bus(line 307)";
+ }
+ }
+}
diff --git a/StructuralDesignPattern/DecoratorPattern/CSharp/BusDecorator.cs b/StructuralDesignPattern/DecoratorPattern/CSharp/BusDecorator.cs
new file mode 100644
index 0000000..0c3e731
--- /dev/null
+++ b/StructuralDesignPattern/DecoratorPattern/CSharp/BusDecorator.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DecoratorPattern
+{
+ public abstract class BusDecorator : IBus
+ {
+ protected IBus mBus;
+
+ public virtual void Decorator(IBus Bus)
+ {
+ this.mBus = Bus;
+ }
+
+ public virtual string GetDescription()
+ {
+ return mBus.GetDescription() + " with Decorator";
+ }
+ }
+}
diff --git a/StructuralDesignPattern/DecoratorPattern/CSharp/DecoratorPatternDemon.cs b/StructuralDesignPattern/DecoratorPattern/CSharp/DecoratorPatternDemon.cs
new file mode 100644
index 0000000..30b6a3a
--- /dev/null
+++ b/StructuralDesignPattern/DecoratorPattern/CSharp/DecoratorPatternDemon.cs
@@ -0,0 +1,19 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DecoratorPattern
+{
+ class DecoratorPatternDemon
+ {
+ static void Main(string[] args)
+ {
+ IBus tBus307 = new Bus307();
+ AdBannerDecorator tAdBannerDecorator = new AdBannerDecorator();
+ tAdBannerDecorator.Decorator(tBus307);
+ Console.WriteLine(tAdBannerDecorator.GetDescription());
+
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/StructuralDesignPattern/DecoratorPattern/CSharp/IBus.cs b/StructuralDesignPattern/DecoratorPattern/CSharp/IBus.cs
new file mode 100644
index 0000000..7a4c36e
--- /dev/null
+++ b/StructuralDesignPattern/DecoratorPattern/CSharp/IBus.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace DecoratorPattern
+{
+ public interface IBus
+ {
+ string GetDescription();
+ }
+}
diff --git a/StructuralDesignPattern/FlyweightPattern/CSharp/ConcreteStone.cs b/StructuralDesignPattern/FlyweightPattern/CSharp/ConcreteStone.cs
new file mode 100644
index 0000000..09a085b
--- /dev/null
+++ b/StructuralDesignPattern/FlyweightPattern/CSharp/ConcreteStone.cs
@@ -0,0 +1,20 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FlyweightPattern
+{
+ public class ConcreteStone : Stone
+ {
+ private string Name = "";
+ public ConcreteStone(string name)
+ {
+ this.Name = name;
+ }
+
+ public override void Place(Point point)
+ {
+ Console.WriteLine(Name + " stone place on " + point.Placed());
+ }
+ }
+}
diff --git a/StructuralDesignPattern/FlyweightPattern/CSharp/FlyweightPatternDemo.cs b/StructuralDesignPattern/FlyweightPattern/CSharp/FlyweightPatternDemo.cs
new file mode 100644
index 0000000..4a47605
--- /dev/null
+++ b/StructuralDesignPattern/FlyweightPattern/CSharp/FlyweightPatternDemo.cs
@@ -0,0 +1,28 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FlyweightPattern
+{
+ public class FlyweightPatternDemo
+ {
+ static void Main(string[] args)
+ {
+ StoneFactory tSF = new StoneFactory();
+
+ Stone tS01 = tSF.GetStone("Black");
+ tS01.Place(new Point(15, 15));
+
+ Stone tS02 = tSF.GetStone("White");
+ tS02.Place(new Point(14, 13));
+
+ Stone tS03 = tSF.GetStone("Black");
+ tS03.Place(new Point(15, 16));
+
+ Stone tS04 = tSF.GetStone("White");
+ tS04.Place(new Point(15, 13));
+
+ Console.ReadKey();
+ }
+ }
+}
diff --git a/StructuralDesignPattern/FlyweightPattern/CSharp/Point.cs b/StructuralDesignPattern/FlyweightPattern/CSharp/Point.cs
new file mode 100644
index 0000000..474c431
--- /dev/null
+++ b/StructuralDesignPattern/FlyweightPattern/CSharp/Point.cs
@@ -0,0 +1,23 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FlyweightPattern
+{
+ public class Point
+ {
+ private int X;
+ private int Y;
+
+ public Point(int x, int y)
+ {
+ X = x;
+ Y = y;
+ }
+
+ public string Placed()
+ {
+ return "(" + X + "," + Y + ")";
+ }
+ }
+}
diff --git a/StructuralDesignPattern/FlyweightPattern/CSharp/Stone.cs b/StructuralDesignPattern/FlyweightPattern/CSharp/Stone.cs
new file mode 100644
index 0000000..bb2182d
--- /dev/null
+++ b/StructuralDesignPattern/FlyweightPattern/CSharp/Stone.cs
@@ -0,0 +1,11 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace FlyweightPattern
+{
+ public abstract class Stone
+ {
+ public abstract void Place(Point point);
+ }
+}
diff --git a/StructuralDesignPattern/FlyweightPattern/CSharp/StoneFactory.cs b/StructuralDesignPattern/FlyweightPattern/CSharp/StoneFactory.cs
new file mode 100644
index 0000000..6930a74
--- /dev/null
+++ b/StructuralDesignPattern/FlyweightPattern/CSharp/StoneFactory.cs
@@ -0,0 +1,21 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Collections;
+
+namespace FlyweightPattern
+{
+ public class StoneFactory
+ {
+ private Hashtable flyweights = new Hashtable();
+
+ public Stone GetStone(string key)
+ {
+ if (!flyweights.ContainsKey(key))
+ {
+ flyweights.Add(key, new ConcreteStone(key));
+ }
+ return (Stone)flyweights[key];
+ }
+ }
+}