多个工厂方法模式
在普通工厂模式下改动SendFactory类就行.
1 2 3 4 5 6 7 8 9 10
| public class SendFactory { public Sender produceMail() { return new MailSender(); } public Sender produceSms() { return new SmsSender(); } }
|
改动SendFactoryTest类
1 2 3 4 5 6 7 8 9 10 11 12
| public class SendFactoryTest { public static void main(String[] args) { SendFactory factory = new SendFactory();
Sender sender = factory.produceMail(); sender.Send(); } }
|
静态工厂方法模式
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可.
1 2 3 4 5 6 7 8 9 10
| public class SendFactory { public static Sender produceMail() { return new MailSender(); } public static Sender produceSms() { return new SmsSender(); } }
|
1 2 3 4 5 6 7 8 9 10 11
| public class FactoryTest { public static void main(String[] args) {
Sender sender = SendFactory.produceMail(); sender.Send(); } }
|
抽象工厂方法模式
在建好上述的sender接口、MailSender类和SmsSender类后,建以下接口和类:
1 2 3 4
| public interface Provider { public abstract Sender produce(); }
|
1 2 3 4 5 6
| public class MailSendFactory implements Provider { @Override public Sender produce() { return new MailSender(); } }
|
1 2 3 4 5 6
| public class SmsSendFactory implements Provider { @Override public Sender produce() { return new SmsSender(); } }
|
编写测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class Test { public static void main(String[] args) {
Provider provider = new MailSendFactory(); Sender sender = provider.produce(); sender.Send(); } }
|
线性(顺序)查找算法
使用目标元素与样本数列中的第一个元素起依次比较。
若找到与目标元素相等的元素,则表示查找成功。
若目标元素与所有样本元素比较完毕也不相等,则表示查找失败。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| public class FindTest { public static int find(int[] arr, int num) { for(int i = 0; i < arr.length; i++) { if(num == arr[i]) { return i; } } return -1; }
public static void main(String[] args) { int[] brr = {10, 20, 30, 40, 50}; int ia = 25; int res = FindTest.find(brr, ia); if(-1 == res) { System.out.println(ia + "不存在!"); } else { System.out.println(ia + "在数组中的下标是:" + res); } } }
|
二分(折半)查找算法
假定样本数列中的元素是从小到大依次排序的.
使用目标元素与样本数列中的中间元素进行比较.
若目标元素与中间元素相等,则表示查找成功.
若目标元素小于中间元素,则去中间元素的左边进行查找.
若目标元素大于中间元素,则去中间元素的右边进行查找.
直到目标元素与所有该比较的元素比较完毕后也不相等,则表示查找失败.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| public class FindTest { public static int findBinary(int[] arr, int left, int right, int num) { if(left <= right) { int p = (left + right) / 2; if(num == arr[p]) { return p; } if(num < arr[p]) { return findBinary(arr, left, p-1, num); } return findBinary(arr, p+1, right, num); } return -1; }
public static void main(String[] args) { int[] brr = {10, 20, 30, 40, 50}; int ia = 25; int res = FindTest.findBinary(brr, 0, 4, ia); if(-1 == res) { System.out.println(ia + "不存在!"); } else { System.out.println(ia + "在数组中的下标是:" + res); } } }
|
冒泡排序算法(重中之重)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| public class SortTest { public static void bubble(int[] arr) { for(int i = 1; i < arr.length; i++) { boolean flag = true; for(int j = 0; j < arr.length-i; j++) { if(arr[j] > arr[j+1]) { int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; flag = false; } } if(flag) { break; } } }
public static void main(String[] args) { int[] brr = {10, 20, 5, 20, 15, 30, 8}; SortTest.bubble(brr); System.out.print("排序后的结果是:"); for(int i : brr) { System.out.print(i + " "); } System.out.println(); } }
|