diff --git a/.classpath b/.classpath
deleted file mode 100644
index 63b7e89..0000000
--- a/.classpath
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
diff --git a/.project b/.project
deleted file mode 100644
index 1ea1adf..0000000
--- a/.project
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
- JavaDesignPattern
-
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
-
- org.eclipse.jdt.core.javanature
-
-
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index bb35fa0..0000000
--- a/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,11 +0,0 @@
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
diff --git a/src/com/anxpp/designpattern/Composite/Component.java b/src/com/anxpp/designpattern/Composite/Component.java
index 1bfbad7..211d730 100644
--- a/src/com/anxpp/designpattern/Composite/Component.java
+++ b/src/com/anxpp/designpattern/Composite/Component.java
@@ -1,15 +1,25 @@
-package com.anxpp.designpattern.Composite;
-import java.util.Iterator;
-import java.util.List;
-//抽象组件
-public interface Component {
- void addFile(Component file);
- Component addFolder(Component folder);
- void removeFile(Component file);
- void removeFolder(Component folder);
- List getFiles();
- List getFolders();
- List getAll();
- Iterator iterator();
- void display();
+package com.anxpp.designpattern.Composite;
+
+import java.util.Iterator;
+import java.util.List;
+
+//抽象组件
+public interface Component {
+ void addFile(Component file);
+
+ Component addFolder(Component folder);
+
+ void removeFile(Component file);
+
+ void removeFolder(Component folder);
+
+ List getFiles();
+
+ List getFolders();
+
+ List getAll();
+
+ Iterator iterator();
+
+ void display();
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/Composite/File.java b/src/com/anxpp/designpattern/Composite/File.java
index 306c513..502a4ac 100644
--- a/src/com/anxpp/designpattern/Composite/File.java
+++ b/src/com/anxpp/designpattern/Composite/File.java
@@ -1,31 +1,55 @@
-package com.anxpp.designpattern.Composite;
-
-import java.util.Iterator;
-import java.util.List;
-//Leaf节点
-public class File implements Component{
- private String name;
- public File(String name){
- this.name = name;
- }
- @Override
- public void addFile(Component file) {}
- @Override
- public Component addFolder(Component folder) { return null; }
- @Override
- public void removeFile(Component file) {}
- @Override
- public void removeFolder(Component folder) {}
- @Override
- public List getFiles() { return null; }
- @Override
- public List getFolders() { return null; }
- @Override
- public List getAll() { return null; }
- @Override
- public Iterator iterator() { return null; }
- @Override
- public void display() {
- System.out.println(name);
- }
-}
+package com.anxpp.designpattern.Composite;
+
+import java.util.Iterator;
+import java.util.List;
+
+//Leaf节点
+public class File implements Component {
+ private String name;
+
+ public File(String name) {
+ this.name = name;
+ }
+
+ @Override
+ public void addFile(Component file) {
+ }
+
+ @Override
+ public Component addFolder(Component folder) {
+ return null;
+ }
+
+ @Override
+ public void removeFile(Component file) {
+ }
+
+ @Override
+ public void removeFolder(Component folder) {
+ }
+
+ @Override
+ public List getFiles() {
+ return null;
+ }
+
+ @Override
+ public List getFolders() {
+ return null;
+ }
+
+ @Override
+ public List getAll() {
+ return null;
+ }
+
+ @Override
+ public Iterator iterator() {
+ return null;
+ }
+
+ @Override
+ public void display() {
+ System.out.println(name);
+ }
+}
diff --git a/src/com/anxpp/designpattern/Composite/Folder.java b/src/com/anxpp/designpattern/Composite/Folder.java
index 739e7c6..2513e18 100644
--- a/src/com/anxpp/designpattern/Composite/Folder.java
+++ b/src/com/anxpp/designpattern/Composite/Folder.java
@@ -1,64 +1,77 @@
-package com.anxpp.designpattern.Composite;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-public class Folder implements Component {
- private String name;
- private List files;
- private List folders;
- public Folder(String name){
- this.name = name;
- files = new ArrayList();
- folders = new ArrayList();
- }
- @Override
- public void addFile(Component file) {
- files.add(file);
- }
- @Override
- public Component addFolder(Component folder) {
- folders.add(folder);
- return this;
- }
- @Override
- public void removeFile(Component file) {
- files.remove(file);
- }
- @Override
- public void removeFolder(Component folder) {
- folders.remove(folder);
- }
- @Override
- public List getFiles() {
- return files;
- }
- @Override
- public List getFolders() {
- return folders;
- }
- @Override
- public List getAll() {
- List all = new ArrayList(folders);
- all.addAll(files);
- return all;
- }
- @Override
- public Iterator iterator() {
- List all = new ArrayList();
- add(all,this);
- return all.iterator();
- }
- private void add(List all,Component component){
- if(component==null) return;
- all.add(component);
- Iterator iterator = component.getFolders().iterator();
- while(iterator.hasNext()){
- add(all,iterator.next());
- }
- all.addAll(component.getFiles());
- }
- @Override
- public void display() {
- System.out.println(name);
- }
-}
+package com.anxpp.designpattern.Composite;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
+
+public class Folder implements Component {
+ private String name;
+ private List files;
+ private List folders;
+
+ public Folder(String name) {
+ this.name = name;
+ files = new ArrayList();
+ folders = new ArrayList();
+ }
+
+ @Override
+ public void addFile(Component file) {
+ files.add(file);
+ }
+
+ @Override
+ public Component addFolder(Component folder) {
+ folders.add(folder);
+ return this;
+ }
+
+ @Override
+ public void removeFile(Component file) {
+ files.remove(file);
+ }
+
+ @Override
+ public void removeFolder(Component folder) {
+ folders.remove(folder);
+ }
+
+ @Override
+ public List getFiles() {
+ return files;
+ }
+
+ @Override
+ public List getFolders() {
+ return folders;
+ }
+
+ @Override
+ public List getAll() {
+ List all = new ArrayList(folders);
+ all.addAll(files);
+ return all;
+ }
+
+ @Override
+ public Iterator iterator() {
+ List all = new ArrayList();
+ add(all, this);
+ return all.iterator();
+ }
+
+ private void add(List all, Component component) {
+ if (component == null) return;
+ all.add(component);
+ Iterator iterator = component.getFolders().iterator();
+ while (iterator.hasNext()) {
+ add(all, iterator.next());
+ }
+ all.addAll(component.getFiles());
+ }
+
+ @Override
+ public void display() {
+ System.out.println(name);
+ }
+}
diff --git a/src/com/anxpp/designpattern/Composite/TestUse.java b/src/com/anxpp/designpattern/Composite/TestUse.java
index 9d6e0ac..1f97f1c 100644
--- a/src/com/anxpp/designpattern/Composite/TestUse.java
+++ b/src/com/anxpp/designpattern/Composite/TestUse.java
@@ -1,22 +1,24 @@
-package com.anxpp.designpattern.Composite;
-import java.util.Iterator;
-public class TestUse {
- public static void main(String args[]){
- Component root = new Folder("root");//根目录
- Component folder1 = new Folder("java");
- Component folder2 = new Folder("c++");
- Component folder3 = new Folder("c#");
- Component file1 = new File("info.txt");
- root.addFolder(folder1).addFolder(folder2).addFolder(folder3).addFile(file1);//添加一级目录
- folder1.addFile(new File("info.java"));
- Iterator iterator = root.iterator();
- while(iterator.hasNext()){
- Component component = iterator.next();
- if(component instanceof Folder)
- System.out.print("folder:");
- else
- System.out.print("file:");
- component.display();
- }
- }
+package com.anxpp.designpattern.Composite;
+
+import java.util.Iterator;
+
+public class TestUse {
+ public static void main(String[] args) {
+ Component root = new Folder("root");//根目录
+ Component folder1 = new Folder("java");
+ Component folder2 = new Folder("c++");
+ Component folder3 = new Folder("c#");
+ Component file1 = new File("info.txt");
+ root.addFolder(folder1).addFolder(folder2).addFolder(folder3).addFile(file1);//添加一级目录
+ folder1.addFile(new File("info.java"));
+ Iterator iterator = root.iterator();
+ while (iterator.hasNext()) {
+ Component component = iterator.next();
+ if (component instanceof Folder)
+ System.out.print("folder:");
+ else
+ System.out.print("file:");
+ component.display();
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/Observer/Client.java b/src/com/anxpp/designpattern/Observer/Client.java
index 7e91f3a..3ee7d08 100644
--- a/src/com/anxpp/designpattern/Observer/Client.java
+++ b/src/com/anxpp/designpattern/Observer/Client.java
@@ -1,5 +1,6 @@
-package com.anxpp.designpattern.Observer;
-//观察者
-public interface Client {
- void getWeather(WeatherInfo info);
-}
+package com.anxpp.designpattern.Observer;
+
+//观察者
+public interface Client {
+ void getWeather(WeatherInfo info);
+}
diff --git a/src/com/anxpp/designpattern/Observer/ClientAndroidServer.java b/src/com/anxpp/designpattern/Observer/ClientAndroidServer.java
index acd07e7..8a8aa32 100644
--- a/src/com/anxpp/designpattern/Observer/ClientAndroidServer.java
+++ b/src/com/anxpp/designpattern/Observer/ClientAndroidServer.java
@@ -1,14 +1,16 @@
-package com.anxpp.designpattern.Observer;
-
-public class ClientAndroidServer implements Client {
- private static String name = "安卓服务";
- private WeatherInfo info;
- @Override
- public void getWeather(WeatherInfo info) {
- this.info = info;
- dealMsg();
- }
- private void dealMsg(){
- System.out.println(name + "收到最新天气:time="+info.getTime()+"msg="+info.getWeather()+"。马上开始推送消息...");
- }
-}
+package com.anxpp.designpattern.Observer;
+
+public class ClientAndroidServer implements Client {
+ private static String name = "安卓服务";
+ private WeatherInfo info;
+
+ @Override
+ public void getWeather(WeatherInfo info) {
+ this.info = info;
+ dealMsg();
+ }
+
+ private void dealMsg() {
+ System.out.println(name + "收到最新天气:time=" + info.getTime() + "msg=" + info.getWeather() + "。马上开始推送消息...");
+ }
+}
diff --git a/src/com/anxpp/designpattern/Observer/ClientIphoneServer.java b/src/com/anxpp/designpattern/Observer/ClientIphoneServer.java
index e32bc90..7912705 100644
--- a/src/com/anxpp/designpattern/Observer/ClientIphoneServer.java
+++ b/src/com/anxpp/designpattern/Observer/ClientIphoneServer.java
@@ -1,14 +1,16 @@
-package com.anxpp.designpattern.Observer;
-
-public class ClientIphoneServer implements Client {
- private static String name = "苹果服务";
- private WeatherInfo info;
- @Override
- public void getWeather(WeatherInfo info) {
- this.info = info;
- dealMsg();
- }
- private void dealMsg(){
- System.out.println(name + "收到最新天气:time="+info.getTime()+"msg="+info.getWeather()+"。马上开始推送消息...");
- }
-}
+package com.anxpp.designpattern.Observer;
+
+public class ClientIphoneServer implements Client {
+ private static String name = "苹果服务";
+ private WeatherInfo info;
+
+ @Override
+ public void getWeather(WeatherInfo info) {
+ this.info = info;
+ dealMsg();
+ }
+
+ private void dealMsg() {
+ System.out.println(name + "收到最新天气:time=" + info.getTime() + "msg=" + info.getWeather() + "。马上开始推送消息...");
+ }
+}
diff --git a/src/com/anxpp/designpattern/Observer/IWeatherService.java b/src/com/anxpp/designpattern/Observer/IWeatherService.java
index 70d0575..840accd 100644
--- a/src/com/anxpp/designpattern/Observer/IWeatherService.java
+++ b/src/com/anxpp/designpattern/Observer/IWeatherService.java
@@ -1,8 +1,12 @@
-package com.anxpp.designpattern.Observer;
-//主题
-public interface IWeatherService {
- void addClient(Client client); //添加观察者
- boolean deleteClient(Client client);//删除观察者
- void notifyClients(); //通知
- void updateWeather(WeatherInfo info);//主题内容更新
-}
+package com.anxpp.designpattern.Observer;
+
+//主题
+public interface IWeatherService {
+ void addClient(Client client); //添加观察者
+
+ boolean deleteClient(Client client);//删除观察者
+
+ void notifyClients(); //通知
+
+ void updateWeather(WeatherInfo info);//主题内容更新
+}
diff --git a/src/com/anxpp/designpattern/Observer/TestUse.java b/src/com/anxpp/designpattern/Observer/TestUse.java
index 5fa40d7..69d8467 100644
--- a/src/com/anxpp/designpattern/Observer/TestUse.java
+++ b/src/com/anxpp/designpattern/Observer/TestUse.java
@@ -1,16 +1,16 @@
-package com.anxpp.designpattern.Observer;
-
-
-public class TestUse {
- public static void main(String args[]){
- //创建主题
- WeatherService service = WeatherService.instance;
- //添加观察者
- service.addClient(new ClientAndroidServer());
- service.addClient(new ClientIphoneServer());
- //更新主题
- service.updateWeather(new WeatherInfo(System.currentTimeMillis(), "多云"));
- service.updateWeather(new WeatherInfo(System.currentTimeMillis()+1000*60*60*24, "多云转晴"));
- service.updateWeather(new WeatherInfo(System.currentTimeMillis()+1000*60*60*24*2, "晴"));
- }
+package com.anxpp.designpattern.Observer;
+
+
+public class TestUse {
+ public static void main(String[] args) {
+ //创建主题
+ WeatherService service = WeatherService.instance;
+ //添加观察者
+ service.addClient(new ClientAndroidServer());
+ service.addClient(new ClientIphoneServer());
+ //更新主题
+ service.updateWeather(new WeatherInfo(System.currentTimeMillis(), "多云"));
+ service.updateWeather(new WeatherInfo(System.currentTimeMillis() + 1000 * 60 * 60 * 24, "多云转晴"));
+ service.updateWeather(new WeatherInfo(System.currentTimeMillis() + 1000 * 60 * 60 * 24 * 2, "晴"));
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/Observer/WeatherInfo.java b/src/com/anxpp/designpattern/Observer/WeatherInfo.java
index 6a551e2..534bad8 100644
--- a/src/com/anxpp/designpattern/Observer/WeatherInfo.java
+++ b/src/com/anxpp/designpattern/Observer/WeatherInfo.java
@@ -1,27 +1,34 @@
-package com.anxpp.designpattern.Observer;
-//天气的消息实体
-public class WeatherInfo {
- private long time;
- private String weather;
- public WeatherInfo(long time,String weather){
- this.time = time;
- this.weather = weather;
- }
- public long getTime() {
- return time;
- }
- public void setTime(long time) {
- this.time = time;
- }
- public String getWeather() {
- return weather;
- }
- public void setWeather(String weather) {
- this.weather = weather;
- }
- @Override
- public boolean equals(Object obj) {
- WeatherInfo info = (WeatherInfo) obj;
- return info.time==this.time&&info.weather.equals(this.weather);
- }
-}
+package com.anxpp.designpattern.Observer;
+
+//天气的消息实体
+public class WeatherInfo {
+ private long time;
+ private String weather;
+
+ public WeatherInfo(long time, String weather) {
+ this.time = time;
+ this.weather = weather;
+ }
+
+ public long getTime() {
+ return time;
+ }
+
+ public void setTime(long time) {
+ this.time = time;
+ }
+
+ public String getWeather() {
+ return weather;
+ }
+
+ public void setWeather(String weather) {
+ this.weather = weather;
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ WeatherInfo info = (WeatherInfo) obj;
+ return info.time == this.time && info.weather.equals(this.weather);
+ }
+}
diff --git a/src/com/anxpp/designpattern/Observer/WeatherService.java b/src/com/anxpp/designpattern/Observer/WeatherService.java
index 82927e5..b85008c 100644
--- a/src/com/anxpp/designpattern/Observer/WeatherService.java
+++ b/src/com/anxpp/designpattern/Observer/WeatherService.java
@@ -1,38 +1,43 @@
-package com.anxpp.designpattern.Observer;
-
-import java.util.Iterator;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-//主题,同时使用了枚举实现单例
-public enum WeatherService implements IWeatherService{
- instance;
- private LinkedList weatherInfos = new LinkedList();
- private LinkedHashSet clients = new LinkedHashSet(); //存放观察者
- //添加观察者
- @Override
- public void addClient(Client client) {
- clients.add(client);
- }
- //删除观察者
- @Override
- public boolean deleteClient(Client client) {
- return clients.remove(client);
- }
- //通知观察者
- @Override
- public void notifyClients() {
- Iterator iterator = clients.iterator();
- while(iterator.hasNext()){
- iterator.next().getWeather(weatherInfos.peekFirst());
- }
- }
- //更新天气
- @Override
- public void updateWeather(WeatherInfo info) {
- if(weatherInfos.size()>0)
- if(weatherInfos.peekFirst().equals(info)) return;
- weatherInfos.push(info);
- if(clients.size()==0) return;
- notifyClients();
- }
-}
+package com.anxpp.designpattern.Observer;
+
+import java.util.Iterator;
+import java.util.LinkedHashSet;
+import java.util.LinkedList;
+
+//主题,同时使用了枚举实现单例
+public enum WeatherService implements IWeatherService {
+ instance;
+ private LinkedList weatherInfos = new LinkedList();
+ private LinkedHashSet clients = new LinkedHashSet(); //存放观察者
+
+ //添加观察者
+ @Override
+ public void addClient(Client client) {
+ clients.add(client);
+ }
+
+ //删除观察者
+ @Override
+ public boolean deleteClient(Client client) {
+ return clients.remove(client);
+ }
+
+ //通知观察者
+ @Override
+ public void notifyClients() {
+ Iterator iterator = clients.iterator();
+ while (iterator.hasNext()) {
+ iterator.next().getWeather(weatherInfos.peekFirst());
+ }
+ }
+
+ //更新天气
+ @Override
+ public void updateWeather(WeatherInfo info) {
+ if (weatherInfos.size()> 0)
+ if (weatherInfos.peekFirst().equals(info)) return;
+ weatherInfos.push(info);
+ if (clients.size() == 0) return;
+ notifyClients();
+ }
+}
diff --git a/src/com/anxpp/designpattern/abstractfactory/AbstractFactory.java b/src/com/anxpp/designpattern/abstractfactory/AbstractFactory.java
index 75dc28c..6c8379b 100644
--- a/src/com/anxpp/designpattern/abstractfactory/AbstractFactory.java
+++ b/src/com/anxpp/designpattern/abstractfactory/AbstractFactory.java
@@ -1,72 +1,85 @@
-package com.anxpp.designpattern.abstractfactory;
-//抽象工厂模式
-public class AbstractFactory {
- public static void main(String args[]){
- IFactory bigfactory = new BigFactory();
- IFactory smallfactory = new BigFactory();
- bigfactory.producePhone().run();
- bigfactory.produceHeadset().play();
- smallfactory.producePhone().run();
- smallfactory.produceHeadset().play();
- }
-}
-//抽象产品*2
-interface Headset{
- void play();
-}
-//抽象产品
-interface MeizuPhone{
- void run();
-}
-//具体产品*2*2
-class PRO5 implements MeizuPhone{
- @Override
- public void run() {
- System.out.println("我是一台PRO5");
- }
-}
-class MX5 implements MeizuPhone{
- @Override
- public void run() {
- System.out.println("我是一台MX5");
- }
-}
-class EP21 implements Headset{
- @Override
- public void play() {
- System.out.println("我是一副EP21");
- }
-}
-class EP30 implements Headset{
- @Override
- public void play() {
- System.out.println("我是一台EP30");
- }
-}
-//抽象工厂
-interface IFactory{
- MeizuPhone producePhone();
- Headset produceHeadset();
-}
-//具体工厂*2
-class BigFactory implements IFactory{
- @Override
- public MeizuPhone producePhone() {
- return new PRO5();
- }
- @Override
- public Headset produceHeadset() {
- return new EP30();
- }
-}
-//具体工厂*2
-class SmallFactory implements IFactory{
- @Override
- public MeizuPhone producePhone() {
- return new MX5();
- }
- @Override
- public Headset produceHeadset() {
- return new EP21();
- }
+package com.anxpp.designpattern.abstractfactory;
+
+//抽象产品*2
+interface Headset {
+ void play();
+}
+
+//抽象产品
+interface MeizuPhone {
+ void run();
+}
+
+//抽象工厂
+interface IFactory {
+ MeizuPhone producePhone();
+
+ Headset produceHeadset();
+}
+
+//抽象工厂模式
+public class AbstractFactory {
+ public static void main(String[] args) {
+ IFactory bigfactory = new BigFactory();
+ IFactory smallfactory = new BigFactory();
+ bigfactory.producePhone().run();
+ bigfactory.produceHeadset().play();
+ smallfactory.producePhone().run();
+ smallfactory.produceHeadset().play();
+ }
+}
+
+//具体产品*2*2
+class PRO5 implements MeizuPhone {
+ @Override
+ public void run() {
+ System.out.println("我是一台PRO5");
+ }
+}
+
+class MX5 implements MeizuPhone {
+ @Override
+ public void run() {
+ System.out.println("我是一台MX5");
+ }
+}
+
+class EP21 implements Headset {
+ @Override
+ public void play() {
+ System.out.println("我是一副EP21");
+ }
+}
+
+class EP30 implements Headset {
+ @Override
+ public void play() {
+ System.out.println("我是一台EP30");
+ }
+}
+
+//具体工厂*2
+class BigFactory implements IFactory {
+ @Override
+ public MeizuPhone producePhone() {
+ return new PRO5();
+ }
+
+ @Override
+ public Headset produceHeadset() {
+ return new EP30();
+ }
+}
+
+//具体工厂*2
+class SmallFactory implements IFactory {
+ @Override
+ public MeizuPhone producePhone() {
+ return new MX5();
+ }
+
+ @Override
+ public Headset produceHeadset() {
+ return new EP21();
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/abstractfactory/iterator/IIterator.java b/src/com/anxpp/designpattern/abstractfactory/iterator/IIterator.java
index 0daf2bd..07a2a6b 100644
--- a/src/com/anxpp/designpattern/abstractfactory/iterator/IIterator.java
+++ b/src/com/anxpp/designpattern/abstractfactory/iterator/IIterator.java
@@ -1,6 +1,8 @@
-package com.anxpp.designpattern.abstractfactory.iterator;
-//抽象产品
-public interface IIterator {
- boolean hasNext();
- Object next();
+package com.anxpp.designpattern.abstractfactory.iterator;
+
+//抽象产品
+public interface IIterator {
+ boolean hasNext();
+
+ Object next();
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/abstractfactory/iterator/IIteratorFactory.java b/src/com/anxpp/designpattern/abstractfactory/iterator/IIteratorFactory.java
index fbc4ce7..18956b5 100644
--- a/src/com/anxpp/designpattern/abstractfactory/iterator/IIteratorFactory.java
+++ b/src/com/anxpp/designpattern/abstractfactory/iterator/IIteratorFactory.java
@@ -1,8 +1,11 @@
-package com.anxpp.designpattern.abstractfactory.iterator;
-import java.util.Collection;
-import java.util.Map;
-//抽象工厂
-public interface IIteratorFactory {
- IIterator iteratorMap(Map m);
- IIterator iteratorCollection(Collection c);
+package com.anxpp.designpattern.abstractfactory.iterator;
+
+import java.util.Collection;
+import java.util.Map;
+
+//抽象工厂
+public interface IIteratorFactory {
+ IIterator iteratorMap(Map m);
+
+ IIterator iteratorCollection(Collection c);
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorCollection.java b/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorCollection.java
index 6634006..5f075a7 100644
--- a/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorCollection.java
+++ b/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorCollection.java
@@ -1,18 +1,23 @@
-package com.anxpp.designpattern.abstractfactory.iterator;
-import java.util.Collection;
-import java.util.Iterator;
-//具体产品,Collection迭代器(用到了代理模式)
-public class IteratorCollection implements IIterator{
- Iterator iterator;
- public IteratorCollection(Collection c){
- iterator = c.iterator();
- }
- @Override
- public boolean hasNext() {
- return iterator.hasNext();
- }
- @Override
- public T next() {
- return iterator.next();
- }
-}
+package com.anxpp.designpattern.abstractfactory.iterator;
+
+import java.util.Collection;
+import java.util.Iterator;
+
+//具体产品,Collection迭代器(用到了代理模式)
+public class IteratorCollection implements IIterator {
+ Iterator iterator;
+
+ public IteratorCollection(Collection c) {
+ iterator = c.iterator();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @Override
+ public T next() {
+ return iterator.next();
+ }
+}
diff --git a/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorFactory.java b/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorFactory.java
index 67ce67d..f73ce43 100644
--- a/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorFactory.java
+++ b/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorFactory.java
@@ -1,14 +1,17 @@
-package com.anxpp.designpattern.abstractfactory.iterator;
-import java.util.Collection;
-import java.util.Map;
-//具体工厂
-public class IteratorFactory implements IIteratorFactory{
- @Override
- public IteratorMap iteratorMap(Map m) {
- return new IteratorMap(m);
- }
- @Override
- public IteratorCollection iteratorCollection(Collection c) {
- return new IteratorCollection(c);
- }
+package com.anxpp.designpattern.abstractfactory.iterator;
+
+import java.util.Collection;
+import java.util.Map;
+
+//具体工厂
+public class IteratorFactory implements IIteratorFactory {
+ @Override
+ public IteratorMap iteratorMap(Map m) {
+ return new IteratorMap(m);
+ }
+
+ @Override
+ public IteratorCollection iteratorCollection(Collection c) {
+ return new IteratorCollection(c);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorMap.java b/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorMap.java
index 21a9a42..425488b 100644
--- a/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorMap.java
+++ b/src/com/anxpp/designpattern/abstractfactory/iterator/IteratorMap.java
@@ -1,18 +1,23 @@
-package com.anxpp.designpattern.abstractfactory.iterator;
-import java.util.Iterator;
-import java.util.Map;
-//具体产品,Map迭代器(用到了代理模式)
-public class IteratorMap implements IIterator{
- Iterator> iterator;
- public IteratorMap(Map m){
- iterator = m.entrySet().iterator();
- }
- @Override
- public boolean hasNext() {
- return iterator.hasNext();
- }
- @Override
- public Object next() {
- return iterator.next().getValue();
- }
+package com.anxpp.designpattern.abstractfactory.iterator;
+
+import java.util.Iterator;
+import java.util.Map;
+
+//具体产品,Map迭代器(用到了代理模式)
+public class IteratorMap implements IIterator {
+ Iterator> iterator;
+
+ public IteratorMap(Map m) {
+ iterator = m.entrySet().iterator();
+ }
+
+ @Override
+ public boolean hasNext() {
+ return iterator.hasNext();
+ }
+
+ @Override
+ public Object next() {
+ return iterator.next().getValue();
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/abstractfactory/iterator/TestUse.java b/src/com/anxpp/designpattern/abstractfactory/iterator/TestUse.java
index 2198fe7..5f3eb1c 100644
--- a/src/com/anxpp/designpattern/abstractfactory/iterator/TestUse.java
+++ b/src/com/anxpp/designpattern/abstractfactory/iterator/TestUse.java
@@ -1,25 +1,26 @@
-package com.anxpp.designpattern.abstractfactory.iterator;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.LinkedHashMap;
-import java.util.Map;
-//测试使用
-public class TestUse {
- public static void main(String args[]){
- IIteratorFactory factory = new IteratorFactory();
- Collection collection = new ArrayList();
- Map map = new LinkedHashMap();
- for(int i=0;i<10;i++){ - collection.add(i); - map.put(i, i); - } - IIterator iteratorCollection = factory.iteratorCollection(collection);
- IIterator iteratorMap = factory.iteratorMap(map);
- while(iteratorCollection.hasNext())
- System.out.print(iteratorCollection.next());
- System.out.println();
- while(iteratorMap.hasNext())
- System.out.print(iteratorMap.next());
- }
+package com.anxpp.designpattern.abstractfactory.iterator;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+//测试使用
+public class TestUse {
+ public static void main(String[] args) {
+ IIteratorFactory factory = new IteratorFactory();
+ Collection collection = new ArrayList();
+ Map map = new LinkedHashMap();
+ for (int i = 0; i < 10; i++) { + collection.add(i); + map.put(i, i); + } + IIterator iteratorCollection = factory.iteratorCollection(collection);
+ IIterator iteratorMap = factory.iteratorMap(map);
+ while (iteratorCollection.hasNext())
+ System.out.print(iteratorCollection.next());
+ System.out.println();
+ while (iteratorMap.hasNext())
+ System.out.print(iteratorMap.next());
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/adapter/Adaptee.java b/src/com/anxpp/designpattern/adapter/Adaptee.java
index 2560dda..d6f7131 100644
--- a/src/com/anxpp/designpattern/adapter/Adaptee.java
+++ b/src/com/anxpp/designpattern/adapter/Adaptee.java
@@ -1,7 +1,8 @@
-package com.anxpp.designpattern.adapter;
-//被适配者
-class Adaptee{
- void playMp3(Object src){
- System.out.println("播放MP3:" + src);
- }
+package com.anxpp.designpattern.adapter;
+
+//被适配者
+class Adaptee {
+ void playMp3(Object src) {
+ System.out.println("播放MP3:" + src);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/adapter/ClassAdapter.java b/src/com/anxpp/designpattern/adapter/ClassAdapter.java
index 825aff9..330a8aa 100644
--- a/src/com/anxpp/designpattern/adapter/ClassAdapter.java
+++ b/src/com/anxpp/designpattern/adapter/ClassAdapter.java
@@ -1,9 +1,10 @@
-package com.anxpp.designpattern.adapter;
-//类适配器
-public class ClassAdapter extends Adaptee implements Target {
- @Override
- public void playFlac(Object src) {
- //可能需要对src作处理
- playMp3(src);
- }
+package com.anxpp.designpattern.adapter;
+
+//类适配器
+public class ClassAdapter extends Adaptee implements Target {
+ @Override
+ public void playFlac(Object src) {
+ //可能需要对src作处理
+ playMp3(src);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/adapter/List/Book.java b/src/com/anxpp/designpattern/adapter/List/Book.java
index 2f60d8d..df637e0 100644
--- a/src/com/anxpp/designpattern/adapter/List/Book.java
+++ b/src/com/anxpp/designpattern/adapter/List/Book.java
@@ -1,17 +1,21 @@
-package com.anxpp.designpattern.adapter.List;
-
-import java.util.Enumeration;
-import java.util.Vector;
-//被适配者
-public class Book{
- private Vector books;
- public Book(){
- books = new Vector();
- }
- public void add(String book){
- books.add(book);
- }
- public Enumeration getEnum(){
- return books.elements();
- }
+package com.anxpp.designpattern.adapter.List;
+
+import java.util.Enumeration;
+import java.util.Vector;
+
+//被适配者
+public class Book {
+ private Vector books;
+
+ public Book() {
+ books = new Vector();
+ }
+
+ public void add(String book) {
+ books.add(book);
+ }
+
+ public Enumeration getEnum() {
+ return books.elements();
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/adapter/List/BookAdapter.java b/src/com/anxpp/designpattern/adapter/List/BookAdapter.java
index 1451db3..257fe80 100644
--- a/src/com/anxpp/designpattern/adapter/List/BookAdapter.java
+++ b/src/com/anxpp/designpattern/adapter/List/BookAdapter.java
@@ -1,10 +1,11 @@
-package com.anxpp.designpattern.adapter.List;
-
-import java.util.Iterator;
-//适配器
-public class BookAdapter extends Book implements Iterable{
- @Override
- public Iterator iterator() {
- return new IteratorAdapter(getEnum());
- }
-}
+package com.anxpp.designpattern.adapter.List;
+
+import java.util.Iterator;
+
+//适配器
+public class BookAdapter extends Book implements Iterable {
+ @Override
+ public Iterator iterator() {
+ return new IteratorAdapter(getEnum());
+ }
+}
diff --git a/src/com/anxpp/designpattern/adapter/List/IteratorAdapter.java b/src/com/anxpp/designpattern/adapter/List/IteratorAdapter.java
index 0bdefc9..b52fedc 100644
--- a/src/com/anxpp/designpattern/adapter/List/IteratorAdapter.java
+++ b/src/com/anxpp/designpattern/adapter/List/IteratorAdapter.java
@@ -1,18 +1,23 @@
-package com.anxpp.designpattern.adapter.List;
-import java.util.Enumeration;
-import java.util.Iterator;
-//适配器,目标就是Iterator,被适配者是Enumeration
-public class IteratorAdapter implements Iterator {
- Enumeration myEnum;
- public IteratorAdapter(Enumeration myEnum){
- this.myEnum = myEnum;
- }
- @Override
- public boolean hasNext() {
- return myEnum.hasMoreElements();
- }
- @Override
- public String next() {
- return myEnum.nextElement();
- }
+package com.anxpp.designpattern.adapter.List;
+
+import java.util.Enumeration;
+import java.util.Iterator;
+
+//适配器,目标就是Iterator,被适配者是Enumeration
+public class IteratorAdapter implements Iterator {
+ Enumeration myEnum;
+
+ public IteratorAdapter(Enumeration myEnum) {
+ this.myEnum = myEnum;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return myEnum.hasMoreElements();
+ }
+
+ @Override
+ public String next() {
+ return myEnum.nextElement();
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/adapter/List/TestUse.java b/src/com/anxpp/designpattern/adapter/List/TestUse.java
index c02bd28..00a072e 100644
--- a/src/com/anxpp/designpattern/adapter/List/TestUse.java
+++ b/src/com/anxpp/designpattern/adapter/List/TestUse.java
@@ -1,15 +1,16 @@
-package com.anxpp.designpattern.adapter.List;
-
-import java.util.Iterator;
-public class TestUse {
- public static void main(String args[]){
- BookAdapter books = new BookAdapter();
- books.add("think in java");
- books.add("c++ primer");
- books.add("伊索寓言");
- Iterator iterator = books.iterator();
- while(iterator.hasNext()){
- System.out.println(iterator.next());
- }
- }
+package com.anxpp.designpattern.adapter.List;
+
+import java.util.Iterator;
+
+public class TestUse {
+ public static void main(String[] args) {
+ BookAdapter books = new BookAdapter();
+ books.add("think in java");
+ books.add("c++ primer");
+ books.add("伊索寓言");
+ Iterator iterator = books.iterator();
+ while (iterator.hasNext()) {
+ System.out.println(iterator.next());
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/adapter/ObjectAdapter.java b/src/com/anxpp/designpattern/adapter/ObjectAdapter.java
index 3d844e2..46885e6 100644
--- a/src/com/anxpp/designpattern/adapter/ObjectAdapter.java
+++ b/src/com/anxpp/designpattern/adapter/ObjectAdapter.java
@@ -1,14 +1,17 @@
-package com.anxpp.designpattern.adapter;
-//对象适配器
-public class ObjectAdapter implements Target{
- private Adaptee adaptee;
- public ObjectAdapter(){
- super();
- adaptee = new Adaptee();
- }
- @Override
- public void playFlac(Object src) {
- //可能需要对src作处理
- adaptee.playMp3(src);
- }
+package com.anxpp.designpattern.adapter;
+
+//对象适配器
+public class ObjectAdapter implements Target {
+ private Adaptee adaptee;
+
+ public ObjectAdapter() {
+ super();
+ adaptee = new Adaptee();
+ }
+
+ @Override
+ public void playFlac(Object src) {
+ //可能需要对src作处理
+ adaptee.playMp3(src);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/adapter/Target.java b/src/com/anxpp/designpattern/adapter/Target.java
index 1cb9f5a..ae1d677 100644
--- a/src/com/anxpp/designpattern/adapter/Target.java
+++ b/src/com/anxpp/designpattern/adapter/Target.java
@@ -1,5 +1,6 @@
-package com.anxpp.designpattern.adapter;
-//目标,也就是用户所希望使用的
-interface Target{
- void playFlac(Object src);
+package com.anxpp.designpattern.adapter;
+
+//目标,也就是用户所希望使用的
+interface Target {
+ void playFlac(Object src);
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/adapter/TestUse.java b/src/com/anxpp/designpattern/adapter/TestUse.java
index 82810c8..af679d6 100644
--- a/src/com/anxpp/designpattern/adapter/TestUse.java
+++ b/src/com/anxpp/designpattern/adapter/TestUse.java
@@ -1,11 +1,12 @@
-package com.anxpp.designpattern.adapter;
-public class TestUse {
- public static void main(String args[]){
- Adaptee adaptee = new Adaptee();
- adaptee.playMp3("mp3");
- Target target = new ClassAdapter();
- target.playFlac("flac");
- target = new ObjectAdapter();
- target.playFlac("flac");
- }
+package com.anxpp.designpattern.adapter;
+
+public class TestUse {
+ public static void main(String[] args) {
+ Adaptee adaptee = new Adaptee();
+ adaptee.playMp3("mp3");
+ Target target = new ClassAdapter();
+ target.playFlac("flac");
+ target = new ObjectAdapter();
+ target.playFlac("flac");
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/bridge/AbstractSave.java b/src/com/anxpp/designpattern/bridge/AbstractSave.java
index 092b58e..938641b 100644
--- a/src/com/anxpp/designpattern/bridge/AbstractSave.java
+++ b/src/com/anxpp/designpattern/bridge/AbstractSave.java
@@ -1,9 +1,12 @@
-package com.anxpp.designpattern.bridge;
-//抽象
-public abstract class AbstractSave {
- ISaveData saveData;
- public AbstractSave(ISaveData saveData){
- this.saveData = saveData;
- }
- public abstract void save(Object data);
-}
+package com.anxpp.designpattern.bridge;
+
+//抽象
+public abstract class AbstractSave {
+ ISaveData saveData;
+
+ public AbstractSave(ISaveData saveData) {
+ this.saveData = saveData;
+ }
+
+ public abstract void save(Object data);
+}
diff --git a/src/com/anxpp/designpattern/bridge/ISaveData.java b/src/com/anxpp/designpattern/bridge/ISaveData.java
index dfe053f..7b0e271 100644
--- a/src/com/anxpp/designpattern/bridge/ISaveData.java
+++ b/src/com/anxpp/designpattern/bridge/ISaveData.java
@@ -1,5 +1,6 @@
-package com.anxpp.designpattern.bridge;
-//实现
-public interface ISaveData {
- void save(Object data);
-}
+package com.anxpp.designpattern.bridge;
+
+//实现
+public interface ISaveData {
+ void save(Object data);
+}
diff --git a/src/com/anxpp/designpattern/bridge/LocalSave.java b/src/com/anxpp/designpattern/bridge/LocalSave.java
index f2f15bc..9ec6683 100644
--- a/src/com/anxpp/designpattern/bridge/LocalSave.java
+++ b/src/com/anxpp/designpattern/bridge/LocalSave.java
@@ -1,12 +1,14 @@
-package com.anxpp.designpattern.bridge;
-//细化抽象
-public class LocalSave extends AbstractSave{
- public LocalSave(ISaveData saveData) {
- super(saveData);
- }
- @Override
- public void save(Object data) {
- System.out.print("本地存储:");
- saveData.save(data);
- }
+package com.anxpp.designpattern.bridge;
+
+//细化抽象
+public class LocalSave extends AbstractSave {
+ public LocalSave(ISaveData saveData) {
+ super(saveData);
+ }
+
+ @Override
+ public void save(Object data) {
+ System.out.print("本地存储:");
+ saveData.save(data);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/bridge/NetSave.java b/src/com/anxpp/designpattern/bridge/NetSave.java
index 62b6dc6..254870e 100644
--- a/src/com/anxpp/designpattern/bridge/NetSave.java
+++ b/src/com/anxpp/designpattern/bridge/NetSave.java
@@ -1,12 +1,14 @@
-package com.anxpp.designpattern.bridge;
-//细化抽象
-public class NetSave extends AbstractSave{
- public NetSave(ISaveData saveData) {
- super(saveData);
- }
- @Override
- public void save(Object data) {
- System.out.print("网络存储:");
- saveData.save(data);
- }
+package com.anxpp.designpattern.bridge;
+
+//细化抽象
+public class NetSave extends AbstractSave {
+ public NetSave(ISaveData saveData) {
+ super(saveData);
+ }
+
+ @Override
+ public void save(Object data) {
+ System.out.print("网络存储:");
+ saveData.save(data);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/bridge/SaveToDB.java b/src/com/anxpp/designpattern/bridge/SaveToDB.java
index 55c1781..c73669d 100644
--- a/src/com/anxpp/designpattern/bridge/SaveToDB.java
+++ b/src/com/anxpp/designpattern/bridge/SaveToDB.java
@@ -1,8 +1,9 @@
-package com.anxpp.designpattern.bridge;
-//具体实现
-public class SaveToDB implements ISaveData{
- @Override
- public void save(Object data) {
- System.out.println(data + " 存储到数据库");
- }
-}
+package com.anxpp.designpattern.bridge;
+
+//具体实现
+public class SaveToDB implements ISaveData {
+ @Override
+ public void save(Object data) {
+ System.out.println(data + " 存储到数据库");
+ }
+}
diff --git a/src/com/anxpp/designpattern/bridge/SaveToFile.java b/src/com/anxpp/designpattern/bridge/SaveToFile.java
index 785653e..ee72ae7 100644
--- a/src/com/anxpp/designpattern/bridge/SaveToFile.java
+++ b/src/com/anxpp/designpattern/bridge/SaveToFile.java
@@ -1,8 +1,9 @@
-package com.anxpp.designpattern.bridge;
-//具体实现
-public class SaveToFile implements ISaveData{
- @Override
- public void save(Object data) {
- System.out.println(data + " 存储到文件");
- }
-}
+package com.anxpp.designpattern.bridge;
+
+//具体实现
+public class SaveToFile implements ISaveData {
+ @Override
+ public void save(Object data) {
+ System.out.println(data + " 存储到文件");
+ }
+}
diff --git a/src/com/anxpp/designpattern/bridge/SimpleBridge.java b/src/com/anxpp/designpattern/bridge/SimpleBridge.java
index c2baafc..8b8acfb 100644
--- a/src/com/anxpp/designpattern/bridge/SimpleBridge.java
+++ b/src/com/anxpp/designpattern/bridge/SimpleBridge.java
@@ -1,51 +1,62 @@
-package com.anxpp.designpattern.bridge;
-//桥接模式
-public class SimpleBridge {
- public static void main(String args[]){
- new LenevoComputer(new Amd()).discribe();
- new HaseeComputer(new Intel()).discribe();
- }
-}
-//实现者
-interface Cpu{
- String discribe();
-}
-//具体实现者*2
-class Amd implements Cpu{
- public String discribe() {
- return "just so so...";
- }
-}
-class Intel implements Cpu{
- public String discribe() {
- return "great !";
- }
-}
-//抽象
-abstract class AbstractComputer{
- Cpu cpu;
- public AbstractComputer(Cpu cpu){
- this.cpu=cpu;
- }
- public abstract void discribe();
-
-}
-//细化抽象*2
-class LenevoComputer extends AbstractComputer{
- public LenevoComputer(Cpu cpu) {
- super(cpu);
- }
- @Override
- public void discribe() {
- System.out.println("联想笔记本cpu:"+super.cpu.discribe());
- }
-}
-class HaseeComputer extends AbstractComputer{
- public HaseeComputer(Cpu cpu) {
- super(cpu);
- }
- @Override
- public void discribe() {
- System.out.println("神舟笔记本cpu:"+super.cpu.discribe());
- }
+package com.anxpp.designpattern.bridge;
+
+//实现者
+interface Cpu {
+ String discribe();
+}
+
+//桥接模式
+public class SimpleBridge {
+ public static void main(String[] args) {
+ new LenevoComputer(new Amd()).discribe();
+ new HaseeComputer(new Intel()).discribe();
+ }
+}
+
+//具体实现者*2
+class Amd implements Cpu {
+ public String discribe() {
+ return "just so so...";
+ }
+}
+
+class Intel implements Cpu {
+ public String discribe() {
+ return "great !";
+ }
+}
+
+//抽象
+abstract class AbstractComputer {
+ Cpu cpu;
+
+ public AbstractComputer(Cpu cpu) {
+ this.cpu = cpu;
+ }
+
+ public abstract void discribe();
+
+}
+
+//细化抽象*2
+class LenevoComputer extends AbstractComputer {
+ public LenevoComputer(Cpu cpu) {
+ super(cpu);
+ }
+
+ @Override
+ public void discribe() {
+ System.out.println("联想笔记本cpu:" + super.cpu.discribe());
+ }
+}
+
+class HaseeComputer extends AbstractComputer {
+ public HaseeComputer(Cpu cpu) {
+ super(cpu);
+ }
+
+ @Override
+ public void discribe() {
+ System.out.println("神舟笔记本cpu:" + super.cpu.discribe());
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/bridge/TestUse.java b/src/com/anxpp/designpattern/bridge/TestUse.java
index 4b38869..c558ef5 100644
--- a/src/com/anxpp/designpattern/bridge/TestUse.java
+++ b/src/com/anxpp/designpattern/bridge/TestUse.java
@@ -1,17 +1,18 @@
-package com.anxpp.designpattern.bridge;
-public class TestUse {
- public static void main(String args[]){
- Object data = "数据";
- ISaveData saveDataDb = new SaveToDB();
- ISaveData saveDataFile = new SaveToFile();
- AbstractSave save;
- save = new NetSave(saveDataDb);
- save.save(data);
- save = new NetSave(saveDataFile);
- save.save(data);
- save = new LocalSave(saveDataDb);
- save.save(data);
- save = new LocalSave(saveDataFile);
- save.save(data);
- }
+package com.anxpp.designpattern.bridge;
+
+public class TestUse {
+ public static void main(String[] args) {
+ Object data = "数据";
+ ISaveData saveDataDb = new SaveToDB();
+ ISaveData saveDataFile = new SaveToFile();
+ AbstractSave save;
+ save = new NetSave(saveDataDb);
+ save.save(data);
+ save = new NetSave(saveDataFile);
+ save.save(data);
+ save = new LocalSave(saveDataDb);
+ save.save(data);
+ save = new LocalSave(saveDataFile);
+ save.save(data);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/builder/DateBuilder1.java b/src/com/anxpp/designpattern/builder/DateBuilder1.java
index 5ff5088..aced137 100644
--- a/src/com/anxpp/designpattern/builder/DateBuilder1.java
+++ b/src/com/anxpp/designpattern/builder/DateBuilder1.java
@@ -1,17 +1,21 @@
-package com.anxpp.designpattern.builder;
-//具体生成器
-public class DateBuilder1 implements IDateBuilder{
- private MyDate myDate;
- public DateBuilder1(MyDate myDate){
- this.myDate = myDate;
- }
- @Override
- public IDateBuilder buildDate(int y, int m, int d) {
- myDate.date = y+"-"+m+"-"+d;
- return this;
- }
- @Override
- public String date() {
- return myDate.date;
- }
-}
+package com.anxpp.designpattern.builder;
+
+//具体生成器
+public class DateBuilder1 implements IDateBuilder {
+ private MyDate myDate;
+
+ public DateBuilder1(MyDate myDate) {
+ this.myDate = myDate;
+ }
+
+ @Override
+ public IDateBuilder buildDate(int y, int m, int d) {
+ myDate.date = y + "-" + m + "-" + d;
+ return this;
+ }
+
+ @Override
+ public String date() {
+ return myDate.date;
+ }
+}
diff --git a/src/com/anxpp/designpattern/builder/DateBuilder2.java b/src/com/anxpp/designpattern/builder/DateBuilder2.java
index f32d4e7..b8f74dc 100644
--- a/src/com/anxpp/designpattern/builder/DateBuilder2.java
+++ b/src/com/anxpp/designpattern/builder/DateBuilder2.java
@@ -1,17 +1,21 @@
-package com.anxpp.designpattern.builder;
-//具体生成器
-public class DateBuilder2 implements IDateBuilder{
- private MyDate myDate;
- public DateBuilder2(MyDate myDate){
- this.myDate = myDate;
- }
- @Override
- public IDateBuilder buildDate(int y, int m, int d) {
- myDate.date = y+" "+m+" "+d;
- return this;
- }
- @Override
- public String date() {
- return myDate.date;
- }
-}
+package com.anxpp.designpattern.builder;
+
+//具体生成器
+public class DateBuilder2 implements IDateBuilder {
+ private MyDate myDate;
+
+ public DateBuilder2(MyDate myDate) {
+ this.myDate = myDate;
+ }
+
+ @Override
+ public IDateBuilder buildDate(int y, int m, int d) {
+ myDate.date = y + " " + m + " " + d;
+ return this;
+ }
+
+ @Override
+ public String date() {
+ return myDate.date;
+ }
+}
diff --git a/src/com/anxpp/designpattern/builder/Derector.java b/src/com/anxpp/designpattern/builder/Derector.java
index b665d11..5c0db2e 100644
--- a/src/com/anxpp/designpattern/builder/Derector.java
+++ b/src/com/anxpp/designpattern/builder/Derector.java
@@ -1,12 +1,15 @@
-package com.anxpp.designpattern.builder;
-//指挥者
-public class Derector {
- private IDateBuilder builder;
- public Derector(IDateBuilder builder){
- this.builder = builder;
- }
- public String getDate(int y,int m,int d){
- builder.buildDate(y, m, d);
- return builder.date();
- }
-}
+package com.anxpp.designpattern.builder;
+
+//指挥者
+public class Derector {
+ private IDateBuilder builder;
+
+ public Derector(IDateBuilder builder) {
+ this.builder = builder;
+ }
+
+ public String getDate(int y, int m, int d) {
+ builder.buildDate(y, m, d);
+ return builder.date();
+ }
+}
diff --git a/src/com/anxpp/designpattern/builder/IDateBuilder.java b/src/com/anxpp/designpattern/builder/IDateBuilder.java
index bc08fbf..ed6f91a 100644
--- a/src/com/anxpp/designpattern/builder/IDateBuilder.java
+++ b/src/com/anxpp/designpattern/builder/IDateBuilder.java
@@ -1,6 +1,8 @@
-package com.anxpp.designpattern.builder;
-//抽象生成器
-public interface IDateBuilder {
- IDateBuilder buildDate(int y,int m,int d);
- String date();
-}
+package com.anxpp.designpattern.builder;
+
+//抽象生成器
+public interface IDateBuilder {
+ IDateBuilder buildDate(int y, int m, int d);
+
+ String date();
+}
diff --git a/src/com/anxpp/designpattern/builder/MyDate.java b/src/com/anxpp/designpattern/builder/MyDate.java
index 75d656c..af11243 100644
--- a/src/com/anxpp/designpattern/builder/MyDate.java
+++ b/src/com/anxpp/designpattern/builder/MyDate.java
@@ -1,5 +1,6 @@
-package com.anxpp.designpattern.builder;
-//产品
-public class MyDate {
- String date;
-}
+package com.anxpp.designpattern.builder;
+
+//产品
+public class MyDate {
+ String date;
+}
diff --git a/src/com/anxpp/designpattern/builder/TestUse.java b/src/com/anxpp/designpattern/builder/TestUse.java
index d9290c3..9c70894 100644
--- a/src/com/anxpp/designpattern/builder/TestUse.java
+++ b/src/com/anxpp/designpattern/builder/TestUse.java
@@ -1,11 +1,12 @@
-package com.anxpp.designpattern.builder;
-public class TestUse {
- public static void main(String args[]){
- MyDate date = new MyDate();
- IDateBuilder builder;
- builder = new DateBuilder1(date).buildDate(2066, 3, 5);
- System.out.println(builder.date());
- builder = new DateBuilder2(date).buildDate(2066, 3, 5);
- System.out.println(builder.date());
- }
+package com.anxpp.designpattern.builder;
+
+public class TestUse {
+ public static void main(String[] args) {
+ MyDate date = new MyDate();
+ IDateBuilder builder;
+ builder = new DateBuilder1(date).buildDate(2066, 3, 5);
+ System.out.println(builder.date());
+ builder = new DateBuilder2(date).buildDate(2066, 3, 5);
+ System.out.println(builder.date());
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/chainofresponsibility/Handler.java b/src/com/anxpp/designpattern/chainofresponsibility/Handler.java
index d886c98..4f8ee51 100644
--- a/src/com/anxpp/designpattern/chainofresponsibility/Handler.java
+++ b/src/com/anxpp/designpattern/chainofresponsibility/Handler.java
@@ -1,6 +1,8 @@
-package com.anxpp.designpattern.chainofresponsibility;
-//处理者
-public interface Handler {
- int handleRequest(int n);
- void setNextHandler(Handler next);
-}
+package com.anxpp.designpattern.chainofresponsibility;
+
+//处理者
+public interface Handler {
+ int handleRequest(int n);
+
+ void setNextHandler(Handler next);
+}
diff --git a/src/com/anxpp/designpattern/chainofresponsibility/Handler1.java b/src/com/anxpp/designpattern/chainofresponsibility/Handler1.java
index 08dda74..d122bb3 100644
--- a/src/com/anxpp/designpattern/chainofresponsibility/Handler1.java
+++ b/src/com/anxpp/designpattern/chainofresponsibility/Handler1.java
@@ -1,18 +1,21 @@
-package com.anxpp.designpattern.chainofresponsibility;
-//第一个具体处理者,处理小于0的
-public class Handler1 implements Handler {
- private Handler next;
- @Override
- public int handleRequest(int n) {
- if(n<0) return -n; - else{ - if(next==null) - throw new NullPointerException("next 不能为空"); - return next.handleRequest(n); - } - } - @Override - public void setNextHandler(Handler next) { - this.next = next; - } -} +package com.anxpp.designpattern.chainofresponsibility; + +//第一个具体处理者,处理小于0的 +public class Handler1 implements Handler { + private Handler next; + + @Override + public int handleRequest(int n) { + if (n < 0) return -n; + else { + if (next == null) + throw new NullPointerException("next 不能为空"); + return next.handleRequest(n); + } + } + + @Override + public void setNextHandler(Handler next) { + this.next = next; + } +} diff --git a/src/com/anxpp/designpattern/chainofresponsibility/Handler2.java b/src/com/anxpp/designpattern/chainofresponsibility/Handler2.java index ad92976..c45b08f 100644 --- a/src/com/anxpp/designpattern/chainofresponsibility/Handler2.java +++ b/src/com/anxpp/designpattern/chainofresponsibility/Handler2.java @@ -1,18 +1,21 @@ -package com.anxpp.designpattern.chainofresponsibility; -//第二个具体处理者,处理>=0但小于10的
-public class Handler2 implements Handler {
- private Handler next;
- @Override
- public int handleRequest(int n) {
- if(n<10) return n*n; - else{ - if(next==null) - throw new NullPointerException("next 不能为空"); - return next.handleRequest(n); - } - } - @Override - public void setNextHandler(Handler next) { - this.next = next; - } -} +package com.anxpp.designpattern.chainofresponsibility; + +//第二个具体处理者,处理>=0但小于10的
+public class Handler2 implements Handler {
+ private Handler next;
+
+ @Override
+ public int handleRequest(int n) {
+ if (n < 10) return n * n; + else { + if (next == null) + throw new NullPointerException("next 不能为空"); + return next.handleRequest(n); + } + } + + @Override + public void setNextHandler(Handler next) { + this.next = next; + } +} diff --git a/src/com/anxpp/designpattern/chainofresponsibility/Handler3.java b/src/com/anxpp/designpattern/chainofresponsibility/Handler3.java index b5e54a7..bf62100 100644 --- a/src/com/anxpp/designpattern/chainofresponsibility/Handler3.java +++ b/src/com/anxpp/designpattern/chainofresponsibility/Handler3.java @@ -1,18 +1,21 @@ -package com.anxpp.designpattern.chainofresponsibility; -//第三个具体处理者,处理>=0但小于10的
-public class Handler3 implements Handler {
- private Handler next;
- @Override
- public int handleRequest(int n) {
- if(n<=integer.max_value) return n; - else{ - if(next==null) - throw new NullPointerException("next 不能为空"); - return next.handleRequest(n); - } - } - @Override - public void setNextHandler(Handler next) { - this.next = next; - } -} +package com.anxpp.designpattern.chainofresponsibility; + +//第三个具体处理者,处理>=0但小于10的
+public class Handler3 implements Handler {
+ private Handler next;
+
+ @Override
+ public int handleRequest(int n) {
+ if (n <= Integer.MAX_VALUE) return n; + else { + if (next == null) + throw new NullPointerException("next 不能为空"); + return next.handleRequest(n); + } + } + + @Override + public void setNextHandler(Handler next) { + this.next = next; + } +} diff --git a/src/com/anxpp/designpattern/chainofresponsibility/TestUse.java b/src/com/anxpp/designpattern/chainofresponsibility/TestUse.java index 3c3cf75..e2a81f4 100644 --- a/src/com/anxpp/designpattern/chainofresponsibility/TestUse.java +++ b/src/com/anxpp/designpattern/chainofresponsibility/TestUse.java @@ -1,14 +1,15 @@ -package com.anxpp.designpattern.chainofresponsibility; -public class TestUse { - public static void main(String args[]){ - Handler h1,h2,h3; - h1 = new Handler1(); - h2 = new Handler2(); - h3 = new Handler3(); - h1.setNextHandler(h2); - h2.setNextHandler(h3); - System.out.println(h1.handleRequest(-1)); - System.out.println(h1.handleRequest(5)); - System.out.println(h1.handleRequest(9999)); - } +package com.anxpp.designpattern.chainofresponsibility; + +public class TestUse { + public static void main(String[] args) { + Handler h1, h2, h3; + h1 = new Handler1(); + h2 = new Handler2(); + h3 = new Handler3(); + h1.setNextHandler(h2); + h2.setNextHandler(h3); + System.out.println(h1.handleRequest(-1)); + System.out.println(h1.handleRequest(5)); + System.out.println(h1.handleRequest(9999)); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/command/Client.java b/src/com/anxpp/designpattern/command/Client.java index 6641639..e7cdf9c 100644 --- a/src/com/anxpp/designpattern/command/Client.java +++ b/src/com/anxpp/designpattern/command/Client.java @@ -1,14 +1,17 @@ -package com.anxpp.designpattern.command; -//请求者 -public class Client { - Command command; - public Client setCommand(Command command){ - this.command = command; - return this; - } - public void executeCommand(String name) throws Exception{ - if(command==null) - throw new Exception("命令不能为空!"); - command.execute(name); - } -} +package com.anxpp.designpattern.command; + +//请求者 +public class Client { + Command command; + + public Client setCommand(Command command) { + this.command = command; + return this; + } + + public void executeCommand(String name) throws Exception { + if (command == null) + throw new Exception("命令不能为空!"); + command.execute(name); + } +} diff --git a/src/com/anxpp/designpattern/command/Command.java b/src/com/anxpp/designpattern/command/Command.java index e7f9edc..76c9295 100644 --- a/src/com/anxpp/designpattern/command/Command.java +++ b/src/com/anxpp/designpattern/command/Command.java @@ -1,5 +1,6 @@ -package com.anxpp.designpattern.command; -//命令接口 -public interface Command { - void execute(String name) throws Exception; -} +package com.anxpp.designpattern.command; + +//命令接口 +public interface Command { + void execute(String name) throws Exception; +} diff --git a/src/com/anxpp/designpattern/command/CommandCreate.java b/src/com/anxpp/designpattern/command/CommandCreate.java index 568e708..428a2c8 100644 --- a/src/com/anxpp/designpattern/command/CommandCreate.java +++ b/src/com/anxpp/designpattern/command/CommandCreate.java @@ -1,12 +1,15 @@ -package com.anxpp.designpattern.command; -//新建文件命令 -public class CommandCreate implements Command { - MakeFile makeFile; - public CommandCreate(MakeFile makeFile) { - this.makeFile = makeFile; - } - @Override - public void execute(String name) throws Exception { - makeFile.createFile(name); - } -} +package com.anxpp.designpattern.command; + +//新建文件命令 +public class CommandCreate implements Command { + MakeFile makeFile; + + public CommandCreate(MakeFile makeFile) { + this.makeFile = makeFile; + } + + @Override + public void execute(String name) throws Exception { + makeFile.createFile(name); + } +} diff --git a/src/com/anxpp/designpattern/command/CommandDelete.java b/src/com/anxpp/designpattern/command/CommandDelete.java index 1aaef48..2f21280 100644 --- a/src/com/anxpp/designpattern/command/CommandDelete.java +++ b/src/com/anxpp/designpattern/command/CommandDelete.java @@ -1,12 +1,15 @@ -package com.anxpp.designpattern.command; -//删文件命令 -public class CommandDelete implements Command{ - MakeFile makeFile; - public CommandDelete(MakeFile makeFile) { - this.makeFile = makeFile; - } - @Override - public void execute(String name) throws Exception { - makeFile.deleteFile(name); - } -} +package com.anxpp.designpattern.command; + +//删文件命令 +public class CommandDelete implements Command { + MakeFile makeFile; + + public CommandDelete(MakeFile makeFile) { + this.makeFile = makeFile; + } + + @Override + public void execute(String name) throws Exception { + makeFile.deleteFile(name); + } +} diff --git a/src/com/anxpp/designpattern/command/CommandWithUndo.java b/src/com/anxpp/designpattern/command/CommandWithUndo.java index 7724a32..ef1dc59 100644 --- a/src/com/anxpp/designpattern/command/CommandWithUndo.java +++ b/src/com/anxpp/designpattern/command/CommandWithUndo.java @@ -1,5 +1,6 @@ -package com.anxpp.designpattern.command; -//命令接口 -public interface CommandWithUndo extends Command{ - void undo(); -} +package com.anxpp.designpattern.command; + +//命令接口 +public interface CommandWithUndo extends Command { + void undo(); +} diff --git a/src/com/anxpp/designpattern/command/MakeFile.java b/src/com/anxpp/designpattern/command/MakeFile.java index 7a80883..82bb341 100644 --- a/src/com/anxpp/designpattern/command/MakeFile.java +++ b/src/com/anxpp/designpattern/command/MakeFile.java @@ -1,20 +1,23 @@ -package com.anxpp.designpattern.command; -import java.io.File; -import java.io.IOException; -//接收者 -public class MakeFile { - //新建文件 - public void createFile(String name) throws IOException{ - File file = new File(name); - file.createNewFile(); - } - //删除文件 - public boolean deleteFile(String name){ - File file = new File(name); - if(file.exists()&&file.isFile()){ - file.delete(); - return true; - } - return false; - } +package com.anxpp.designpattern.command; + +import java.io.File; +import java.io.IOException; + +//接收者 +public class MakeFile { + //新建文件 + public void createFile(String name) throws IOException { + File file = new File(name); + file.createNewFile(); + } + + //删除文件 + public boolean deleteFile(String name) { + File file = new File(name); + if (file.exists() && file.isFile()) { + file.delete(); + return true; + } + return false; + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/command/TestUse.java b/src/com/anxpp/designpattern/command/TestUse.java index 382d5de..77ef1d7 100644 --- a/src/com/anxpp/designpattern/command/TestUse.java +++ b/src/com/anxpp/designpattern/command/TestUse.java @@ -1,16 +1,17 @@ -package com.anxpp.designpattern.command; -public class TestUse { - public static void main(String args[]) throws Exception{ - //接收者 - MakeFile makeFile = new MakeFile(); - //命令 - CommandCreate create = new CommandCreate(makeFile); - CommandDelete delete = new CommandDelete(makeFile); - //请求者 - Client client = new Client(); - //执行命令 - client.setCommand(create).executeCommand("d://test1.txt"); - client.setCommand(create).executeCommand("d://test2.txt"); - client.setCommand(delete).executeCommand("d://test2.txt"); - } +package com.anxpp.designpattern.command; + +public class TestUse { + public static void main(String[] args) throws Exception { + //接收者 + MakeFile makeFile = new MakeFile(); + //命令 + CommandCreate create = new CommandCreate(makeFile); + CommandDelete delete = new CommandDelete(makeFile); + //请求者 + Client client = new Client(); + //执行命令 + client.setCommand(create).executeCommand("d://test1.txt"); + client.setCommand(create).executeCommand("d://test2.txt"); + client.setCommand(delete).executeCommand("d://test2.txt"); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/decorator/IPersistentUtil.java b/src/com/anxpp/designpattern/decorator/IPersistentUtil.java index 87d8d7c..d0b5dee 100644 --- a/src/com/anxpp/designpattern/decorator/IPersistentUtil.java +++ b/src/com/anxpp/designpattern/decorator/IPersistentUtil.java @@ -1,5 +1,6 @@ -package com.anxpp.designpattern.decorator; -//被装饰者接口 -public interface IPersistentUtil { - void persistentMsg(String msg); -} +package com.anxpp.designpattern.decorator; + +//被装饰者接口 +public interface IPersistentUtil { + void persistentMsg(String msg); +} diff --git a/src/com/anxpp/designpattern/decorator/PersistentDbDecorator.java b/src/com/anxpp/designpattern/decorator/PersistentDbDecorator.java index e34ac4c..b5a1d24 100644 --- a/src/com/anxpp/designpattern/decorator/PersistentDbDecorator.java +++ b/src/com/anxpp/designpattern/decorator/PersistentDbDecorator.java @@ -1,15 +1,18 @@ -package com.anxpp.designpattern.decorator; -//装饰--存入数据库 -public class PersistentDbDecorator extends PersistentDecorator { - public PersistentDbDecorator(IPersistentUtil iPersistentUtil){ - super(iPersistentUtil); - } - @Override - public void persistentMsg(String msg) { - iPersistentUtil.persistentMsg(msg); - persistentToDb(msg); - } - private void persistentToDb(String msg){ - System.out.println(msg + " 存入数据库"); - } +package com.anxpp.designpattern.decorator; + +//装饰--存入数据库 +public class PersistentDbDecorator extends PersistentDecorator { + public PersistentDbDecorator(IPersistentUtil iPersistentUtil) { + super(iPersistentUtil); + } + + @Override + public void persistentMsg(String msg) { + iPersistentUtil.persistentMsg(msg); + persistentToDb(msg); + } + + private void persistentToDb(String msg) { + System.out.println(msg + " 存入数据库"); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/decorator/PersistentDecorator.java b/src/com/anxpp/designpattern/decorator/PersistentDecorator.java index d7a5fa5..fe4fe88 100644 --- a/src/com/anxpp/designpattern/decorator/PersistentDecorator.java +++ b/src/com/anxpp/designpattern/decorator/PersistentDecorator.java @@ -1,12 +1,15 @@ -package com.anxpp.designpattern.decorator; -//装饰 -public abstract class PersistentDecorator implements IPersistentUtil { - IPersistentUtil iPersistentUtil; - public PersistentDecorator(IPersistentUtil iPersistentUtil){ - this.iPersistentUtil = iPersistentUtil; - } - @Override - public void persistentMsg(String msg) { - iPersistentUtil.persistentMsg(msg); - } -} +package com.anxpp.designpattern.decorator; + +//装饰 +public abstract class PersistentDecorator implements IPersistentUtil { + IPersistentUtil iPersistentUtil; + + public PersistentDecorator(IPersistentUtil iPersistentUtil) { + this.iPersistentUtil = iPersistentUtil; + } + + @Override + public void persistentMsg(String msg) { + iPersistentUtil.persistentMsg(msg); + } +} diff --git a/src/com/anxpp/designpattern/decorator/PersistentNetDecorator.java b/src/com/anxpp/designpattern/decorator/PersistentNetDecorator.java index c4db93a..48c2fb4 100644 --- a/src/com/anxpp/designpattern/decorator/PersistentNetDecorator.java +++ b/src/com/anxpp/designpattern/decorator/PersistentNetDecorator.java @@ -1,15 +1,18 @@ -package com.anxpp.designpattern.decorator; -//装饰--存入网络其他地方 -public class PersistentNetDecorator extends PersistentDecorator { - public PersistentNetDecorator(IPersistentUtil iPersistentUtil){ - super(iPersistentUtil); - } - @Override - public void persistentMsg(String msg) { - iPersistentUtil.persistentMsg(msg); - persistentToNet(msg); - } - private void persistentToNet(String msg){ - System.out.println(msg + " 存入网络的其他地方"); - } +package com.anxpp.designpattern.decorator; + +//装饰--存入网络其他地方 +public class PersistentNetDecorator extends PersistentDecorator { + public PersistentNetDecorator(IPersistentUtil iPersistentUtil) { + super(iPersistentUtil); + } + + @Override + public void persistentMsg(String msg) { + iPersistentUtil.persistentMsg(msg); + persistentToNet(msg); + } + + private void persistentToNet(String msg) { + System.out.println(msg + " 存入网络的其他地方"); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/decorator/PersistentUtil.java b/src/com/anxpp/designpattern/decorator/PersistentUtil.java index 84db002..bc32542 100644 --- a/src/com/anxpp/designpattern/decorator/PersistentUtil.java +++ b/src/com/anxpp/designpattern/decorator/PersistentUtil.java @@ -1,8 +1,9 @@ -package com.anxpp.designpattern.decorator; -//具体的被装饰者 -public class PersistentUtil implements IPersistentUtil{ - @Override - public void persistentMsg(String msg) { - System.out.println(msg + " 存入文件"); - } +package com.anxpp.designpattern.decorator; + +//具体的被装饰者 +public class PersistentUtil implements IPersistentUtil { + @Override + public void persistentMsg(String msg) { + System.out.println(msg + " 存入文件"); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/decorator/TestUse.java b/src/com/anxpp/designpattern/decorator/TestUse.java index a554651..05d12f4 100644 --- a/src/com/anxpp/designpattern/decorator/TestUse.java +++ b/src/com/anxpp/designpattern/decorator/TestUse.java @@ -1,16 +1,16 @@ -package com.anxpp.designpattern.decorator; - -public class TestUse { - public static void main(String args[]){ - //被装饰者 - final String data = "数据"; - IPersistentUtil iPersistentUtil = new PersistentUtil(); - iPersistentUtil.persistentMsg(data); - System.out.println("下面装饰数据库持久化:"); - iPersistentUtil = new PersistentDbDecorator(iPersistentUtil); - iPersistentUtil.persistentMsg(data); - System.out.println("下面继续装饰网络存储器持久化:"); - iPersistentUtil = new PersistentNetDecorator(iPersistentUtil); - iPersistentUtil.persistentMsg(data); - } +package com.anxpp.designpattern.decorator; + +public class TestUse { + public static void main(String[] args) { + //被装饰者 + final String data = "数据"; + IPersistentUtil iPersistentUtil = new PersistentUtil(); + iPersistentUtil.persistentMsg(data); + System.out.println("下面装饰数据库持久化:"); + iPersistentUtil = new PersistentDbDecorator(iPersistentUtil); + iPersistentUtil.persistentMsg(data); + System.out.println("下面继续装饰网络存储器持久化:"); + iPersistentUtil = new PersistentNetDecorator(iPersistentUtil); + iPersistentUtil.persistentMsg(data); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/facade/Discount.java b/src/com/anxpp/designpattern/facade/Discount.java index 462d094..b60f4ed 100644 --- a/src/com/anxpp/designpattern/facade/Discount.java +++ b/src/com/anxpp/designpattern/facade/Discount.java @@ -1,7 +1,8 @@ -package com.anxpp.designpattern.facade; -//计算优惠 -public class Discount { - int getDiscount(String discountCode){ - return Math.abs(discountCode.hashCode())%3; - } -} +package com.anxpp.designpattern.facade; + +//计算优惠 +public class Discount { + int getDiscount(String discountCode) { + return Math.abs(discountCode.hashCode()) % 3; + } +} diff --git a/src/com/anxpp/designpattern/facade/FinalPrice.java b/src/com/anxpp/designpattern/facade/FinalPrice.java index d4ea0a1..75659ef 100644 --- a/src/com/anxpp/designpattern/facade/FinalPrice.java +++ b/src/com/anxpp/designpattern/facade/FinalPrice.java @@ -1,15 +1,18 @@ -package com.anxpp.designpattern.facade; -//计费子系统 -public class FinalPrice { - ProductPrice productPrice; - Postage postage; - Discount discount; - public FinalPrice(){ - productPrice = new ProductPrice(); - postage = new Postage(); - discount = new Discount(); - } - int getFinalPrice(String product,String addr,String discountCode){ - return productPrice.getPrice(product)+postage.getPostage(addr)-discount.getDiscount(discountCode); - } -} +package com.anxpp.designpattern.facade; + +//计费子系统 +public class FinalPrice { + ProductPrice productPrice; + Postage postage; + Discount discount; + + public FinalPrice() { + productPrice = new ProductPrice(); + postage = new Postage(); + discount = new Discount(); + } + + int getFinalPrice(String product, String addr, String discountCode) { + return productPrice.getPrice(product) + postage.getPostage(addr) - discount.getDiscount(discountCode); + } +} diff --git a/src/com/anxpp/designpattern/facade/Postage.java b/src/com/anxpp/designpattern/facade/Postage.java index 7bab756..5ff39e8 100644 --- a/src/com/anxpp/designpattern/facade/Postage.java +++ b/src/com/anxpp/designpattern/facade/Postage.java @@ -1,7 +1,8 @@ -package com.anxpp.designpattern.facade; -//计算邮费 -public class Postage { - int getPostage(String addr){ - return Math.abs(addr.hashCode())%20+6;//模拟邮费计算 - } -} +package com.anxpp.designpattern.facade; + +//计算邮费 +public class Postage { + int getPostage(String addr) { + return Math.abs(addr.hashCode()) % 20 + 6;//模拟邮费计算 + } +} diff --git a/src/com/anxpp/designpattern/facade/ProductPrice.java b/src/com/anxpp/designpattern/facade/ProductPrice.java index 8ff9a29..97a1259 100644 --- a/src/com/anxpp/designpattern/facade/ProductPrice.java +++ b/src/com/anxpp/designpattern/facade/ProductPrice.java @@ -1,7 +1,8 @@ -package com.anxpp.designpattern.facade; -//获取商品价格 -public class ProductPrice { - int getPrice(String product){ - return Math.abs(product.hashCode());//模拟获取商品价格 - } -} +package com.anxpp.designpattern.facade; + +//获取商品价格 +public class ProductPrice { + int getPrice(String product) { + return Math.abs(product.hashCode());//模拟获取商品价格 + } +} diff --git a/src/com/anxpp/designpattern/facade/ProductSalesman.java b/src/com/anxpp/designpattern/facade/ProductSalesman.java index 62553d6..8f66d7f 100644 --- a/src/com/anxpp/designpattern/facade/ProductSalesman.java +++ b/src/com/anxpp/designpattern/facade/ProductSalesman.java @@ -1,13 +1,15 @@ -package com.anxpp.designpattern.facade; -//外观 -public enum ProductSalesman { - instance; - Stock stock = new Stock(); - FinalPrice finalPrice = new FinalPrice(); - Object buySomething(String product,String addr,String discountCode){ - if(!stock.hasStock(product)) - return "库存不足"; - int price = finalPrice.getFinalPrice(product, addr, discountCode); - return "订单信息:" + product + "-" + addr + "-" + discountCode + "-" + price; - } -} +package com.anxpp.designpattern.facade; + +//外观 +public enum ProductSalesman { + instance; + Stock stock = new Stock(); + FinalPrice finalPrice = new FinalPrice(); + + Object buySomething(String product, String addr, String discountCode) { + if (!stock.hasStock(product)) + return "库存不足"; + int price = finalPrice.getFinalPrice(product, addr, discountCode); + return "订单信息:" + product + "-" + addr + "-" + discountCode + "-" + price; + } +} diff --git a/src/com/anxpp/designpattern/facade/Stock.java b/src/com/anxpp/designpattern/facade/Stock.java index 0af592e..602d814 100644 --- a/src/com/anxpp/designpattern/facade/Stock.java +++ b/src/com/anxpp/designpattern/facade/Stock.java @@ -1,9 +1,10 @@ -package com.anxpp.designpattern.facade; - -import java.util.Random; -//库存子系统 -public class Stock { - boolean hasStock(String product){ - return new Random().nextInt(Math.abs(product.hashCode()))>0;//模拟是否还有库存
- }
+package com.anxpp.designpattern.facade;
+
+import java.util.Random;
+
+//库存子系统
+public class Stock {
+ boolean hasStock(String product) {
+ return new Random().nextInt(Math.abs(product.hashCode()))> 0;//模拟是否还有库存
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/facade/TestUse.java b/src/com/anxpp/designpattern/facade/TestUse.java
index 2c73d8b..6784dcc 100644
--- a/src/com/anxpp/designpattern/facade/TestUse.java
+++ b/src/com/anxpp/designpattern/facade/TestUse.java
@@ -1,7 +1,8 @@
-package com.anxpp.designpattern.facade;
-public class TestUse {
- public static void main(String args[]){
- Object info = ProductSalesman.instance.buySomething("银河飞船", "地球", "K1234523");
- System.out.println(info);
- }
+package com.anxpp.designpattern.facade;
+
+public class TestUse {
+ public static void main(String[] args) {
+ Object info = ProductSalesman.instance.buySomething("银河飞船", "地球", "K1234523");
+ System.out.println(info);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/factorymethod/ArrayList.java b/src/com/anxpp/designpattern/factorymethod/ArrayList.java
index 344a848..b61a958 100644
--- a/src/com/anxpp/designpattern/factorymethod/ArrayList.java
+++ b/src/com/anxpp/designpattern/factorymethod/ArrayList.java
@@ -1,36 +1,43 @@
-package com.anxpp.designpattern.factorymethod;
-//方便演示而实现的简陋的数组list
-public class ArrayList implements List{
- private int size; //存放的元素个数,会默认初始化为0
- private Object[] defaultList; //使用数组存放元素
- private static final int defaultLength = 10;//默认长度
- public ArrayList(){ //默认构造函数
- defaultList = new Object[defaultLength];
- }
- @Override
- public Iterator iterator() {
- return new MyIterator();
- }
- //添加元素
- @Override
- public boolean add(T t) {
- if(size<=defaultlength){ - defaultList[size++] = t; - return true; - } - return false; - } - //遍历器 - private class MyIterator implements Iterator{
- private int next;
- @Override
- public boolean hasNext() {
- return next implements List {
+ private static final int defaultLength = 10;//默认长度
+ private int size; //存放的元素个数,会默认初始化为0
+ private Object[] defaultList; //使用数组存放元素
+
+ public ArrayList() { //默认构造函数
+ defaultList = new Object[defaultLength];
+ }
+
+ @Override
+ public Iterator iterator() {
+ return new MyIterator();
+ }
+
+ //添加元素
+ @Override
+ public boolean add(T t) {
+ if (size <= defaultLength) { + defaultList[size++] = t; + return true; + } + return false; + } + + //遍历器 + private class MyIterator implements Iterator {
+ private int next;
+
+ @Override
+ public boolean hasNext() {
+ return next < size; + } + + @SuppressWarnings("unchecked") + @Override + public T next() { + return (T) defaultList[next++]; + } + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/factorymethod/FactoryMethod.java b/src/com/anxpp/designpattern/factorymethod/FactoryMethod.java index 6b48075..01337b1 100644 --- a/src/com/anxpp/designpattern/factorymethod/FactoryMethod.java +++ b/src/com/anxpp/designpattern/factorymethod/FactoryMethod.java @@ -1,44 +1,51 @@ -package com.anxpp.designpattern.factorymethod; -//工厂方法模式 -public class FactoryMethod { - public static void main(String args[]){ - IFactory bigfactory; - bigfactory = new SmallFactory(); - bigfactory.produce().run(); - bigfactory = new BigFactory(); - bigfactory.produce().run(); - } -} -//抽象产品 -interface MeizuPhone{ - void run(); -} -//具体产品*2 -class PRO5 implements MeizuPhone{ - @Override - public void run() { - System.out.println("我是一台PRO5"); - } -} -class MX5 implements MeizuPhone{ - @Override - public void run() { - System.out.println("我是一台MX5"); - } -} -interface IFactory{ - MeizuPhone produce(); -} -//工厂*2 -class BigFactory implements IFactory{ - @Override - public MeizuPhone produce() { - return new PRO5(); - } -} -class SmallFactory implements IFactory{ - @Override - public MeizuPhone produce() { - return new MX5(); - } +package com.anxpp.designpattern.factorymethod; + +//抽象产品 +interface MeizuPhone { + void run(); +} + +interface IFactory { + MeizuPhone produce(); +} + +//工厂方法模式 +public class FactoryMethod { + public static void main(String[] args) { + IFactory bigfactory; + bigfactory = new SmallFactory(); + bigfactory.produce().run(); + bigfactory = new BigFactory(); + bigfactory.produce().run(); + } +} + +//具体产品*2 +class PRO5 implements MeizuPhone { + @Override + public void run() { + System.out.println("我是一台PRO5"); + } +} + +class MX5 implements MeizuPhone { + @Override + public void run() { + System.out.println("我是一台MX5"); + } +} + +//工厂*2 +class BigFactory implements IFactory { + @Override + public MeizuPhone produce() { + return new PRO5(); + } +} + +class SmallFactory implements IFactory { + @Override + public MeizuPhone produce() { + return new MX5(); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/factorymethod/Iterator.java b/src/com/anxpp/designpattern/factorymethod/Iterator.java index eb97dc3..ca3523e 100644 --- a/src/com/anxpp/designpattern/factorymethod/Iterator.java +++ b/src/com/anxpp/designpattern/factorymethod/Iterator.java @@ -1,6 +1,8 @@ -package com.anxpp.designpattern.factorymethod; -//只是需要遍历一堆数据,那么只需要2个方法就可以了 -public interface Iterator {
- boolean hasNext(); //是否还有下一个元素
- T next(); //得到下一个元素
-}
+package com.anxpp.designpattern.factorymethod;
+
+//只是需要遍历一堆数据,那么只需要2个方法就可以了
+public interface Iterator {
+ boolean hasNext(); //是否还有下一个元素
+
+ T next(); //得到下一个元素
+}
diff --git a/src/com/anxpp/designpattern/factorymethod/LinkList.java b/src/com/anxpp/designpattern/factorymethod/LinkList.java
index 3ab4779..3406b98 100644
--- a/src/com/anxpp/designpattern/factorymethod/LinkList.java
+++ b/src/com/anxpp/designpattern/factorymethod/LinkList.java
@@ -1,50 +1,59 @@
-package com.anxpp.designpattern.factorymethod;
-//方便演示而实现的简陋的单向链表list
-public class LinkList implements List{
- private int size; //存放的元素个数,会默认初始化为0
- private Node first; //首节点,默认初始化为null
- @Override
- public Iterator iterator() {
- return new MyIterator();
- }
- @Override
- public boolean add(T t) {
- if(size==0){
- first = new Node(t,null);
- size++;
- return true;
- }
- Node node = first;
- while(node.next!=null)
- node = node.next;
- node.next = new Node(t,null);
- size++;
- return true;
- }
- //链表节点
- private static class Node{
- T data;
- Node next;
- Node(T data,Node next){
- this.data = data;
- this.next = next;
- }
- }
- //遍历器
- private class MyIterator implements Iterator{
- private Node next; //下一个节点
- MyIterator(){
- next = first;
- }
- @Override
- public boolean hasNext() {
- return next != null;
- }
- @Override
- public T next() {
- T data = next.data;
- next = next.next;
- return data;
- }
- }
+package com.anxpp.designpattern.factorymethod;
+
+//方便演示而实现的简陋的单向链表list
+public class LinkList implements List {
+ private int size; //存放的元素个数,会默认初始化为0
+ private Node first; //首节点,默认初始化为null
+
+ @Override
+ public Iterator iterator() {
+ return new MyIterator();
+ }
+
+ @Override
+ public boolean add(T t) {
+ if (size == 0) {
+ first = new Node(t, null);
+ size++;
+ return true;
+ }
+ Node node = first;
+ while (node.next != null)
+ node = node.next;
+ node.next = new Node(t, null);
+ size++;
+ return true;
+ }
+
+ //链表节点
+ private static class Node {
+ T data;
+ Node next;
+
+ Node(T data, Node next) {
+ this.data = data;
+ this.next = next;
+ }
+ }
+
+ //遍历器
+ private class MyIterator implements Iterator {
+ private Node next; //下一个节点
+
+ MyIterator() {
+ next = first;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return next != null;
+ }
+
+ @Override
+ public T next() {
+ T data = next.data;
+ next = next.next;
+ return data;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/factorymethod/List.java b/src/com/anxpp/designpattern/factorymethod/List.java
index e499393..54cf253 100644
--- a/src/com/anxpp/designpattern/factorymethod/List.java
+++ b/src/com/anxpp/designpattern/factorymethod/List.java
@@ -1,7 +1,8 @@
-package com.anxpp.designpattern.factorymethod;
-
-//便于介绍,不做多的操作
-public interface List {
- Iterator iterator(); //返回一个遍历器
- boolean add(T t); //添加元素到列表
-}
+package com.anxpp.designpattern.factorymethod;
+
+//便于介绍,不做多的操作
+public interface List {
+ Iterator iterator(); //返回一个遍历器
+
+ boolean add(T t); //添加元素到列表
+}
diff --git a/src/com/anxpp/designpattern/factorymethod/TestUse.java b/src/com/anxpp/designpattern/factorymethod/TestUse.java
index b93c696..d2f19e3 100644
--- a/src/com/anxpp/designpattern/factorymethod/TestUse.java
+++ b/src/com/anxpp/designpattern/factorymethod/TestUse.java
@@ -1,22 +1,23 @@
-package com.anxpp.designpattern.factorymethod;
-public class TestUse {
- public static void main(String args[]){
- //分别定义两种结构
- List array = new ArrayList();
- List link = new LinkList();
- //添加数据
- for(int i = 1;i < 8; i++){ - array.add(i); - link.add(i); - } - //获得迭代器 - Iterator ai = array.iterator();
- Iterator li = link.iterator();
- //遍历并输出
- while(ai.hasNext())
- System.out.print(ai.next());
- System.out.println();
- while(li.hasNext())
- System.out.print(li.next());
- }
+package com.anxpp.designpattern.factorymethod;
+
+public class TestUse {
+ public static void main(String[] args) {
+ //分别定义两种结构
+ List array = new ArrayList();
+ List link = new LinkList();
+ //添加数据
+ for (int i = 1; i < 8; i++) { + array.add(i); + link.add(i); + } + //获得迭代器 + Iterator ai = array.iterator();
+ Iterator li = link.iterator();
+ //遍历并输出
+ while (ai.hasNext())
+ System.out.print(ai.next());
+ System.out.println();
+ while (li.hasNext())
+ System.out.print(li.next());
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/flyweight/IWeather.java b/src/com/anxpp/designpattern/flyweight/IWeather.java
index ee0d038..cae79ef 100644
--- a/src/com/anxpp/designpattern/flyweight/IWeather.java
+++ b/src/com/anxpp/designpattern/flyweight/IWeather.java
@@ -1,5 +1,6 @@
-package com.anxpp.designpattern.flyweight;
-//享元接口
-public interface IWeather {
- void printWeather();
+package com.anxpp.designpattern.flyweight;
+
+//享元接口
+public interface IWeather {
+ void printWeather();
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/flyweight/SimpleFlyweight.java b/src/com/anxpp/designpattern/flyweight/SimpleFlyweight.java
index 264e1f9..d19a567 100644
--- a/src/com/anxpp/designpattern/flyweight/SimpleFlyweight.java
+++ b/src/com/anxpp/designpattern/flyweight/SimpleFlyweight.java
@@ -1,48 +1,57 @@
-package com.anxpp.designpattern.flyweight;
-import java.util.HashMap;
-//简单的享元模式
-public class SimpleFlyweight {
- public static void main(String args[]){
- FlyweightFactory factory = new FlyweightFactory();
- IFlyweight flyweight1,flyweight2,flyweight3,flyweight4;
- flyweight1 = factory.getFlyweight("value1");
- flyweight2 = factory.getFlyweight("value1");
- flyweight3 = factory.getFlyweight("value1");
- flyweight4 = factory.getFlyweight("value2");
- flyweight1.doSomething();
- flyweight2.doSomething();
- flyweight3.doSomething();
- flyweight4.doSomething();
- System.out.println(factory.size());
- }
-}
-//享元接口
-interface IFlyweight{
- void doSomething();
-}
-//具体享元
-class Flyweight implements IFlyweight{
- private String value;
- public Flyweight(String value){
- this.value = value;
- }
- @Override
- public void doSomething() {
- System.out.println(value);
- }
-}
-//享元工厂
-class FlyweightFactory{
- HashMap flyweights = new HashMap();
- IFlyweight getFlyweight(String value){
- IFlyweight flyweight = flyweights.get(value);
- if(flyweight == null){
- flyweight = new Flyweight(value);
- flyweights.put(value, flyweight);
- }
- return flyweight;
- }
- public int size(){
- return flyweights.size();
- }
+package com.anxpp.designpattern.flyweight;
+
+import java.util.HashMap;
+
+//享元接口
+interface IFlyweight {
+ void doSomething();
+}
+
+//简单的享元模式
+public class SimpleFlyweight {
+ public static void main(String[] args) {
+ FlyweightFactory factory = new FlyweightFactory();
+ IFlyweight flyweight1, flyweight2, flyweight3, flyweight4;
+ flyweight1 = factory.getFlyweight("value1");
+ flyweight2 = factory.getFlyweight("value1");
+ flyweight3 = factory.getFlyweight("value1");
+ flyweight4 = factory.getFlyweight("value2");
+ flyweight1.doSomething();
+ flyweight2.doSomething();
+ flyweight3.doSomething();
+ flyweight4.doSomething();
+ System.out.println(factory.size());
+ }
+}
+
+//具体享元
+class Flyweight implements IFlyweight {
+ private String value;
+
+ public Flyweight(String value) {
+ this.value = value;
+ }
+
+ @Override
+ public void doSomething() {
+ System.out.println(value);
+ }
+}
+
+//享元工厂
+class FlyweightFactory {
+ HashMap flyweights = new HashMap();
+
+ IFlyweight getFlyweight(String value) {
+ IFlyweight flyweight = flyweights.get(value);
+ if (flyweight == null) {
+ flyweight = new Flyweight(value);
+ flyweights.put(value, flyweight);
+ }
+ return flyweight;
+ }
+
+ public int size() {
+ return flyweights.size();
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/flyweight/TestUse.java b/src/com/anxpp/designpattern/flyweight/TestUse.java
index 2c82b08..101ca98 100644
--- a/src/com/anxpp/designpattern/flyweight/TestUse.java
+++ b/src/com/anxpp/designpattern/flyweight/TestUse.java
@@ -1,24 +1,25 @@
-package com.anxpp.designpattern.flyweight;
-public class TestUse {
- public static void main(String args[]){
- WeatherFactory factory = new WeatherFactory();
- IWeather weather1,weather2,weather3,weather4,weather5,weather6,weather7,weather8;
- weather1 = factory.getFlyWeight("多云",15);
- weather2 = factory.getFlyWeight("晴",23);
- weather3 = factory.getFlyWeight("多云",16);
- weather4 = factory.getFlyWeight("阴",10);
- weather5 = factory.getFlyWeight("多云",15);
- weather6 = factory.getFlyWeight("多云",15);
- weather7 = factory.getFlyWeight("多云",15);
- weather8 = factory.getFlyWeight("多云",15);
- weather1.printWeather();
- weather2.printWeather();
- weather3.printWeather();
- weather4.printWeather();
- weather5.printWeather();
- weather6.printWeather();
- weather7.printWeather();
- weather8.printWeather();
- System.out.println("实际对象个数" + factory.getFlyweightSize());
- }
+package com.anxpp.designpattern.flyweight;
+
+public class TestUse {
+ public static void main(String[] args) {
+ WeatherFactory factory = new WeatherFactory();
+ IWeather weather1, weather2, weather3, weather4, weather5, weather6, weather7, weather8;
+ weather1 = factory.getFlyWeight("多云", 15);
+ weather2 = factory.getFlyWeight("晴", 23);
+ weather3 = factory.getFlyWeight("多云", 16);
+ weather4 = factory.getFlyWeight("阴", 10);
+ weather5 = factory.getFlyWeight("多云", 15);
+ weather6 = factory.getFlyWeight("多云", 15);
+ weather7 = factory.getFlyWeight("多云", 15);
+ weather8 = factory.getFlyWeight("多云", 15);
+ weather1.printWeather();
+ weather2.printWeather();
+ weather3.printWeather();
+ weather4.printWeather();
+ weather5.printWeather();
+ weather6.printWeather();
+ weather7.printWeather();
+ weather8.printWeather();
+ System.out.println("实际对象个数" + factory.getFlyweightSize());
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/flyweight/Weather.java b/src/com/anxpp/designpattern/flyweight/Weather.java
index 11121ff..f671f3a 100644
--- a/src/com/anxpp/designpattern/flyweight/Weather.java
+++ b/src/com/anxpp/designpattern/flyweight/Weather.java
@@ -1,24 +1,29 @@
-package com.anxpp.designpattern.flyweight;
-//具体享元
-public class Weather implements IWeather{
- private String weather;
- private Integer temperature;
- public Weather(String weather,int temperature){
- this.weather = weather;
- this.temperature = temperature;
- }
- @Override
- public void printWeather() {
- System.out.print("天气:" + weather);
- System.out.println(" 温度:" + temperature);
- }
- @Override
- public boolean equals(Object obj) {
- Weather weather = (Weather)obj;
- return weather.weather.equals(this.weather)&&weather.temperature==temperature;
- }
- @Override
- public int hashCode() {
- return (weather.hashCode()+temperature.hashCode())/2;
- }
+package com.anxpp.designpattern.flyweight;
+
+//具体享元
+public class Weather implements IWeather {
+ private String weather;
+ private Integer temperature;
+
+ public Weather(String weather, int temperature) {
+ this.weather = weather;
+ this.temperature = temperature;
+ }
+
+ @Override
+ public void printWeather() {
+ System.out.print("天气:" + weather);
+ System.out.println(" 温度:" + temperature);
+ }
+
+ @Override
+ public boolean equals(Object obj) {
+ Weather weather = (Weather) obj;
+ return weather.weather.equals(this.weather) && weather.temperature == temperature;
+ }
+
+ @Override
+ public int hashCode() {
+ return (weather.hashCode() + temperature.hashCode()) / 2;
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/flyweight/WeatherFactory.java b/src/com/anxpp/designpattern/flyweight/WeatherFactory.java
index a0f4da0..4888019 100644
--- a/src/com/anxpp/designpattern/flyweight/WeatherFactory.java
+++ b/src/com/anxpp/designpattern/flyweight/WeatherFactory.java
@@ -1,23 +1,26 @@
-package com.anxpp.designpattern.flyweight;
-
-import java.util.HashMap;
-//享元工厂
-public class WeatherFactory {
- private HashMap weathers;
- public WeatherFactory(){
- weathers = new HashMap();
- }
- public IWeather getFlyWeight(String weather,int temperature){
- Weather objectWeather = new Weather(weather, temperature);
- IWeather flyweight = weathers.get(objectWeather);
- if(flyweight == null){
- flyweight = objectWeather;
- weathers.put(objectWeather, flyweight);
- }
- else objectWeather = null;//方便gc回收
- return flyweight;
- }
- public int getFlyweightSize(){
- return weathers.size();
- }
+package com.anxpp.designpattern.flyweight;
+
+import java.util.HashMap;
+
+//享元工厂
+public class WeatherFactory {
+ private HashMap weathers;
+
+ public WeatherFactory() {
+ weathers = new HashMap();
+ }
+
+ public IWeather getFlyWeight(String weather, int temperature) {
+ Weather objectWeather = new Weather(weather, temperature);
+ IWeather flyweight = weathers.get(objectWeather);
+ if (flyweight == null) {
+ flyweight = objectWeather;
+ weathers.put(objectWeather, flyweight);
+ } else objectWeather = null;//方便gc回收
+ return flyweight;
+ }
+
+ public int getFlyweightSize() {
+ return weathers.size();
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/iterator/MyArrayList.java b/src/com/anxpp/designpattern/iterator/MyArrayList.java
index ff22ef3..215b126 100644
--- a/src/com/anxpp/designpattern/iterator/MyArrayList.java
+++ b/src/com/anxpp/designpattern/iterator/MyArrayList.java
@@ -1,103 +1,116 @@
-package com.anxpp.designpattern.iterator;
-
-import java.util.Arrays;
-
-//方便演示而实现的简陋的数组list
-public class MyArrayList implements MyList{
- private int size; //存放的元素个数,会默认初始化为0
- private Object[] defaultList; //使用数组存放元素
- private static final int defaultLength = 10;//默认长度
- public MyArrayList(){ //默认构造函数
- defaultList = new Object[defaultLength];
- }
- @Override
- public MyIterator iterator() {
- return new Iterator();
- }
- //大小自动增长
- private void ensureCapacity(int capacity){
- int nowLength = defaultList.length;
- if(capacity>= nowLength){
- nowLength = nowLength + (nowLength>>1);
- if(nowLength<0)//溢出 - nowLength = Integer.MAX_VALUE; - defaultList = Arrays.copyOf(defaultList, nowLength); - } - } - //添加元素 - @Override - public boolean add(T t) { - ensureCapacity(size+1); - defaultList[size++] = t; - return true; - } - //获取元素 - @SuppressWarnings("unchecked") - @Override - public T get(int index) { - if(index<0 || index>=size) return null;
- return (T) defaultList[index];
- }
- @Override
- public T remove() {
- return remove(size-1);
- }
- @SuppressWarnings("unchecked")
- @Override
- public T remove(int index) {
- if(index<0||index>=size) return null;
- T element = (T) defaultList[index];
- if(index != size-1)
- System.arraycopy(defaultList, index+1, defaultList, index,size-index-1);
- size--;
- return element;
- }
- @Override
- public boolean remove(T element) {
- if(element==null){
- for(int i = 0 ; i=size) return false;
- defaultList[index] = element;
- return true;
- }
- @Override
- public int size() {
- return size;
- }
- //迭代器
- private class Iterator implements MyIterator{
- private int next;
- @Override
- public boolean hasNext() {
- return next implements MyList {
+ private static final int defaultLength = 10;//默认长度
+ private int size; //存放的元素个数,会默认初始化为0
+ private Object[] defaultList; //使用数组存放元素
+
+ public MyArrayList() { //默认构造函数
+ defaultList = new Object[defaultLength];
+ }
+
+ @Override
+ public MyIterator iterator() {
+ return new Iterator();
+ }
+
+ //大小自动增长
+ private void ensureCapacity(int capacity) {
+ int nowLength = defaultList.length;
+ if (capacity>= nowLength) {
+ nowLength = nowLength + (nowLength>> 1);
+ if (nowLength < 0)//溢出 + nowLength = Integer.MAX_VALUE; + defaultList = Arrays.copyOf(defaultList, nowLength); + } + } + + //添加元素 + @Override + public boolean add(T t) { + ensureCapacity(size + 1); + defaultList[size++] = t; + return true; + } + + //获取元素 + @SuppressWarnings("unchecked") + @Override + public T get(int index) { + if (index < 0 || index>= size) return null;
+ return (T) defaultList[index];
+ }
+
+ @Override
+ public T remove() {
+ return remove(size - 1);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public T remove(int index) {
+ if (index < 0 || index>= size) return null;
+ T element = (T) defaultList[index];
+ if (index != size - 1)
+ System.arraycopy(defaultList, index + 1, defaultList, index, size - index - 1);
+ size--;
+ return element;
+ }
+
+ @Override
+ public boolean remove(T element) {
+ if (element == null) {
+ for (int i = 0; i < size; i++) + if (defaultList[i] == null) { + System.arraycopy(defaultList, i + 1, defaultList, i, size - i - 1); + size--; + return true; + } + } else { + for (int i = 0; i < size; i++) + if (defaultList[i].equals(element)) { + System.arraycopy(defaultList, i + 1, defaultList, i, size - i - 1); + size--; + return true; + } + } + return false; + } + + @Override + public boolean set(int index, T element) { + if (index < 0 || index>= size) return false;
+ defaultList[index] = element;
+ return true;
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ //迭代器
+ private class Iterator implements MyIterator {
+ private int next;
+
+ @Override
+ public boolean hasNext() {
+ return next < size; + } + + @SuppressWarnings("unchecked") + @Override + public T next() { + return (T) defaultList[next++]; + } + + @Override + public T remove() { + // TODO Auto-generated method stub + return null; + } + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/iterator/MyIterator.java b/src/com/anxpp/designpattern/iterator/MyIterator.java index 2f09bd7..f6bab4c 100644 --- a/src/com/anxpp/designpattern/iterator/MyIterator.java +++ b/src/com/anxpp/designpattern/iterator/MyIterator.java @@ -1,8 +1,10 @@ -package com.anxpp.designpattern.iterator; - -//只是需要遍历一堆数据,那么只需要2个方法就可以了 -public interface MyIterator {
- boolean hasNext(); //是否还有下一个元素
- T next(); //得到下一个元素
- T remove();
+package com.anxpp.designpattern.iterator;
+
+//只是需要遍历一堆数据,那么只需要2个方法就可以了
+public interface MyIterator {
+ boolean hasNext(); //是否还有下一个元素
+
+ T next(); //得到下一个元素
+
+ T remove();
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/iterator/MyLinkedList.java b/src/com/anxpp/designpattern/iterator/MyLinkedList.java
index 117f63b..e035d05 100644
--- a/src/com/anxpp/designpattern/iterator/MyLinkedList.java
+++ b/src/com/anxpp/designpattern/iterator/MyLinkedList.java
@@ -1,128 +1,143 @@
-package com.anxpp.designpattern.iterator;
-//方便演示而实现的简陋的单向链表list
-public class MyLinkedList implements MyList{
- private int size; //存放的元素个数,会默认初始化为0
- private Node first; //首节点,默认初始化为null
- @Override
- public MyIterator iterator() {
- return new Iterator();
- }
- @Override
- public boolean add(T t) {
- if(size==0){
- first = new Node(t,null);
- size++;
- return true;
- }
- Node node = first;
- while(node.next!=null)
- node = node.next;
- node.next = new Node(t,null);
- size++;
- return true;
- }
- @Override
- public T get(int index) {
- Node node = first;
- while(--index>=0)
- node = node.next;
- return node.data;
- }
- @Override
- public T remove() {
- return remove(size-1);
- }
- @Override
- public T remove(int index) {
- if(index<0||index>=size) return null;
- Node node = first;
- while(--index>0)
- node = node.next;
- T element = node.next.data;
- node.next = node.next.next;
- size--;
- return element;
- }
- @Override
- public boolean remove(T element) {
- if(element == null){
- if(first.data==null){
- first = first.next;
- size--;
- return true;
- }
- Node node = first;
- do{
- if(node.next.data==null){
- node.next = node.next.next;
- size--;
- return true;
- }
- node = node.next;
- }
- while(node.next!=null);
- }
- else{
- if(first.data.equals(element)){
- first = first.next;
- size--;
- return true;
- }
- Node node = first;
- do{
- if(node.next.data.equals(element)){
- node.next = node.next.next;
- size--;
- return true;
- }
- node = node.next;
- }
- while(node.next!=null);
- }
- return false;
- }
- @Override
- public boolean set(int index, T element) {
- if(index<0||index>=size) return false;
- Node node = first;
- while(--index>0)
- node = node.next;
- node.data = element;
- return true;
- }
- @Override
- public int size() {
- return size;
- }
- //链表节点
- private static class Node{
- T data;
- Node next;
- Node(T data,Node next){
- this.data = data;
- this.next = next;
- }
- }
- //遍历器
- private class Iterator implements MyIterator{
- private Node next; //下一个节点
- Iterator(){
- next = first;
- }
- @Override
- public boolean hasNext() {
- return next!=null;
- }
- @Override
- public T next() {
- T data = next.data;
- next = next.next;
- return data;
- }
- @Override
- public T remove() {
- // TODO Auto-generated method stub
- return null;
- }
- }
+package com.anxpp.designpattern.iterator;
+
+//方便演示而实现的简陋的单向链表list
+public class MyLinkedList implements MyList {
+ private int size; //存放的元素个数,会默认初始化为0
+ private Node first; //首节点,默认初始化为null
+
+ @Override
+ public MyIterator iterator() {
+ return new Iterator();
+ }
+
+ @Override
+ public boolean add(T t) {
+ if (size == 0) {
+ first = new Node(t, null);
+ size++;
+ return true;
+ }
+ Node node = first;
+ while (node.next != null)
+ node = node.next;
+ node.next = new Node(t, null);
+ size++;
+ return true;
+ }
+
+ @Override
+ public T get(int index) {
+ Node node = first;
+ while (--index>= 0)
+ node = node.next;
+ return node.data;
+ }
+
+ @Override
+ public T remove() {
+ return remove(size - 1);
+ }
+
+ @Override
+ public T remove(int index) {
+ if (index < 0 || index>= size) return null;
+ Node node = first;
+ while (--index> 0)
+ node = node.next;
+ T element = node.next.data;
+ node.next = node.next.next;
+ size--;
+ return element;
+ }
+
+ @Override
+ public boolean remove(T element) {
+ if (element == null) {
+ if (first.data == null) {
+ first = first.next;
+ size--;
+ return true;
+ }
+ Node node = first;
+ do {
+ if (node.next.data == null) {
+ node.next = node.next.next;
+ size--;
+ return true;
+ }
+ node = node.next;
+ }
+ while (node.next != null);
+ } else {
+ if (first.data.equals(element)) {
+ first = first.next;
+ size--;
+ return true;
+ }
+ Node node = first;
+ do {
+ if (node.next.data.equals(element)) {
+ node.next = node.next.next;
+ size--;
+ return true;
+ }
+ node = node.next;
+ }
+ while (node.next != null);
+ }
+ return false;
+ }
+
+ @Override
+ public boolean set(int index, T element) {
+ if (index < 0 || index>= size) return false;
+ Node node = first;
+ while (--index> 0)
+ node = node.next;
+ node.data = element;
+ return true;
+ }
+
+ @Override
+ public int size() {
+ return size;
+ }
+
+ //链表节点
+ private static class Node {
+ T data;
+ Node next;
+
+ Node(T data, Node next) {
+ this.data = data;
+ this.next = next;
+ }
+ }
+
+ //遍历器
+ private class Iterator implements MyIterator {
+ private Node next; //下一个节点
+
+ Iterator() {
+ next = first;
+ }
+
+ @Override
+ public boolean hasNext() {
+ return next != null;
+ }
+
+ @Override
+ public T next() {
+ T data = next.data;
+ next = next.next;
+ return data;
+ }
+
+ @Override
+ public T remove() {
+ // TODO Auto-generated method stub
+ return null;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/iterator/MyList.java b/src/com/anxpp/designpattern/iterator/MyList.java
index cb5f802..e8c4d76 100644
--- a/src/com/anxpp/designpattern/iterator/MyList.java
+++ b/src/com/anxpp/designpattern/iterator/MyList.java
@@ -1,12 +1,20 @@
-package com.anxpp.designpattern.iterator;
-//集合接口
-public interface MyList {
- MyIterator iterator(); //返回一个遍历器
- boolean add(T t); //添加元素到列表
- T get(int index); //得到元素
- T remove(); //删除最后一个元素
- boolean remove(T element); //删除指定元素
- T remove(int index); //删除指定位置元素
- boolean set(int index,T element); //修改指定位置值
- int size();
+package com.anxpp.designpattern.iterator;
+
+//集合接口
+public interface MyList {
+ MyIterator iterator(); //返回一个遍历器
+
+ boolean add(T t); //添加元素到列表
+
+ T get(int index); //得到元素
+
+ T remove(); //删除最后一个元素
+
+ boolean remove(T element); //删除指定元素
+
+ T remove(int index); //删除指定位置元素
+
+ boolean set(int index, T element); //修改指定位置值
+
+ int size();
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/iterator/TestUse.java b/src/com/anxpp/designpattern/iterator/TestUse.java
index 29554e8..797c5fa 100644
--- a/src/com/anxpp/designpattern/iterator/TestUse.java
+++ b/src/com/anxpp/designpattern/iterator/TestUse.java
@@ -1,38 +1,39 @@
-package com.anxpp.designpattern.iterator;
-public class TestUse {
- public static void main(String args[]){
- //分别定义两种结构
- MyList array = new MyArrayList();
- MyList link = new MyLinkedList();
- //添加数据
- for(int i = 1;i < 15; i++){ - array.add(i+""); - link.add(i+""); - } - //数组操作 - System.out.println(array.remove()); - System.out.println(array.get(5)); - System.out.println(array.remove(5)); - System.out.println(array.get(5)); - System.out.println(array.remove("7")); - System.out.println(array.set(0, "00")); - //使用迭代器 - MyIterator ai = array.iterator();
- while(ai.hasNext())
- System.out.print(ai.next()+" ");
- System.out.println();
- System.out.println(link.remove());
- System.out.println(link.get(5));
- System.out.println(link.remove(5));
- System.out.println(link.get(5));
- System.out.println(link.remove("7"));
- System.out.println(link.set(0, "00"));
- //使用迭代器
- MyIterator li = link.iterator();
- while(li.hasNext())
- System.out.print(li.next()+" ");
- System.out.println();
- System.out.println("a size=" + array.size());
- System.out.println("l size=" + link.size());
- }
+package com.anxpp.designpattern.iterator;
+
+public class TestUse {
+ public static void main(String[] args) {
+ //分别定义两种结构
+ MyList array = new MyArrayList();
+ MyList link = new MyLinkedList();
+ //添加数据
+ for (int i = 1; i < 15; i++) { + array.add(i + ""); + link.add(i + ""); + } + //数组操作 + System.out.println(array.remove()); + System.out.println(array.get(5)); + System.out.println(array.remove(5)); + System.out.println(array.get(5)); + System.out.println(array.remove("7")); + System.out.println(array.set(0, "00")); + //使用迭代器 + MyIterator ai = array.iterator();
+ while (ai.hasNext())
+ System.out.print(ai.next() + " ");
+ System.out.println();
+ System.out.println(link.remove());
+ System.out.println(link.get(5));
+ System.out.println(link.remove(5));
+ System.out.println(link.get(5));
+ System.out.println(link.remove("7"));
+ System.out.println(link.set(0, "00"));
+ //使用迭代器
+ MyIterator li = link.iterator();
+ while (li.hasNext())
+ System.out.print(li.next() + " ");
+ System.out.println();
+ System.out.println("a size=" + array.size());
+ System.out.println("l size=" + link.size());
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/mediator/IPersistent.java b/src/com/anxpp/designpattern/mediator/IPersistent.java
index d316cf5..89de5ca 100644
--- a/src/com/anxpp/designpattern/mediator/IPersistent.java
+++ b/src/com/anxpp/designpattern/mediator/IPersistent.java
@@ -1,7 +1,10 @@
-package com.anxpp.designpattern.mediator;
-//同事(接口)
-public interface IPersistent {
- void getData(Object data);
- void getData(Object data,Midiator midiator);
- void saveData();
+package com.anxpp.designpattern.mediator;
+
+//同事(接口)
+public interface IPersistent {
+ void getData(Object data);
+
+ void getData(Object data, Midiator midiator);
+
+ void saveData();
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/mediator/Midiator.java b/src/com/anxpp/designpattern/mediator/Midiator.java
index 0f03c50..920b74a 100644
--- a/src/com/anxpp/designpattern/mediator/Midiator.java
+++ b/src/com/anxpp/designpattern/mediator/Midiator.java
@@ -1,20 +1,24 @@
-package com.anxpp.designpattern.mediator;
-//具体中介者
-public class Midiator {
- PersistentDB persistentDB;
- PersistentFile persistentFile;
- public Midiator setPersistentDB(PersistentDB persistentDB) {
- this.persistentDB = persistentDB;
- return this;
- }
- public Midiator setPersistentFile(PersistentFile persistentFile) {
- this.persistentFile = persistentFile;
- return this;
- }
- public void notifyOther(IPersistent persistent,Object data){
- if(persistent instanceof PersistentDB)
- persistentFile.getData(data);
- if(persistent instanceof PersistentFile)
- persistentDB.getData(data);
- }
-}
+package com.anxpp.designpattern.mediator;
+
+//具体中介者
+public class Midiator {
+ PersistentDB persistentDB;
+ PersistentFile persistentFile;
+
+ public Midiator setPersistentDB(PersistentDB persistentDB) {
+ this.persistentDB = persistentDB;
+ return this;
+ }
+
+ public Midiator setPersistentFile(PersistentFile persistentFile) {
+ this.persistentFile = persistentFile;
+ return this;
+ }
+
+ public void notifyOther(IPersistent persistent, Object data) {
+ if (persistent instanceof PersistentDB)
+ persistentFile.getData(data);
+ if (persistent instanceof PersistentFile)
+ persistentDB.getData(data);
+ }
+}
diff --git a/src/com/anxpp/designpattern/mediator/PersistentDB.java b/src/com/anxpp/designpattern/mediator/PersistentDB.java
index 9267ee8..c4b7d61 100644
--- a/src/com/anxpp/designpattern/mediator/PersistentDB.java
+++ b/src/com/anxpp/designpattern/mediator/PersistentDB.java
@@ -1,19 +1,23 @@
-package com.anxpp.designpattern.mediator;
-//具体同事
-public class PersistentDB implements IPersistent{
- private Object data;
- @Override
- public void getData(Object data, Midiator midiator) {
- getData(data);
- midiator.notifyOther(this, data);
- }
- @Override
- public void saveData() {
- System.out.println(data + " 已保存到数据库");
- }
- @Override
- public void getData(Object data) {
- this.data = data;
- saveData();
- }
-}
+package com.anxpp.designpattern.mediator;
+
+//具体同事
+public class PersistentDB implements IPersistent {
+ private Object data;
+
+ @Override
+ public void getData(Object data, Midiator midiator) {
+ getData(data);
+ midiator.notifyOther(this, data);
+ }
+
+ @Override
+ public void saveData() {
+ System.out.println(data + " 已保存到数据库");
+ }
+
+ @Override
+ public void getData(Object data) {
+ this.data = data;
+ saveData();
+ }
+}
diff --git a/src/com/anxpp/designpattern/mediator/PersistentFile.java b/src/com/anxpp/designpattern/mediator/PersistentFile.java
index 4d8100e..298aed4 100644
--- a/src/com/anxpp/designpattern/mediator/PersistentFile.java
+++ b/src/com/anxpp/designpattern/mediator/PersistentFile.java
@@ -1,19 +1,23 @@
-package com.anxpp.designpattern.mediator;
-//具体同事
-public class PersistentFile implements IPersistent{
- private Object data;
- @Override
- public void getData(Object data, Midiator midiator) {
- getData(data);
- midiator.notifyOther(this, data);
- }
- @Override
- public void saveData() {
- System.out.println(data + " 已保存到文件");
- }
- @Override
- public void getData(Object data) {
- this.data = data;
- saveData();
- }
-}
+package com.anxpp.designpattern.mediator;
+
+//具体同事
+public class PersistentFile implements IPersistent {
+ private Object data;
+
+ @Override
+ public void getData(Object data, Midiator midiator) {
+ getData(data);
+ midiator.notifyOther(this, data);
+ }
+
+ @Override
+ public void saveData() {
+ System.out.println(data + " 已保存到文件");
+ }
+
+ @Override
+ public void getData(Object data) {
+ this.data = data;
+ saveData();
+ }
+}
diff --git a/src/com/anxpp/designpattern/mediator/TestUse.java b/src/com/anxpp/designpattern/mediator/TestUse.java
index 72384d6..16e5344 100644
--- a/src/com/anxpp/designpattern/mediator/TestUse.java
+++ b/src/com/anxpp/designpattern/mediator/TestUse.java
@@ -1,12 +1,13 @@
-package com.anxpp.designpattern.mediator;
-public class TestUse {
- public static void main(String args[]){
- Object data = "数据";
- PersistentDB persistentDB = new PersistentDB();
- PersistentFile persistentFile = new PersistentFile();
- Midiator midiator = new Midiator();
- midiator.setPersistentDB(persistentDB).setPersistentFile(persistentFile);
- persistentDB.getData(data, midiator);
- persistentFile.getData(data, midiator);
- }
+package com.anxpp.designpattern.mediator;
+
+public class TestUse {
+ public static void main(String[] args) {
+ Object data = "数据";
+ PersistentDB persistentDB = new PersistentDB();
+ PersistentFile persistentFile = new PersistentFile();
+ Midiator midiator = new Midiator();
+ midiator.setPersistentDB(persistentDB).setPersistentFile(persistentFile);
+ persistentDB.getData(data, midiator);
+ persistentFile.getData(data, midiator);
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/memento/BlackMemento.java b/src/com/anxpp/designpattern/memento/BlackMemento.java
index 07738d5..9843cfd 100644
--- a/src/com/anxpp/designpattern/memento/BlackMemento.java
+++ b/src/com/anxpp/designpattern/memento/BlackMemento.java
@@ -1,49 +1,63 @@
-package com.anxpp.designpattern.memento;
-//备忘录模式
-public class BlackMemento {
- public static void main(String[] args) {
- BlankOriginator originator = new BlankOriginator(); //发起人
- BlackCaretaker caretaker = new BlackCaretaker(); //负责人
- originator.setState("stateOne"); //设置状态
- caretaker.saveMemento(originator.createMemento()); //保存信息
- originator.setState("stateTwo"); //修改状态
- originator.recoverMemento(caretaker.recoverMemento());//恢复状态
- }
-}
-interface MementoIF {}
-//发起人
-class BlankOriginator {
- private String state;
- public String getState() {
- return state;
- }
- public void setState(String state) {
- this.state = state;
- }
- public MementoIF createMemento(){
- return new Memento(state);
- }
- public void recoverMemento(MementoIF memento){
- this.setState(((Memento)memento).getState());
- }
- //以内部类实现备忘录角色
- private class Memento implements MementoIF{
- private String state;
- private Memento(String state){
- this.state = state;
- }
- private String getState() {
- return state;
- }
- }
-}
-//负责人
-class BlackCaretaker {
- private MementoIF memento;
- public MementoIF recoverMemento(){
- return memento;
- }
- public void saveMemento(MementoIF memento){
- this.memento = memento;
- }
+package com.anxpp.designpattern.memento;
+
+interface MementoIF {
+}
+
+//备忘录模式
+public class BlackMemento {
+ public static void main(String[] args) {
+ BlankOriginator originator = new BlankOriginator(); //发起人
+ BlackCaretaker caretaker = new BlackCaretaker(); //负责人
+ originator.setState("stateOne"); //设置状态
+ caretaker.saveMemento(originator.createMemento()); //保存信息
+ originator.setState("stateTwo"); //修改状态
+ originator.recoverMemento(caretaker.recoverMemento());//恢复状态
+ }
+}
+
+//发起人
+class BlankOriginator {
+ private String state;
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+
+ public MementoIF createMemento() {
+ return new Memento(state);
+ }
+
+ public void recoverMemento(MementoIF memento) {
+ this.setState(((Memento) memento).getState());
+ }
+
+ //以内部类实现备忘录角色
+ private class Memento implements MementoIF {
+ private String state;
+
+ private Memento(String state) {
+ this.state = state;
+ }
+
+ private String getState() {
+ return state;
+ }
+ }
+}
+
+//负责人
+class BlackCaretaker {
+ private MementoIF memento;
+
+ public MementoIF recoverMemento() {
+ return memento;
+ }
+
+ public void saveMemento(MementoIF memento) {
+ this.memento = memento;
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/memento/MementoSelf.java b/src/com/anxpp/designpattern/memento/MementoSelf.java
index 807b09f..ccfe1a5 100644
--- a/src/com/anxpp/designpattern/memento/MementoSelf.java
+++ b/src/com/anxpp/designpattern/memento/MementoSelf.java
@@ -1,35 +1,44 @@
-package com.anxpp.designpattern.memento;
-//自述历史备忘录
-public class MementoSelf {
- public static void main(String[] args) {
- OriginatorCaretaker originatorCaretaker = new OriginatorCaretaker();//发起人,同时为负责人
- originatorCaretaker.changeState("stateOne"); //改变状态
- IMemento memento = originatorCaretaker.createMemento(); //保存状态
- originatorCaretaker.changeState("stateTwo"); //改变状态
- originatorCaretaker.recoverMemento(memento); //恢复状态
- }
-}
-interface IMemento {}
-//发起人兼负责人
-class OriginatorCaretaker {
- public String state;
- public void changeState(String state){
- this.state = state;
- }
- //创造快照
- public Memento createMemento(){
- return new Memento(this);
- }
- //恢复状态
- public void recoverMemento(IMemento memento){
- Memento m = (Memento)memento;
- changeState(m.state);
- }
- //内部类实现备忘录
- private class Memento implements IMemento{
- private String state;
- private Memento(OriginatorCaretaker originatorCaretaker){
- this.state = originatorCaretaker.state;
- }
- }
+package com.anxpp.designpattern.memento;
+
+interface IMemento {
+}
+
+//自述历史备忘录
+public class MementoSelf {
+ public static void main(String[] args) {
+ OriginatorCaretaker originatorCaretaker = new OriginatorCaretaker();//发起人,同时为负责人
+ originatorCaretaker.changeState("stateOne"); //改变状态
+ IMemento memento = originatorCaretaker.createMemento(); //保存状态
+ originatorCaretaker.changeState("stateTwo"); //改变状态
+ originatorCaretaker.recoverMemento(memento); //恢复状态
+ }
+}
+
+//发起人兼负责人
+class OriginatorCaretaker {
+ public String state;
+
+ public void changeState(String state) {
+ this.state = state;
+ }
+
+ //创造快照
+ public Memento createMemento() {
+ return new Memento(this);
+ }
+
+ //恢复状态
+ public void recoverMemento(IMemento memento) {
+ Memento m = (Memento) memento;
+ changeState(m.state);
+ }
+
+ //内部类实现备忘录
+ private class Memento implements IMemento {
+ private String state;
+
+ private Memento(OriginatorCaretaker originatorCaretaker) {
+ this.state = originatorCaretaker.state;
+ }
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/memento/SimpleMemento.java b/src/com/anxpp/designpattern/memento/SimpleMemento.java
index 599e701..783d501 100644
--- a/src/com/anxpp/designpattern/memento/SimpleMemento.java
+++ b/src/com/anxpp/designpattern/memento/SimpleMemento.java
@@ -1,53 +1,66 @@
-package com.anxpp.designpattern.memento;
-//简单的备忘录模式
-public class SimpleMemento {
- public static void main(String[] args) throws Exception {
- Originator originator = new Originator(); //发起人,要被保存的对象,也是他创建要保存的信息的
- Caretaker caretaker = new Caretaker(); //辅助保存的对象
- originator.setState("stateOne"); //设置状态
- caretaker.saveMemento(originator.createMemento()); //保存状态
- originator.setState("stateTwo"); //修改状态
- originator.recoverMemento(caretaker.recoverMemento()); //恢复状态
- }
-}
-//发起人
-class Originator {
- private String state;
- public Memento createMemento(){
- return new Memento(state);
- }
- public void recoverMemento(Memento memento){
- this.state = memento.getState();
- }
- public String getState() {
- return state;
- }
- public void setState(String state) {
- this.state = state;
- }
-}
-//备忘录
-class Memento {
- private String state;
- public Memento(String state){
- this.state = state;
- }
- public String getState() {
- return state;
- }
- public void setState(String state) {
- this.state = state;
- }
-}
-//负责人
-class Caretaker {
- private Memento memento;
- public Memento recoverMemento() throws Exception{
- if(memento==null)
- throw new Exception("没有保存的状态");
- return this.memento;//恢复状态
- }
- public void saveMemento(Memento memento){
- this.memento = memento;//保存状态
- }
+package com.anxpp.designpattern.memento;
+
+//简单的备忘录模式
+public class SimpleMemento {
+ public static void main(String[] args) throws Exception {
+ Originator originator = new Originator(); //发起人,要被保存的对象,也是他创建要保存的信息的
+ Caretaker caretaker = new Caretaker(); //辅助保存的对象
+ originator.setState("stateOne"); //设置状态
+ caretaker.saveMemento(originator.createMemento()); //保存状态
+ originator.setState("stateTwo"); //修改状态
+ originator.recoverMemento(caretaker.recoverMemento()); //恢复状态
+ }
+}
+
+//发起人
+class Originator {
+ private String state;
+
+ public Memento createMemento() {
+ return new Memento(state);
+ }
+
+ public void recoverMemento(Memento memento) {
+ this.state = memento.getState();
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+}
+
+//备忘录
+class Memento {
+ private String state;
+
+ public Memento(String state) {
+ this.state = state;
+ }
+
+ public String getState() {
+ return state;
+ }
+
+ public void setState(String state) {
+ this.state = state;
+ }
+}
+
+//负责人
+class Caretaker {
+ private Memento memento;
+
+ public Memento recoverMemento() throws Exception {
+ if (memento == null)
+ throw new Exception("没有保存的状态");
+ return this.memento;//恢复状态
+ }
+
+ public void saveMemento(Memento memento) {
+ this.memento = memento;//保存状态
+ }
}
\ No newline at end of file
diff --git a/src/com/anxpp/designpattern/memento/textEditor/TextEditor.java b/src/com/anxpp/designpattern/memento/textEditor/TextEditor.java
index 55e894c..364f4fd 100644
--- a/src/com/anxpp/designpattern/memento/textEditor/TextEditor.java
+++ b/src/com/anxpp/designpattern/memento/textEditor/TextEditor.java
@@ -1,107 +1,124 @@
-package com.anxpp.designpattern.memento.textEditor;
-
-import java.util.LinkedList;
-
-//文本编辑器
-public class TextEditor {
- public static void main(String[] args) {
- //使用这个文本编辑器
- MyTextEditor editor = new MyTextEditor("这里是初始文本,可能为文件中读取的值。");
- System.out.println("开始修改文本:");
- editor.append("添加文字1");
- editor.delWords(); //删除最后一个
-// editor.delWords(2); //删除最后2个 这两个方法是没有问题的,这里避免控制台输出太多,取消这两次修改
-// editor.delWords(1,5); //删除前面5个
- System.out.println("开始恢复:");
- for(int i=0;i<10;i++) editor.recoverMemento();//恢复大于实际修改的次数不会出错,只会将文本设为o初始化状态 - System.out.println("开始重做:"); - for(int i=0;i<10;i++) editor.redo(); //重做大于实际恢复的次数不会出错,只会将文本设为最后状态 - System.out.println("再次恢复:"); - for(int i=0;i<10;i++) editor.recoverMemento();//恢复大于实际修改的次数不会出错,只会将文本设为o初始化状态 - System.out.println("再次重做:"); - for(int i=0;i<10;i++) editor.redo(); //重做大于实际恢复的次数不会出错,只会将文本设为最后状态 - System.out.println("再次恢复:"); - for(int i=0;i<10;i++) editor.recoverMemento();//恢复大于实际修改的次数不会出错,只会将文本设为o初始化状态 - editor.append("添加文字2"); - System.out.println("再次重做:"); - for(int i=0;i<10;i++) editor.redo(); //重做大于实际恢复的次数不会出错,只会将文本设为最后状态 - } -} -interface IMemento {} -//发起人兼负责人 -class MyTextEditor { - public StringBuffer text; - private LinkedList mementos; //保存快照
- private LinkedList