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 undos; //保存撤销的操作 - public MyTextEditor(){ - this(""); - } - public MyTextEditor(String defaultStr){ - text = new StringBuffer(defaultStr); - mementos = new LinkedList(); - undos = new LinkedList(); - print(); - } - public void clearHistory(){ - mementos.clear(); - undos.clear(); - } - public void append(String appendStr){ - if(appendStr==null||appendStr.length()==0) return; - createMemento(); - text.append(appendStr); - print(); - undos.clear(); - } - //删除最后一个 - public void delWords(){ - delWords(1); - } - //删除最后n个 - public void delWords(int n){ - if(n<1||n>text.length()) return; - delWords(text.length()-n+1,text.length()); - } - //删除中间start到end的字符,第一个文字为第一个(而不是0) - public void delWords(int start,int end){ - if(start<1 || end>text.length()+1) return; - createMemento(); - text = text.delete(start-1, end); - print(); - } - public void reset(String text){ - this.text = new StringBuffer(text); - } - //新的快照 - public void createMemento(){ - mementos.push(new Memento(this)); - } - //恢复状态 - public boolean recoverMemento(){ - Memento memento = (Memento) mementos.poll(); - if(memento==null) return false; - undos.push(new Memento(this)); - reset(memento.state); - print(); - return true; - } - //redo,redo的操作也可以恢复! - public boolean redo(){ - Memento memento = (Memento) undos.poll(); - if(memento==null) return false; - createMemento(); - reset(memento.state); - print(); - return true; - } - //内部类实现备忘录 - private class Memento implements IMemento{ - private String state; - private Memento(MyTextEditor editor){ - this.state = editor.text.toString(); - } - } - void print(){ - System.out.println("当前文本:" + text); - } +package com.anxpp.designpattern.memento.textEditor; + +import java.util.LinkedList; + +interface IMemento { +} + +//文本编辑器 +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(); //重做大于实际恢复的次数不会出错,只会将文本设为最后状态 + } +} + +//发起人兼负责人 +class MyTextEditor { + public StringBuffer text; + private LinkedList mementos; //保存快照 + private LinkedList undos; //保存撤销的操作 + + public MyTextEditor() { + this(""); + } + + public MyTextEditor(String defaultStr) { + text = new StringBuffer(defaultStr); + mementos = new LinkedList(); + undos = new LinkedList(); + print(); + } + + public void clearHistory() { + mementos.clear(); + undos.clear(); + } + + public void append(String appendStr) { + if (appendStr == null || appendStr.length() == 0) return; + createMemento(); + text.append(appendStr); + print(); + undos.clear(); + } + + //删除最后一个 + public void delWords() { + delWords(1); + } + + //删除最后n个 + public void delWords(int n) { + if (n < 1 || n> text.length()) return; + delWords(text.length() - n + 1, text.length()); + } + + //删除中间start到end的字符,第一个文字为第一个(而不是0) + public void delWords(int start, int end) { + if (start < 1 || end> text.length() + 1) return; + createMemento(); + text = text.delete(start - 1, end); + print(); + } + + public void reset(String text) { + this.text = new StringBuffer(text); + } + + //新的快照 + public void createMemento() { + mementos.push(new Memento(this)); + } + + //恢复状态 + public boolean recoverMemento() { + Memento memento = (Memento) mementos.poll(); + if (memento == null) return false; + undos.push(new Memento(this)); + reset(memento.state); + print(); + return true; + } + + //redo,redo的操作也可以恢复! + public boolean redo() { + Memento memento = (Memento) undos.poll(); + if (memento == null) return false; + createMemento(); + reset(memento.state); + print(); + return true; + } + + void print() { + System.out.println("当前文本:" + text); + } + + //内部类实现备忘录 + private class Memento implements IMemento { + private String state; + + private Memento(MyTextEditor editor) { + this.state = editor.text.toString(); + } + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/prototype/APITestUse.java b/src/com/anxpp/designpattern/prototype/APITestUse.java index 4638af4..086ca04 100644 --- a/src/com/anxpp/designpattern/prototype/APITestUse.java +++ b/src/com/anxpp/designpattern/prototype/APITestUse.java @@ -1,16 +1,19 @@ -package com.anxpp.designpattern.prototype; -//使用 java 自带的支持 -public class APITestUse { - public static void main(String args[]) throws CloneNotSupportedException{ - MyObject myObject = new MyObject(); - myObject.i = 500; - MyObject myObjectClone = (MyObject) myObject.clone(); - System.out.println(myObjectClone.i); - } -} -class MyObject implements Cloneable{ - int i; - public Object clone() throws CloneNotSupportedException{ - return super.clone(); - } +package com.anxpp.designpattern.prototype; + +//使用 java 自带的支持 +public class APITestUse { + public static void main(String[] args) throws CloneNotSupportedException { + MyObject myObject = new MyObject(); + myObject.i = 500; + MyObject myObjectClone = (MyObject) myObject.clone(); + System.out.println(myObjectClone.i); + } +} + +class MyObject implements Cloneable { + int i; + + public Object clone() throws CloneNotSupportedException { + return super.clone(); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/prototype/SerializablePrototype.java b/src/com/anxpp/designpattern/prototype/SerializablePrototype.java index 07dd269..d89a755 100644 --- a/src/com/anxpp/designpattern/prototype/SerializablePrototype.java +++ b/src/com/anxpp/designpattern/prototype/SerializablePrototype.java @@ -1,54 +1,64 @@ -package com.anxpp.designpattern.prototype; -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.ObjectInputStream; -import java.io.ObjectOutputStream; -import java.io.Serializable; -//使用Serializable支持克隆 -public class SerializablePrototype implements Serializable{ - private static final long serialVersionUID = 1L; - private int i; - private transient int notClone;//transient关键字的成员不会被序列化 - public int getI() { - return i; - } - public void setI(int i) { - this.i = i; - } - public int getNotClone() { - return notClone; - } - public void setNotClone(int notClone) { - this.notClone = notClone; - } - public static long getSerialversionuid() { - return serialVersionUID; - } - public void writeToFile(String path) throws Exception{ - FileOutputStream outStream = new FileOutputStream(path); - ObjectOutputStream objectOutputStream = new ObjectOutputStream(outStream); - objectOutputStream.writeObject(this); - outStream.close(); - } - public SerializablePrototype ReadFromFile(String path) throws Exception{ - File file = new File(path); - if(!file.exists()) - file.createNewFile(); - FileInputStream inStream = new FileInputStream(path); - ObjectInputStream objectOutputStream = new ObjectInputStream(inStream); - Object o= objectOutputStream.readObject(); - inStream.close(); - return (SerializablePrototype) o; - } - public static void main(String args[]) throws Exception{ - String path = "D:/SerializablePrototype.instance"; - SerializablePrototype prototype = new SerializablePrototype(); - prototype.setI(123); - prototype.setNotClone(456); - prototype.writeToFile(path); - SerializablePrototype prototypeClone = new SerializablePrototype(); - prototypeClone = prototype.ReadFromFile(path); - System.out.println(prototypeClone.getI() + " " + prototypeClone.getNotClone() + " "); - } -} +package com.anxpp.designpattern.prototype; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +//使用Serializable支持克隆 +public class SerializablePrototype implements Serializable { + private static final long serialVersionUID = 1L; + private int i; + private transient int notClone;//transient关键字的成员不会被序列化 + + public static long getSerialversionuid() { + return serialVersionUID; + } + + public static void main(String[] args) throws Exception { + String path = "D:/SerializablePrototype.instance"; + SerializablePrototype prototype = new SerializablePrototype(); + prototype.setI(123); + prototype.setNotClone(456); + prototype.writeToFile(path); + SerializablePrototype prototypeClone = new SerializablePrototype(); + prototypeClone = prototype.ReadFromFile(path); + System.out.println(prototypeClone.getI() + " " + prototypeClone.getNotClone() + " "); + } + + public int getI() { + return i; + } + + public void setI(int i) { + this.i = i; + } + + public int getNotClone() { + return notClone; + } + + public void setNotClone(int notClone) { + this.notClone = notClone; + } + + public void writeToFile(String path) throws Exception { + FileOutputStream outStream = new FileOutputStream(path); + ObjectOutputStream objectOutputStream = new ObjectOutputStream(outStream); + objectOutputStream.writeObject(this); + outStream.close(); + } + + public SerializablePrototype ReadFromFile(String path) throws Exception { + File file = new File(path); + if (!file.exists()) + file.createNewFile(); + FileInputStream inStream = new FileInputStream(path); + ObjectInputStream objectOutputStream = new ObjectInputStream(inStream); + Object o = objectOutputStream.readObject(); + inStream.close(); + return (SerializablePrototype) o; + } +} diff --git a/src/com/anxpp/designpattern/prototype/SimplePrototype.java b/src/com/anxpp/designpattern/prototype/SimplePrototype.java index b6a3c95..da64b9f 100644 --- a/src/com/anxpp/designpattern/prototype/SimplePrototype.java +++ b/src/com/anxpp/designpattern/prototype/SimplePrototype.java @@ -1,33 +1,40 @@ -package com.anxpp.designpattern.prototype; -//具体原型 -public class SimplePrototype implements Prototype,Cloneable { - int value; - //clone()实现 - @Override - public Object cloneSelf() { - SimplePrototype self = new SimplePrototype(); - self.value = value; - return self; - } - //使用 - public static void main(String args[]){ - SimplePrototype simplePrototype = new SimplePrototype(); - simplePrototype.value = 500; - SimplePrototype simplePrototypeClone = (SimplePrototype) simplePrototype.cloneSelf(); - System.out.println(simplePrototypeClone.value); - } -} -//抽象原型 -interface Prototype{ - Object cloneSelf();//克隆自身的方法 -} -//客户端使用 -class Client{ - SimplePrototype prototype; - public Client(SimplePrototype prototype){ - this.prototype = prototype; - } - public Object getPrototype(){ - return prototype.cloneSelf(); - } +package com.anxpp.designpattern.prototype; + +//抽象原型 +interface Prototype { + Object cloneSelf();//克隆自身的方法 +} + +//具体原型 +public class SimplePrototype implements Prototype, Cloneable { + int value; + + //使用 + public static void main(String[] args) { + SimplePrototype simplePrototype = new SimplePrototype(); + simplePrototype.value = 500; + SimplePrototype simplePrototypeClone = (SimplePrototype) simplePrototype.cloneSelf(); + System.out.println(simplePrototypeClone.value); + } + + //clone()实现 + @Override + public Object cloneSelf() { + SimplePrototype self = new SimplePrototype(); + self.value = value; + return self; + } +} + +//客户端使用 +class Client { + SimplePrototype prototype; + + public Client(SimplePrototype prototype) { + this.prototype = prototype; + } + + public Object getPrototype() { + return prototype.cloneSelf(); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/proxy/AbstractObject.java b/src/com/anxpp/designpattern/proxy/AbstractObject.java index 89ce2b3..f798db0 100644 --- a/src/com/anxpp/designpattern/proxy/AbstractObject.java +++ b/src/com/anxpp/designpattern/proxy/AbstractObject.java @@ -1,7 +1,10 @@ -package com.anxpp.designpattern.proxy; -//抽象对象 -public interface AbstractObject { - void method1(); - int method2(); - void method3(); -} +package com.anxpp.designpattern.proxy; + +//抽象对象 +public interface AbstractObject { + void method1(); + + int method2(); + + void method3(); +} diff --git a/src/com/anxpp/designpattern/proxy/ProxyObject.java b/src/com/anxpp/designpattern/proxy/ProxyObject.java index 424b439..afffadb 100644 --- a/src/com/anxpp/designpattern/proxy/ProxyObject.java +++ b/src/com/anxpp/designpattern/proxy/ProxyObject.java @@ -1,19 +1,23 @@ -package com.anxpp.designpattern.proxy; -//代理对象 -public class ProxyObject implements AbstractObject { - AbstractObject object = new TargetObject(); - @Override - public void method1() { - object.method1(); - } - @Override - public int method2() { - return object.method2(); - } - @Override - public void method3() { - System.out.println("调用目标对象前的操作"); - object.method3(); - System.out.println("调用目标对象后的操作"); - } -} +package com.anxpp.designpattern.proxy; + +//代理对象 +public class ProxyObject implements AbstractObject { + AbstractObject object = new TargetObject(); + + @Override + public void method1() { + object.method1(); + } + + @Override + public int method2() { + return object.method2(); + } + + @Override + public void method3() { + System.out.println("调用目标对象前的操作"); + object.method3(); + System.out.println("调用目标对象后的操作"); + } +} diff --git a/src/com/anxpp/designpattern/proxy/TargetObject.java b/src/com/anxpp/designpattern/proxy/TargetObject.java index adaa03b..3b7e5e9 100644 --- a/src/com/anxpp/designpattern/proxy/TargetObject.java +++ b/src/com/anxpp/designpattern/proxy/TargetObject.java @@ -1,17 +1,20 @@ -package com.anxpp.designpattern.proxy; -//具体对象 -public class TargetObject implements AbstractObject { - @Override - public void method1() { - System.out.println("具体对象的方法1"); - } - @Override - public int method2() { - System.out.println("具体对象的方法2"); - return 0; - } - @Override - public void method3() { - System.out.println("具体对象的方法3"); - } -} +package com.anxpp.designpattern.proxy; + +//具体对象 +public class TargetObject implements AbstractObject { + @Override + public void method1() { + System.out.println("具体对象的方法1"); + } + + @Override + public int method2() { + System.out.println("具体对象的方法2"); + return 0; + } + + @Override + public void method3() { + System.out.println("具体对象的方法3"); + } +} diff --git a/src/com/anxpp/designpattern/proxy/TestUse.java b/src/com/anxpp/designpattern/proxy/TestUse.java index de1fa19..3cb39db 100644 --- a/src/com/anxpp/designpattern/proxy/TestUse.java +++ b/src/com/anxpp/designpattern/proxy/TestUse.java @@ -1,9 +1,10 @@ -package com.anxpp.designpattern.proxy; -public class TestUse { - public static void main(String args[]){ - AbstractObject obj = new ProxyObject(); - obj.method1(); - obj.method2(); - obj.method3(); - } +package com.anxpp.designpattern.proxy; + +public class TestUse { + public static void main(String[] args) { + AbstractObject obj = new ProxyObject(); + obj.method1(); + obj.method2(); + obj.method3(); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/simplefactory/SimpleFactory.java b/src/com/anxpp/designpattern/simplefactory/SimpleFactory.java index 72b30f6..8f67233 100644 --- a/src/com/anxpp/designpattern/simplefactory/SimpleFactory.java +++ b/src/com/anxpp/designpattern/simplefactory/SimpleFactory.java @@ -1,36 +1,41 @@ -package com.anxpp.designpattern.simplefactory; -//演示简单工厂 -public class SimpleFactory { - public static void main(String args[]) throws Exception{ - Factory factory = new Factory(); - factory.produce("PRO5").run(); - factory.produce("PRO6").run(); - } -} -//抽象产品 -interface MeizuPhone{ - void run(); -} -//具体产品X2 -class PRO5 implements MeizuPhone{ - @Override - public void run() { - System.out.println("我是一台PRO5"); - } -} -class PRO6 implements MeizuPhone{ - @Override - public void run() { - System.out.println("我是一台PRO6"); - } -} -//工厂 -class Factory{ - MeizuPhone produce(String product) throws Exception{ - if(product.equals("PRO5")) - return new PRO5(); - else if(product.equals("PRO6")) - return new PRO6(); - throw new Exception("No Such Class"); - } +package com.anxpp.designpattern.simplefactory; + +//抽象产品 +interface MeizuPhone { + void run(); +} + +//演示简单工厂 +public class SimpleFactory { + public static void main(String[] args) throws Exception { + Factory factory = new Factory(); + factory.produce("PRO5").run(); + factory.produce("PRO6").run(); + } +} + +//具体产品X2 +class PRO5 implements MeizuPhone { + @Override + public void run() { + System.out.println("我是一台PRO5"); + } +} + +class PRO6 implements MeizuPhone { + @Override + public void run() { + System.out.println("我是一台PRO6"); + } +} + +//工厂 +class Factory { + MeizuPhone produce(String product) throws Exception { + if (product.equals("PRO5")) + return new PRO5(); + else if (product.equals("PRO6")) + return new PRO6(); + throw new Exception("No Such Class"); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/singleton/EnumSingleton.java b/src/com/anxpp/designpattern/singleton/EnumSingleton.java index e93be7d..96eab62 100644 --- a/src/com/anxpp/designpattern/singleton/EnumSingleton.java +++ b/src/com/anxpp/designpattern/singleton/EnumSingleton.java @@ -1,9 +1,10 @@ -package com.anxpp.designpattern.singleton; -/** - * 简枚举实现单例模式,可以用于多线程 - * @author Administrator - * - */ -public enum EnumSingleton { - instance; -} +package com.anxpp.designpattern.singleton; + +/** + * 简枚举实现单例模式,可以用于多线程 + * + * @author Administrator + */ +public enum EnumSingleton { + instance +} diff --git a/src/com/anxpp/designpattern/singleton/SimpleSingleton.java b/src/com/anxpp/designpattern/singleton/SimpleSingleton.java index 7423b36..26f9aa6 100644 --- a/src/com/anxpp/designpattern/singleton/SimpleSingleton.java +++ b/src/com/anxpp/designpattern/singleton/SimpleSingleton.java @@ -1,15 +1,19 @@ -package com.anxpp.designpattern.singleton; -/** - * 简单的单例模式,不能用于多线程 - * @author Administrator - * - */ -public class SimpleSingleton { - private static SimpleSingleton instance; - private SimpleSingleton(){} - public static SimpleSingleton getIntance(){ - if(instance == null) - instance = new SimpleSingleton(); - return instance; - } -} +package com.anxpp.designpattern.singleton; + +/** + * 简单的单例模式,不能用于多线程 + * + * @author Administrator + */ +public class SimpleSingleton { + private static SimpleSingleton instance; + + private SimpleSingleton() { + } + + public static SimpleSingleton getIntance() { + if (instance == null) + instance = new SimpleSingleton(); + return instance; + } +} diff --git a/src/com/anxpp/designpattern/state/ISaveData.java b/src/com/anxpp/designpattern/state/ISaveData.java index 3466e6d..f896a14 100644 --- a/src/com/anxpp/designpattern/state/ISaveData.java +++ b/src/com/anxpp/designpattern/state/ISaveData.java @@ -1,5 +1,6 @@ -package com.anxpp.designpattern.state; -//抽象状态 -public interface ISaveData { - void save(Object data); -} +package com.anxpp.designpattern.state; + +//抽象状态 +public interface ISaveData { + void save(Object data); +} diff --git a/src/com/anxpp/designpattern/state/SaveBigData.java b/src/com/anxpp/designpattern/state/SaveBigData.java index a9db87f..7251bfa 100644 --- a/src/com/anxpp/designpattern/state/SaveBigData.java +++ b/src/com/anxpp/designpattern/state/SaveBigData.java @@ -1,9 +1,11 @@ -package com.anxpp.designpattern.state; -//具体状态 -public enum SaveBigData implements ISaveData{ - instance; - @Override - public void save(Object data) { - System.out.println("保存到文件:" + data); - } -} +package com.anxpp.designpattern.state; + +//具体状态 +public enum SaveBigData implements ISaveData { + instance; + + @Override + public void save(Object data) { + System.out.println("保存到文件:" + data); + } +} diff --git a/src/com/anxpp/designpattern/state/SaveDataController.java b/src/com/anxpp/designpattern/state/SaveDataController.java index f3e1f4e..7d198ff 100644 --- a/src/com/anxpp/designpattern/state/SaveDataController.java +++ b/src/com/anxpp/designpattern/state/SaveDataController.java @@ -1,15 +1,17 @@ -package com.anxpp.designpattern.state; -//环境(Context) -public class SaveDataController { - private ISaveData saveData; - public void save(String data){ - //为了演示,此处的大的数据其实也是很小的 - if(data.length()<1<<2) - saveData = SaveSmallData.instance; - else if(data.length()<1<<4) - saveData = SaveMiddleData.instance; - else - saveData = SaveBigData.instance; - saveData.save(data); - } -} +package com.anxpp.designpattern.state; + +//环境(Context) +public class SaveDataController { + private ISaveData saveData; + + public void save(String data) { + //为了演示,此处的大的数据其实也是很小的 + if (data.length() < 1 << 2) + saveData = SaveSmallData.instance; + else if (data.length() < 1 << 4) + saveData = SaveMiddleData.instance; + else + saveData = SaveBigData.instance; + saveData.save(data); + } +} diff --git a/src/com/anxpp/designpattern/state/SaveMiddleData.java b/src/com/anxpp/designpattern/state/SaveMiddleData.java index fb701e6..25c9ef7 100644 --- a/src/com/anxpp/designpattern/state/SaveMiddleData.java +++ b/src/com/anxpp/designpattern/state/SaveMiddleData.java @@ -1,9 +1,11 @@ -package com.anxpp.designpattern.state; -//具体状态 -public enum SaveMiddleData implements ISaveData{ - instance; - @Override - public void save(Object data) { - System.out.println("保存到Mysql:" + data); - } -} +package com.anxpp.designpattern.state; + +//具体状态 +public enum SaveMiddleData implements ISaveData { + instance; + + @Override + public void save(Object data) { + System.out.println("保存到Mysql:" + data); + } +} diff --git a/src/com/anxpp/designpattern/state/SaveSmallData.java b/src/com/anxpp/designpattern/state/SaveSmallData.java index 36fff5c..c1be2cb 100644 --- a/src/com/anxpp/designpattern/state/SaveSmallData.java +++ b/src/com/anxpp/designpattern/state/SaveSmallData.java @@ -1,9 +1,11 @@ -package com.anxpp.designpattern.state; -//具体状态 -public enum SaveSmallData implements ISaveData{ - instance; - @Override - public void save(Object data) { - System.out.println("保存到Redis:" + data); - } -} +package com.anxpp.designpattern.state; + +//具体状态 +public enum SaveSmallData implements ISaveData { + instance; + + @Override + public void save(Object data) { + System.out.println("保存到Redis:" + data); + } +} diff --git a/src/com/anxpp/designpattern/state/TestUse.java b/src/com/anxpp/designpattern/state/TestUse.java index a25966d..fdf0f62 100644 --- a/src/com/anxpp/designpattern/state/TestUse.java +++ b/src/com/anxpp/designpattern/state/TestUse.java @@ -1,12 +1,13 @@ -package com.anxpp.designpattern.state; -public class TestUse { - public static void main(String args[]){ - String smallData = "小数据"; - String middleData = "介于小数据和大数据之间的数据"; - String bifgData = "这里就假定这是一个很大很大很大的数据"; - SaveDataController saveDataController = new SaveDataController(); - saveDataController.save(smallData); - saveDataController.save(middleData); - saveDataController.save(bifgData); - } +package com.anxpp.designpattern.state; + +public class TestUse { + public static void main(String[] args) { + String smallData = "小数据"; + String middleData = "介于小数据和大数据之间的数据"; + String bifgData = "这里就假定这是一个很大很大很大的数据"; + SaveDataController saveDataController = new SaveDataController(); + saveDataController.save(smallData); + saveDataController.save(middleData); + saveDataController.save(bifgData); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/strategy/ISaveData.java b/src/com/anxpp/designpattern/strategy/ISaveData.java index d675410..2135954 100644 --- a/src/com/anxpp/designpattern/strategy/ISaveData.java +++ b/src/com/anxpp/designpattern/strategy/ISaveData.java @@ -1,5 +1,6 @@ -package com.anxpp.designpattern.strategy; -//策略 -public interface ISaveData { - void save(Object data); +package com.anxpp.designpattern.strategy; + +//策略 +public interface ISaveData { + void save(Object data); } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/strategy/SaveClient.java b/src/com/anxpp/designpattern/strategy/SaveClient.java index fea5cdc..b1fa765 100644 --- a/src/com/anxpp/designpattern/strategy/SaveClient.java +++ b/src/com/anxpp/designpattern/strategy/SaveClient.java @@ -1,14 +1,18 @@ -package com.anxpp.designpattern.strategy; -//环境 -public class SaveClient { - private ISaveData saveData; - public SaveClient(ISaveData saveData){ - this.saveData = saveData; - } - public void setSaveData(ISaveData saveData){ - this.saveData = saveData; - } - public void save(Object data){ - saveData.save(data); - } -} +package com.anxpp.designpattern.strategy; + +//环境 +public class SaveClient { + private ISaveData saveData; + + public SaveClient(ISaveData saveData) { + this.saveData = saveData; + } + + public void setSaveData(ISaveData saveData) { + this.saveData = saveData; + } + + public void save(Object data) { + saveData.save(data); + } +} diff --git a/src/com/anxpp/designpattern/strategy/SaveToFile.java b/src/com/anxpp/designpattern/strategy/SaveToFile.java index 9c552bc..ca5d9db 100644 --- a/src/com/anxpp/designpattern/strategy/SaveToFile.java +++ b/src/com/anxpp/designpattern/strategy/SaveToFile.java @@ -1,8 +1,9 @@ -package com.anxpp.designpattern.strategy; -//具体策略 -public class SaveToFile implements ISaveData { - @Override - public void save(Object data) { - System.out.println("数据:" + data + " 保存到文件"); - } -} +package com.anxpp.designpattern.strategy; + +//具体策略 +public class SaveToFile implements ISaveData { + @Override + public void save(Object data) { + System.out.println("数据:" + data + " 保存到文件"); + } +} diff --git a/src/com/anxpp/designpattern/strategy/SaveToMysql.java b/src/com/anxpp/designpattern/strategy/SaveToMysql.java index 11b50a5..65d123e 100644 --- a/src/com/anxpp/designpattern/strategy/SaveToMysql.java +++ b/src/com/anxpp/designpattern/strategy/SaveToMysql.java @@ -1,8 +1,9 @@ -package com.anxpp.designpattern.strategy; -//具体策略 -public class SaveToMysql implements ISaveData { - @Override - public void save(Object data) { - System.out.println("数据:" + data + " 保存到Mysql"); - } -} +package com.anxpp.designpattern.strategy; + +//具体策略 +public class SaveToMysql implements ISaveData { + @Override + public void save(Object data) { + System.out.println("数据:" + data + " 保存到Mysql"); + } +} diff --git a/src/com/anxpp/designpattern/strategy/SaveToRedis.java b/src/com/anxpp/designpattern/strategy/SaveToRedis.java index f830494..a217943 100644 --- a/src/com/anxpp/designpattern/strategy/SaveToRedis.java +++ b/src/com/anxpp/designpattern/strategy/SaveToRedis.java @@ -1,8 +1,9 @@ -package com.anxpp.designpattern.strategy; -//具体策略 -public class SaveToRedis implements ISaveData { - @Override - public void save(Object data) { - System.out.println("数据:" + data + " 保存到Redis"); - } +package com.anxpp.designpattern.strategy; + +//具体策略 +public class SaveToRedis implements ISaveData { + @Override + public void save(Object data) { + System.out.println("数据:" + data + " 保存到Redis"); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/strategy/TestUse.java b/src/com/anxpp/designpattern/strategy/TestUse.java index 5653464..1229280 100644 --- a/src/com/anxpp/designpattern/strategy/TestUse.java +++ b/src/com/anxpp/designpattern/strategy/TestUse.java @@ -1,11 +1,12 @@ -package com.anxpp.designpattern.strategy; -public class TestUse { - public static void main(String args[]){ - Object data = "数据"; - ISaveData saveData = new SaveToRedis(); - SaveClient client = new SaveClient(saveData); - client.save(data); - client.setSaveData(new SaveToFile()); - client.save(data); - } +package com.anxpp.designpattern.strategy; + +public class TestUse { + public static void main(String[] args) { + Object data = "数据"; + ISaveData saveData = new SaveToRedis(); + SaveClient client = new SaveClient(saveData); + client.save(data); + client.setSaveData(new SaveToFile()); + client.save(data); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/templatemethod/AbstractTemplate.java b/src/com/anxpp/designpattern/templatemethod/AbstractTemplate.java index 71c2029..c4fbe45 100644 --- a/src/com/anxpp/designpattern/templatemethod/AbstractTemplate.java +++ b/src/com/anxpp/designpattern/templatemethod/AbstractTemplate.java @@ -1,17 +1,22 @@ -package com.anxpp.designpattern.templatemethod; -//抽象模板 -public abstract class AbstractTemplate { - Object data; - //这个就是模板方法 - void dealData(){ - getData(); - calcData(); - printData(); - } - //下面是普通方法,可能已经实现,也可能需要子类实现 - abstract void getData(); - abstract void calcData(); - void printData(){ - System.out.println(data); - } +package com.anxpp.designpattern.templatemethod; + +//抽象模板 +public abstract class AbstractTemplate { + Object data; + + //这个就是模板方法 + void dealData() { + getData(); + calcData(); + printData(); + } + + //下面是普通方法,可能已经实现,也可能需要子类实现 + abstract void getData(); + + abstract void calcData(); + + void printData() { + System.out.println(data); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/templatemethod/Template.java b/src/com/anxpp/designpattern/templatemethod/Template.java index b36dcf5..50e5973 100644 --- a/src/com/anxpp/designpattern/templatemethod/Template.java +++ b/src/com/anxpp/designpattern/templatemethod/Template.java @@ -1,12 +1,14 @@ -package com.anxpp.designpattern.templatemethod; -//具体模板 -public class Template extends AbstractTemplate { - @Override - void getData() { - data = "data"; - } - @Override - void calcData() { - data = (String)data+data; - } +package com.anxpp.designpattern.templatemethod; + +//具体模板 +public class Template extends AbstractTemplate { + @Override + void getData() { + data = "data"; + } + + @Override + void calcData() { + data = data + data; + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/templatemethod/TestUse.java b/src/com/anxpp/designpattern/templatemethod/TestUse.java index 64d8022..40c9830 100644 --- a/src/com/anxpp/designpattern/templatemethod/TestUse.java +++ b/src/com/anxpp/designpattern/templatemethod/TestUse.java @@ -1,7 +1,8 @@ -package com.anxpp.designpattern.templatemethod; -public class TestUse { - public static void main(String args[]){ - Template template = new Template(); - template.dealData(); - } +package com.anxpp.designpattern.templatemethod; + +public class TestUse { + public static void main(String[] args) { + Template template = new Template(); + template.dealData(); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/visitor/APPOwner.java b/src/com/anxpp/designpattern/visitor/APPOwner.java index efd7273..d3c828a 100644 --- a/src/com/anxpp/designpattern/visitor/APPOwner.java +++ b/src/com/anxpp/designpattern/visitor/APPOwner.java @@ -1,16 +1,18 @@ -package com.anxpp.designpattern.visitor; -//具体访问者 -public class APPOwner implements Visitor{ - @Override - public void visit(UserVIP user) { - String estimation = user.getEstimation(); - if(estimation.length()>5) - System.out.println("记录一条有效反馈:" + estimation); - } - @Override - public void visit(UserOrdinary user) { - String estimation = user.getEstimation(); - if(estimation.length()>10) - System.out.println("记录一条有效反馈:" + estimation); - } +package com.anxpp.designpattern.visitor; + +//具体访问者 +public class APPOwner implements Visitor { + @Override + public void visit(UserVIP user) { + String estimation = user.getEstimation(); + if (estimation.length()> 5) + System.out.println("记录一条有效反馈:" + estimation); + } + + @Override + public void visit(UserOrdinary user) { + String estimation = user.getEstimation(); + if (estimation.length()> 10) + System.out.println("记录一条有效反馈:" + estimation); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/visitor/Dispatch.java b/src/com/anxpp/designpattern/visitor/Dispatch.java index 16fc0f1..00661f7 100644 --- a/src/com/anxpp/designpattern/visitor/Dispatch.java +++ b/src/com/anxpp/designpattern/visitor/Dispatch.java @@ -1,27 +1,32 @@ -package com.anxpp.designpattern.visitor; -//演示java的静态分派和动态分派 -//结果会输出:Collection -//所以重载的分派是根据静态类型进行的 -public class Dispatch { - void print(FatherClass c){ - System.out.print("父类"); - } - void print(ChildClass c){ - System.out.print("子类"); - } - public static void main(String args[]){ - FatherClass child = new ChildClass(); - new Dispatch().print(child); - child.print(); - } -} -class FatherClass{ - void print(){ - System.out.println("父类"); - } -} -class ChildClass extends FatherClass{ - void print(){ - System.out.print("子类"); - } +package com.anxpp.designpattern.visitor; + +//演示java的静态分派和动态分派 +//结果会输出:Collection +//所以重载的分派是根据静态类型进行的 +public class Dispatch { + public static void main(String[] args) { + FatherClass child = new ChildClass(); + new Dispatch().print(child); + child.print(); + } + + void print(FatherClass c) { + System.out.print("父类"); + } + + void print(ChildClass c) { + System.out.print("子类"); + } +} + +class FatherClass { + void print() { + System.out.println("父类"); + } +} + +class ChildClass extends FatherClass { + void print() { + System.out.print("子类"); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/visitor/MultiDispatch.java b/src/com/anxpp/designpattern/visitor/MultiDispatch.java index 0ee5767..504e671 100644 --- a/src/com/anxpp/designpattern/visitor/MultiDispatch.java +++ b/src/com/anxpp/designpattern/visitor/MultiDispatch.java @@ -1,27 +1,31 @@ -package com.anxpp.designpattern.visitor; - -public class MultiDispatch { - public static void main(String args[]){ - Father child = new Child(); - child.print(); - new Child().print(new Vistor()); - } -} -class Father{ - void print(){ - System.out.println("父类"); - } -} -class Child extends Father{ - void print(){ - System.out.print("子类"); - } - void print(Vistor c){ - c.print(this); - } -} -class Vistor { - public void print(Child child){ - child.print(); - } +package com.anxpp.designpattern.visitor; + +public class MultiDispatch { + public static void main(String[] args) { + Father child = new Child(); + child.print(); + new Child().print(new Vistor()); + } +} + +class Father { + void print() { + System.out.println("父类"); + } +} + +class Child extends Father { + void print() { + System.out.print("子类"); + } + + void print(Vistor c) { + c.print(this); + } +} + +class Vistor { + public void print(Child child) { + child.print(); + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/visitor/TestUse.java b/src/com/anxpp/designpattern/visitor/TestUse.java index 3dc858b..aea3ddb 100644 --- a/src/com/anxpp/designpattern/visitor/TestUse.java +++ b/src/com/anxpp/designpattern/visitor/TestUse.java @@ -1,19 +1,19 @@ -package com.anxpp.designpattern.visitor; - -import java.util.ArrayList; -import java.util.Iterator; - -public class TestUse { - public static void main(String args[]){ - Visitor appOwner = new APPOwner(); - ArrayList users = new ArrayList(); - users.add(new UserOrdinary("普通用户短反馈")); - users.add(new UserOrdinary("这是一个普通用户的比较长的反馈")); - users.add(new UserVIP("VIP用户的短反馈")); - users.add(new UserVIP("VIP用户的比较长的反馈反馈")); - Iterator iterator = users.iterator(); - while(iterator.hasNext()){ - iterator.next().accept(appOwner); - } - } +package com.anxpp.designpattern.visitor; + +import java.util.ArrayList; +import java.util.Iterator; + +public class TestUse { + public static void main(String[] args) { + Visitor appOwner = new APPOwner(); + ArrayList users = new ArrayList(); + users.add(new UserOrdinary("普通用户短反馈")); + users.add(new UserOrdinary("这是一个普通用户的比较长的反馈")); + users.add(new UserVIP("VIP用户的短反馈")); + users.add(new UserVIP("VIP用户的比较长的反馈反馈")); + Iterator iterator = users.iterator(); + while (iterator.hasNext()) { + iterator.next().accept(appOwner); + } + } } \ No newline at end of file diff --git a/src/com/anxpp/designpattern/visitor/User.java b/src/com/anxpp/designpattern/visitor/User.java index 529e6f3..f4adceb 100644 --- a/src/com/anxpp/designpattern/visitor/User.java +++ b/src/com/anxpp/designpattern/visitor/User.java @@ -1,5 +1,6 @@ -package com.anxpp.designpattern.visitor; -//抽象元素 -public interface User { - void accept(Visitor visitor); -} +package com.anxpp.designpattern.visitor; + +//抽象元素 +public interface User { + void accept(Visitor visitor); +} diff --git a/src/com/anxpp/designpattern/visitor/UserOrdinary.java b/src/com/anxpp/designpattern/visitor/UserOrdinary.java index 26e966c..74ae576 100644 --- a/src/com/anxpp/designpattern/visitor/UserOrdinary.java +++ b/src/com/anxpp/designpattern/visitor/UserOrdinary.java @@ -1,15 +1,19 @@ -package com.anxpp.designpattern.visitor; -//普通用户,具体元素 -public class UserOrdinary implements User{ - String estimation; - public UserOrdinary(String estimation){ - this.estimation = estimation; - } - @Override - public void accept(Visitor visitor) { - visitor.visit(this); - } - String getEstimation(){ - return estimation; - } -} +package com.anxpp.designpattern.visitor; + +//普通用户,具体元素 +public class UserOrdinary implements User { + String estimation; + + public UserOrdinary(String estimation) { + this.estimation = estimation; + } + + @Override + public void accept(Visitor visitor) { + visitor.visit(this); + } + + String getEstimation() { + return estimation; + } +} diff --git a/src/com/anxpp/designpattern/visitor/UserVIP.java b/src/com/anxpp/designpattern/visitor/UserVIP.java index 750d8bb..6891587 100644 --- a/src/com/anxpp/designpattern/visitor/UserVIP.java +++ b/src/com/anxpp/designpattern/visitor/UserVIP.java @@ -1,15 +1,19 @@ -package com.anxpp.designpattern.visitor; -//VIP用户,具体元素 -public class UserVIP implements User{ - String estimation; - public UserVIP(String estimation){ - this.estimation = estimation; - } - @Override - public void accept(Visitor visitor) { - visitor.visit(this); - } - String getEstimation(){ - return estimation; - } -} +package com.anxpp.designpattern.visitor; + +//VIP用户,具体元素 +public class UserVIP implements User { + String estimation; + + public UserVIP(String estimation) { + this.estimation = estimation; + } + + @Override + public void accept(Visitor visitor) { + visitor.visit(this); + } + + String getEstimation() { + return estimation; + } +} diff --git a/src/com/anxpp/designpattern/visitor/Visitor.java b/src/com/anxpp/designpattern/visitor/Visitor.java index 934c25a..5ddeae6 100644 --- a/src/com/anxpp/designpattern/visitor/Visitor.java +++ b/src/com/anxpp/designpattern/visitor/Visitor.java @@ -1,6 +1,8 @@ -package com.anxpp.designpattern.visitor; -//抽象访问者 -public interface Visitor { - void visit(UserVIP user); - void visit(UserOrdinary user); +package com.anxpp.designpattern.visitor; + +//抽象访问者 +public interface Visitor { + void visit(UserVIP user); + + void visit(UserOrdinary user); } \ No newline at end of file

      AltStyle によって変換されたページ (->オリジナル) /