From f5333ccfc86a1613f04c2cdafc0f622ab4c6f2f9 Mon Sep 17 00:00:00 2001 From: caizhang Date: Wed, 29 Apr 2020 18:00:52 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=AE=80=E5=8D=95?= =?UTF-8?q?=E5=B7=A5=E5=8E=82=E4=B8=8E=E5=B7=A5=E5=8E=82=E6=A8=A1=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 40 +++++++++++ .../factorymethod/FactoryMethod.java | 67 +++++++++++++++++++ .../factorymethod/package-info.java | 7 ++ .../simplefactory/SimpleFactory.java | 55 +++++++++++++++ .../simplefactory/package-info.java | 7 ++ 5 files changed, 176 insertions(+) create mode 100644 .gitignore create mode 100644 src/com/juststarnew/designpattern/factorymethod/FactoryMethod.java create mode 100644 src/com/juststarnew/designpattern/factorymethod/package-info.java create mode 100644 src/com/juststarnew/designpattern/simplefactory/SimpleFactory.java create mode 100644 src/com/juststarnew/designpattern/simplefactory/package-info.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a9136e7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,40 @@ +*.java.hsp +*.sonarj +*.sw* +.DS_Store +.settings +.springBeans +bin +build.sh +integration-repo +ivy-cache +jxl.log +jmx.log +derby.log +spring-test/test-output/ +.gradle +argfile* +pom.xml +activemq-data/ + +classes/ +/build +buildSrc/build +/spring-*/build +/src/asciidoc/build +target/ + +# Eclipse artifacts, including WTP generated manifests +.classpath +.project +spring-*/src/main/java/META-INF/MANIFEST.MF + +# IDEA artifacts and output dirs +*.iml +*.ipr +*.iws +.idea +out +test-output +atlassian-ide-plugin.xml +.gradletasknamecache diff --git a/src/com/juststarnew/designpattern/factorymethod/FactoryMethod.java b/src/com/juststarnew/designpattern/factorymethod/FactoryMethod.java new file mode 100644 index 0000000..e014562 --- /dev/null +++ b/src/com/juststarnew/designpattern/factorymethod/FactoryMethod.java @@ -0,0 +1,67 @@ +package com.juststarnew.designpattern.factorymethod; + +/** + * 描述:工厂方法模式 + * 总结:就是工厂定义为接口。 + * 不同的工程继承这个工厂抽象类。然后需要什么产品就到哪个具体的工厂里去取。 + * 与简单工厂的区别是简单工厂啥都生产。而现在就是工厂分工了,单一职责。。 + * 一个工厂只生产一种产品。 + * + * @author zhangcai at 2020/4/29 17:49 + * @version 1.0.0 + */ +public class FactoryMethod { + + public static void main(String[] args) { + IFactory teslaFactory = new TeslaFactory(); + IFactory bydFactory = new BydFactory(); + Car tesla = teslaFactory.produce(); + Car byd = bydFactory.produce(); + tesla.drive(); + byd.drive(); + } + + +} + +//抽象产品 +interface Car { + void drive(); +} +//具体产品 +class Tesla implements Car { + + @Override + public void drive() { + System.out.println("tesla auto drive"); + } +} + +//具体产品*2 +class Byd implements Car { + + @Override + public void drive() { + System.out.println("Byd drive"); + } +} +//抽象工厂 +interface IFactory { + Car produce(); +} +//具体工厂 +class TeslaFactory implements IFactory { + + @Override + public Car produce() { + return new Tesla(); + } +} +//具体工厂*2 +class BydFactory implements IFactory { + + @Override + public Car produce() { + return new Byd(); + } +} diff --git a/src/com/juststarnew/designpattern/factorymethod/package-info.java b/src/com/juststarnew/designpattern/factorymethod/package-info.java new file mode 100644 index 0000000..ac9046f --- /dev/null +++ b/src/com/juststarnew/designpattern/factorymethod/package-info.java @@ -0,0 +1,7 @@ +/** + * 描述:工厂方法 + * + * @author zhangcai at 2020/4/29 17:48 + * @version 1.0.0 + */ +package com.juststarnew.designpattern.factorymethod; \ No newline at end of file diff --git a/src/com/juststarnew/designpattern/simplefactory/SimpleFactory.java b/src/com/juststarnew/designpattern/simplefactory/SimpleFactory.java new file mode 100644 index 0000000..64c34dd --- /dev/null +++ b/src/com/juststarnew/designpattern/simplefactory/SimpleFactory.java @@ -0,0 +1,55 @@ +package com.juststarnew.designpattern.simplefactory; + +/** + * 描述:简单工厂模式 + * + * @author zhangcai at 2020/4/29 17:25 + * @version 1.0.0 + */ +public class SimpleFactory { + public static void main(String[] args) throws Exception { + Factory factory = new Factory(); + Car byd = factory.produceCar("byd"); + Car tesla = factory.produceCar("tesla"); + byd.drive(); + tesla.drive(); + } +} + +//抽象产品 +interface Car { + void drive(); +} +//具体产品 +class Tesla implements Car { + + @Override + public void drive() { + System.out.println("tesla auto drive"); + } +} + +//具体产品*2 +class Byd implements Car { + + @Override + public void drive() { + System.out.println("Byd drive"); + } +} + +//工厂 +class Factory { + Car produceCar(String carType) throws Exception { + if ("tesla".equals(carType)) { + return new Tesla(); + } else if ("byd".equals(carType)) { + return new Byd(); + } + throw new Exception("No such class"); + } +} + + + + diff --git a/src/com/juststarnew/designpattern/simplefactory/package-info.java b/src/com/juststarnew/designpattern/simplefactory/package-info.java new file mode 100644 index 0000000..2ac3730 --- /dev/null +++ b/src/com/juststarnew/designpattern/simplefactory/package-info.java @@ -0,0 +1,7 @@ +/** + * 描述:简单工厂模式 + * + * @author zhangcai at 2020/4/29 17:25 + * @version 1.0.0 + */ +package com.juststarnew.designpattern.simplefactory; \ No newline at end of file From 9f60680ac4970b8d958cdb279270dd47a31c753d Mon Sep 17 00:00:00 2001 From: caizhang Date: Thu, 30 Apr 2020 14:25:43 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../factorymethod/ArrayList.java | 1 + .../designpattern/factorymethod/Iterator.java | 3 + .../designpattern/factorymethod/List.java | 1 + .../factorymethod/ArrayList.java | 54 +++++++++++++++ .../designpattern/factorymethod/Iterator.java | 13 ++++ .../factorymethod/LinkedList.java | 65 +++++++++++++++++++ .../designpattern/factorymethod/List.java | 12 ++++ .../designpattern/factorymethod/TestList.java | 29 +++++++++ .../factorymethod/package-info.java | 4 ++ 9 files changed, 182 insertions(+) create mode 100644 src/com/juststarnew/designpattern/factorymethod/ArrayList.java create mode 100644 src/com/juststarnew/designpattern/factorymethod/Iterator.java create mode 100644 src/com/juststarnew/designpattern/factorymethod/LinkedList.java create mode 100644 src/com/juststarnew/designpattern/factorymethod/List.java create mode 100644 src/com/juststarnew/designpattern/factorymethod/TestList.java diff --git a/src/com/anxpp/designpattern/factorymethod/ArrayList.java b/src/com/anxpp/designpattern/factorymethod/ArrayList.java index 344a848..b9140b3 100644 --- a/src/com/anxpp/designpattern/factorymethod/ArrayList.java +++ b/src/com/anxpp/designpattern/factorymethod/ArrayList.java @@ -1,5 +1,6 @@ package com.anxpp.designpattern.factorymethod; //方便演示而实现的简陋的数组list +//arrayList 其实就是数组实现的列表 public class ArrayList implements List{ private int size; //存放的元素个数,会默认初始化为0 private Object[] defaultList; //使用数组存放元素 diff --git a/src/com/anxpp/designpattern/factorymethod/Iterator.java b/src/com/anxpp/designpattern/factorymethod/Iterator.java index eb97dc3..fbcf406 100644 --- a/src/com/anxpp/designpattern/factorymethod/Iterator.java +++ b/src/com/anxpp/designpattern/factorymethod/Iterator.java @@ -1,5 +1,8 @@ package com.anxpp.designpattern.factorymethod; //只是需要遍历一堆数据,那么只需要2个方法就可以了 +//抽象产品,定义如何遍历。如果有多个不同的数据结构需要遍历, +//我们就需要一种用于遍历不同结构的工具,首先我们就需要为这个工具定义一个接口(抽象产品), +//描述如何来遍历。 public interface Iterator { boolean hasNext(); //是否还有下一个元素 T next(); //得到下一个元素 diff --git a/src/com/anxpp/designpattern/factorymethod/List.java b/src/com/anxpp/designpattern/factorymethod/List.java index e499393..98015a4 100644 --- a/src/com/anxpp/designpattern/factorymethod/List.java +++ b/src/com/anxpp/designpattern/factorymethod/List.java @@ -1,6 +1,7 @@ package com.anxpp.designpattern.factorymethod; //便于介绍,不做多的操作 +//这里就是我们要遍历的目标,而这些目标此处我们暂定为列表,这就是构造者 public interface List { Iterator iterator(); //返回一个遍历器 boolean add(T t); //添加元素到列表 diff --git a/src/com/juststarnew/designpattern/factorymethod/ArrayList.java b/src/com/juststarnew/designpattern/factorymethod/ArrayList.java new file mode 100644 index 0000000..ffd6c66 --- /dev/null +++ b/src/com/juststarnew/designpattern/factorymethod/ArrayList.java @@ -0,0 +1,54 @@ +package com.juststarnew.designpattern.factorymethod; + +import com.anxpp.designpattern.iterator.MyIterator; + +/** + * 描述:数组实现的简单list实例 + * + * @author zhangcai at 2020/4/30 10:50 + * @version 1.0.0 + */ +public class ArrayList implements List { + //目前list的大小 + private int size; + //存储数组list的实际数组 + private Object[] array; + //最大可以存储的大小 + private static final int MAX_ARRAYLIST_SIZE = 10; + + public ArrayList() { + array = new Object[MAX_ARRAYLIST_SIZE]; + } + + @Override + public Iterator iterator() { + return new MyIterator(); + } + + @Override + public boolean add(E e) { + if (MAX_ARRAYLIST_SIZE > size) { + array[size++] = e; + return true; + } + return false; + } + + /* + 利用内部类属性可以访问外部类特性 + */ + private class MyIterator implements Iterator { + //目前在第几个项了 + private int index; + @Override + public boolean hasNext() { + return index < size; + } + + @Override + public T next() { + return (T) array[index++]; + } + } + +} diff --git a/src/com/juststarnew/designpattern/factorymethod/Iterator.java b/src/com/juststarnew/designpattern/factorymethod/Iterator.java new file mode 100644 index 0000000..01f1259 --- /dev/null +++ b/src/com/juststarnew/designpattern/factorymethod/Iterator.java @@ -0,0 +1,13 @@ +package com.juststarnew.designpattern.factorymethod; + +/** + * 描述:定义遍历的接口方法,遍历iterator方法,可以看成是工厂方法 + * 也就是定义要的产品规则的意思 + * + * @author zhangcai at 2020/4/30 10:40 + * @version 1.0.0 + */ +public interface Iterator { + boolean hasNext(); + T next(); +} diff --git a/src/com/juststarnew/designpattern/factorymethod/LinkedList.java b/src/com/juststarnew/designpattern/factorymethod/LinkedList.java new file mode 100644 index 0000000..34380a9 --- /dev/null +++ b/src/com/juststarnew/designpattern/factorymethod/LinkedList.java @@ -0,0 +1,65 @@ +package com.juststarnew.designpattern.factorymethod; + +/** + * 描述:链表实现的简单list + * + * @author zhangcai at 2020/4/30 11:33 + * @version 1.0.0 + */ +public class LinkedList implements List { + //第一个元素,链表的第一个节点 + Node first; + + @Override + public Iterator iterator() { + return new LinkedListIterator(); + } + + @Override + public boolean add(E e) { + Node newNode = new Node<>(e,null); + if(first == null) { + first = newNode; + return true; + } + //找到最后一个节点 + Node lastNode = first; + while (lastNode.nextPoint != null) { + lastNode = lastNode.nextPoint; + } + lastNode.nextPoint = newNode; + return true; + } + + private class Node { + E data; + Node nextPoint; + + private Node(E data, Node nextPoint) { + this.data = data; + this.nextPoint = nextPoint; + } + } + + + private class LinkedListIterator implements Iterator { + //下一个元素 + private Node next; + + public LinkedListIterator() { + next = first; + } + + @Override + public boolean hasNext() { + return next != null; + } + + @Override + public E next() { + E e = next.data; + next = next.nextPoint; + return e; + } + } +} diff --git a/src/com/juststarnew/designpattern/factorymethod/List.java b/src/com/juststarnew/designpattern/factorymethod/List.java new file mode 100644 index 0000000..d0a81e8 --- /dev/null +++ b/src/com/juststarnew/designpattern/factorymethod/List.java @@ -0,0 +1,12 @@ +package com.juststarnew.designpattern.factorymethod; + +/** + * 描述:要遍历的目标,即构造者。它有不同的实现。链表list和数组list + * + * @author zhangcai at 2020/4/30 10:42 + * @version 1.0.0 + */ +public interface List { + Iterator iterator(); + boolean add(E e); +} diff --git a/src/com/juststarnew/designpattern/factorymethod/TestList.java b/src/com/juststarnew/designpattern/factorymethod/TestList.java new file mode 100644 index 0000000..7c0244b --- /dev/null +++ b/src/com/juststarnew/designpattern/factorymethod/TestList.java @@ -0,0 +1,29 @@ +package com.juststarnew.designpattern.factorymethod; + +/** + * 描述: + * + * @author zhangcai at 2020/4/30 11:26 + * @version 1.0.0 + */ +public class TestList { + public static void main(String[] args) { + List list = new ArrayList(); + List linkedList = new LinkedList(); + for (int i = 0; i < 10; i++) { + list.add(i); + linkedList.add(i); + } + Iterator iterator = list.iterator(); + Iterator linkedIterator = linkedList.iterator(); + while (iterator.hasNext()) { + System.out.println(iterator.next()); + } + System.out.println("---------------------"); + while (linkedIterator.hasNext()) { + System.out.println(linkedIterator.next()); + } + + System.out.println("---------------------"); + } +} diff --git a/src/com/juststarnew/designpattern/factorymethod/package-info.java b/src/com/juststarnew/designpattern/factorymethod/package-info.java index ac9046f..ddfd5c9 100644 --- a/src/com/juststarnew/designpattern/factorymethod/package-info.java +++ b/src/com/juststarnew/designpattern/factorymethod/package-info.java @@ -1,5 +1,9 @@ /** * 描述:工厂方法 + * FactoryMethod 是一个工厂方法定义为一个接口,然后由多个具体工厂具体实现,生产具体产品 + * 下面简单实现一种java集合框架Collection.Collection是实现类里都实现了不同的iterator方法, + * 所以,可以看成Iterator接口是抽象产品,而Collection的子类对Iterator的实现则可以 + * 理解为具体产品。工厂方法的意思就是定义一个参数规范,其中不同的实现由不同的工厂实现 * * @author zhangcai at 2020/4/29 17:48 * @version 1.0.0 From eabba68993e8e98718c2b18d80d23c197941cbc8 Mon Sep 17 00:00:00 2001 From: caizhang Date: Thu, 30 Apr 2020 16:25:36 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=8A=BD=E8=B1=A1?= =?UTF-8?q?=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../abstractfactory/AbstractFactory.java | 2 +- .../abstractfactory/AbstractFactory.java | 107 ++++++++++++++++++ .../abstractfactory/package-info.java | 9 ++ 3 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 src/com/juststarnew/designpattern/abstractfactory/AbstractFactory.java create mode 100644 src/com/juststarnew/designpattern/abstractfactory/package-info.java diff --git a/src/com/anxpp/designpattern/abstractfactory/AbstractFactory.java b/src/com/anxpp/designpattern/abstractfactory/AbstractFactory.java index 75dc28c..ba277ae 100644 --- a/src/com/anxpp/designpattern/abstractfactory/AbstractFactory.java +++ b/src/com/anxpp/designpattern/abstractfactory/AbstractFactory.java @@ -3,7 +3,7 @@ public class AbstractFactory { public static void main(String args[]){ IFactory bigfactory = new BigFactory(); - IFactory smallfactory = new BigFactory(); + IFactory smallfactory = new SmallFactory(); bigfactory.producePhone().run(); bigfactory.produceHeadset().play(); smallfactory.producePhone().run(); diff --git a/src/com/juststarnew/designpattern/abstractfactory/AbstractFactory.java b/src/com/juststarnew/designpattern/abstractfactory/AbstractFactory.java new file mode 100644 index 0000000..01e176c --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/AbstractFactory.java @@ -0,0 +1,107 @@ +package com.juststarnew.designpattern.abstractfactory; + +/** + * 描述:抽象工厂模式 + * + * @author zhangcai at 2020/4/30 15:57 + * @version 1.0.0 + */ +public class AbstractFactory { + public static void main(String[] args) { + IFactory factory1 = new AppleFactory(); + IFactory factory2 = new EditableAppleFactory(); + editableApple e1 = factory1.produceAppleEatable(); + e1.eat(); + apple a1 = factory1.produceApplePhone(); + a1.dial(); + apple a2 = factory2.produceApplePhone(); + a2.dial(); + editableApple e2 = factory2.produceAppleEatable(); + e2.eat(); + } + + + +} + +//抽象产品,苹果手机 +interface apple { + void dial(); +} +//抽象产品*2,真实苹果 +interface editableApple { + void eat(); +} +//工厂,原来的抽象工厂只生产一种产品,现在的工厂生产多种产品 +interface IFactory { + apple produceApplePhone(); + editableApple produceAppleEatable(); +} + +//具体产品 +class a08Apple implements apple{ + + @Override + public void dial() { + System.out.println("我是a08"); + } +} + +class a09Apple implements apple { + + @Override + public void dial() { + System.out.println("我是a09"); + } +} + +class redApple implements editableApple { + + @Override + public void eat() { + System.out.println("我是红苹果"); + } +} + +class greenApple implements editableApple { + + @Override + public void eat() { + System.out.println("我是青苹果"); + } +} + + + +//具体工厂 +class AppleFactory implements IFactory{ + + @Override + public apple produceApplePhone() { + return new a09Apple(); + } + + @Override + public editableApple produceAppleEatable() { + return new redApple(); + } +} + +//具体工厂 +class EditableAppleFactory implements IFactory { + + @Override + public apple produceApplePhone() { + return new a08Apple(); + } + + @Override + public editableApple produceAppleEatable() { + return new greenApple(); + } +} + + + + + diff --git a/src/com/juststarnew/designpattern/abstractfactory/package-info.java b/src/com/juststarnew/designpattern/abstractfactory/package-info.java new file mode 100644 index 0000000..42da56e --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/package-info.java @@ -0,0 +1,9 @@ +/** + * 描述:抽象工厂模式 + * 抽象工厂与工厂方法的区别是一个工厂不仅仅干一种活,而是可以生产多种产品。 + * 比如,一个生产手机的工厂,比如小米。不光生产手机,还会生产配件,耳机等。 + * + * @author zhangcai at 2020/4/30 15:51 + * @version 1.0.0 + */ +package com.juststarnew.designpattern.abstractfactory; \ No newline at end of file From 1b6e8e09397da828ee7fd10a53939e67bee25d2a Mon Sep 17 00:00:00 2001 From: caizhang Date: Thu, 30 Apr 2020 17:34:12 +0800 Subject: [PATCH 4/4] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E6=8A=BD=E8=B1=A1?= =?UTF-8?q?=E5=B7=A5=E5=8E=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iterator/CollectionFactory.java | 22 +++++++++++ .../iterator/CollectionIterator.java | 27 ++++++++++++++ .../abstractfactory/iterator/IFactory.java | 17 +++++++++ .../abstractfactory/iterator/Iterator.java | 12 ++++++ .../abstractfactory/iterator/MapIterator.java | 27 ++++++++++++++ .../abstractfactory/iterator/TestUse.java | 37 +++++++++++++++++++ .../iterator/package-info.java | 7 ++++ 7 files changed, 149 insertions(+) create mode 100644 src/com/juststarnew/designpattern/abstractfactory/iterator/CollectionFactory.java create mode 100644 src/com/juststarnew/designpattern/abstractfactory/iterator/CollectionIterator.java create mode 100644 src/com/juststarnew/designpattern/abstractfactory/iterator/IFactory.java create mode 100644 src/com/juststarnew/designpattern/abstractfactory/iterator/Iterator.java create mode 100644 src/com/juststarnew/designpattern/abstractfactory/iterator/MapIterator.java create mode 100644 src/com/juststarnew/designpattern/abstractfactory/iterator/TestUse.java create mode 100644 src/com/juststarnew/designpattern/abstractfactory/iterator/package-info.java diff --git a/src/com/juststarnew/designpattern/abstractfactory/iterator/CollectionFactory.java b/src/com/juststarnew/designpattern/abstractfactory/iterator/CollectionFactory.java new file mode 100644 index 0000000..352aac7 --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/iterator/CollectionFactory.java @@ -0,0 +1,22 @@ +package com.juststarnew.designpattern.abstractfactory.iterator; + +import java.util.Collection; +import java.util.Map; + +/** + * 描述:具体工厂 + * + * @author zhangcai at 2020/4/30 17:18 + * @version 1.0.0 + */ +public class CollectionFactory implements IFactory{ + @Override + public Iterator genCollectionIterator(Collection collection) { + return new CollectionIterator<>(collection); + } + + @Override + public Iterator genMapIterator(Map map) { + return new MapIterator<>(map); + } +} diff --git a/src/com/juststarnew/designpattern/abstractfactory/iterator/CollectionIterator.java b/src/com/juststarnew/designpattern/abstractfactory/iterator/CollectionIterator.java new file mode 100644 index 0000000..9c0e2bf --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/iterator/CollectionIterator.java @@ -0,0 +1,27 @@ +package com.juststarnew.designpattern.abstractfactory.iterator; + +import java.util.Collection; + +/** + * 描述:具体产品,使用了代理模式 + * + * @author zhangcai at 2020/4/30 17:19 + * @version 1.0.0 + */ +public class CollectionIterator implements Iterator{ + private java.util.Iterator iterator; + + public CollectionIterator(Collection collection) { + this.iterator = collection.iterator(); + } + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public T next() { + return iterator.next(); + } +} diff --git a/src/com/juststarnew/designpattern/abstractfactory/iterator/IFactory.java b/src/com/juststarnew/designpattern/abstractfactory/iterator/IFactory.java new file mode 100644 index 0000000..d17c214 --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/iterator/IFactory.java @@ -0,0 +1,17 @@ +package com.juststarnew.designpattern.abstractfactory.iterator; + +import java.util.Collection; +import java.util.Map; + +/** + * 描述:定义工厂,定义多个产品群。这里即返回遍历Collection + * 又返回Map的iterator + * + * @author zhangcai at 2020/4/30 17:13 + * @version 1.0.0 + */ +public interface IFactory { + public Iterator genCollectionIterator(Collection collection); + + public Iterator genMapIterator(Map map); +} diff --git a/src/com/juststarnew/designpattern/abstractfactory/iterator/Iterator.java b/src/com/juststarnew/designpattern/abstractfactory/iterator/Iterator.java new file mode 100644 index 0000000..2eedd6a --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/iterator/Iterator.java @@ -0,0 +1,12 @@ +package com.juststarnew.designpattern.abstractfactory.iterator; + +/** + * 描述:定义抽象产品,可以用来遍历Collection和Map + * + * @author zhangcai at 2020/4/30 17:15 + * @version 1.0.0 + */ +public interface Iterator { + boolean hasNext(); + Object next(); +} diff --git a/src/com/juststarnew/designpattern/abstractfactory/iterator/MapIterator.java b/src/com/juststarnew/designpattern/abstractfactory/iterator/MapIterator.java new file mode 100644 index 0000000..c9ded74 --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/iterator/MapIterator.java @@ -0,0 +1,27 @@ +package com.juststarnew.designpattern.abstractfactory.iterator; + +import java.util.Map; + +/** + * 描述:具体产品 + * + * @author zhangcai at 2020/4/30 17:21 + * @version 1.0.0 + */ +public class MapIterator implements Iterator { + private java.util.Iterator> iterator; + + public MapIterator(Map map) { + this.iterator = map.entrySet().iterator(); + } + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public Object next() { + return iterator.next().getValue(); + } +} diff --git a/src/com/juststarnew/designpattern/abstractfactory/iterator/TestUse.java b/src/com/juststarnew/designpattern/abstractfactory/iterator/TestUse.java new file mode 100644 index 0000000..23ed290 --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/iterator/TestUse.java @@ -0,0 +1,37 @@ +package com.juststarnew.designpattern.abstractfactory.iterator; + +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Map; + +/** + * 描述: + * + * @author zhangcai at 2020/4/30 17:25 + * @version 1.0.0 + */ +public class TestUse { + + public static void main(String[] args) { + Collection collection = new HashSet<>(); + Map map = new HashMap<>(); + for (int i = 0; i < 10; i++) { + collection.add(i); + map.put(i, i+"哈哈"); + } + CollectionFactory collectionFactory = new CollectionFactory<>(); + Iterator integerIterator = collectionFactory.genCollectionIterator(collection); + Iterator integerIterator1 = collectionFactory.genMapIterator(map); + while (integerIterator.hasNext()) { + System.out.println(integerIterator.next()); + } + System.out.println("----------------"); + while (integerIterator1.hasNext()) { + System.out.println(integerIterator1.next()); + } + + + } + +} diff --git a/src/com/juststarnew/designpattern/abstractfactory/iterator/package-info.java b/src/com/juststarnew/designpattern/abstractfactory/iterator/package-info.java new file mode 100644 index 0000000..590bb14 --- /dev/null +++ b/src/com/juststarnew/designpattern/abstractfactory/iterator/package-info.java @@ -0,0 +1,7 @@ +/** + * 描述:抽象工厂iterator举例 + * + * @author zhangcai at 2020/4/30 17:13 + * @version 1.0.0 + */ +package com.juststarnew.designpattern.abstractfactory.iterator; \ No newline at end of file