结构

MySort.java   实际业务中我们可能会使用任意一种排序方法 
package pers.zander.edu.arithmetic.sort;
/**
* 排序接口
* @author
* @time 2016-5-10 上午9:55:05
*/
public interface MySort {
//排序抽象方法,子类自定义实现
public void insertSort(String name,int array[]); }

MySortErfenImpl.java

package pers.zander.edu.arithmetic.sort;
/**
* 二分法实现排序
* @author
* @time 2016-5-10 上午9:55:45
*/
public class MySortErfenImpl implements MySort{ @Override
public void insertSort(String name, int[] array) {
for (int i = 0; i < array.length; i++) {
int a = array[i];
int l = 0;
int r = i-1;
int m = 0;
while(l<=r){
m = (l+r)/2;
if(a<array[m]){
r = m-1;
}else{
l = m+1;
}
}
for (int j = i - 1; j >= l; j--) {
array[j+1]=array[j];
}
if(l!=i){
array[l]=a;
}
}
} }

MySortZhijieImpl.java

package pers.zander.edu.arithmetic.sort;
/**
* 直接法实现排序
* @author
* @time 2016-5-10 上午9:56:15
*/
public class MySortZhijieImpl implements MySort{ @Override
public void insertSort(String name,int[] array) {
for (int i = 1; i < array.length; i++) {
int a = array[i];
for (int j = 0; j < i; j++) {
int b = array[j];
if (a < b) {
int c = array[i];
array[i] = array[j];
array[j] = c;
}
}
} } }

MySortXierImpl.java

package pers.zander.edu.arithmetic.sort;
/**
* 希尔法实现排序
* @author
* @time 2016-5-10 上午9:56:01
*/
public class MySortXierImpl implements MySort{ @Override
public void insertSort(String name, int[] array) {
int l = array.length;
int s = 0;
int m = l/2;
while (true) {
m = m-1;
for (int i = 0; i < array.length-m; i++) {
s++;
if(array[i]>array[i+m]){
int temp = array[i];
array[i]=array[i+m];
array[i+m]=temp;
}
}
if(m==1){
break;
}
}
System.out.println(s);
} }

SortFactory.java   工厂抽象类

package pers.zander.edu.arithmetic.sort;
/**
* 排序工厂抽象类
* @author
* @time 2016-5-10 上午9:56:28
*/
public abstract class SortFactory implements MySort{ public abstract MySort createZhijie();
public abstract MySort createXier();
public abstract MySort createErfen(); public abstract MySort createSort(String name);
}

SortFactoryImpl.java 工厂实现类

package pers.zander.edu.arithmetic.sort;

/**
* 排序工厂实现类
* @author
* @time 2016-5-10 上午9:56:43
*/
public class SortFactoryImpl extends SortFactory{ @Override
public void insertSort(String name,int[] array) {
if("zhijie".equals(name)){
new MySortZhijieImpl().insertSort("",array);
}else if("erfen".equals(name)){
new MySortErfenImpl().insertSort("",array);
}else if("xier".equals(name)){
new MySortXierImpl().insertSort("",array);
}else if("maopao".equals(name)){
new MySortMaopaoImpl().insertSort("",array);
}
}
@Override
public MySort createSort(String name) {
if("zhijie".equals(name)){
return new MySortZhijieImpl();
}else if("erfen".equals(name)){
return new MySortErfenImpl();
}else if("xier".equals(name)){
return new MySortXierImpl();
}else{
return null;
}
} @Override
public MySortZhijieImpl createZhijie() {
// TODO Auto-generated method stub
return new MySortZhijieImpl();
} @Override
public MySortXierImpl createXier() {
// TODO Auto-generated method stub
return new MySortXierImpl();
} @Override
public MySortErfenImpl createErfen() {
// TODO Auto-generated method stub
return new MySortErfenImpl();
}
}

TestFactorySort.java

package pers.zander.edu.arithmetic.sort;
/**
* 测试类
* @author
* @time 2016-5-10 上午9:58:08
*/
public class TestFactorySort { public static void main(String[] args) {
SortFactory sf = new SortFactoryImpl();
int array[]={3,5,2,78,55,45,36,47,89,54,16,77,0,89};
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+",");
}
System.out.println("");
//1-在这里判断需要用哪个排序方法
// sf.createXier().insertSort("",array);
//2
// MySortZhijieImpl ms = (MySortZhijieImpl) sf.createSort("zhijie");
// if(ms!=null){
// ms.insertSort("",array);
// }
//3-推荐 代码简洁
sf.insertSort("maopao", array);
for (int i = 0; i < array.length; i++) {
System.out.print(array[i]+",");
}
}
}

欢迎各位大神来指教。。。

JAVA设计模式-工厂模式(代码示例)的更多相关文章

  1. 【设计模式】Java设计模式 -工厂模式

    [设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...

  2. 学习:java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...

  3. 一张图搞定Java设计模式——工厂模式! 就问你要不要学!

    小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...

  4. java设计模式—工厂模式

    一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...

  5. Java设计模式——工厂模式

    一.工厂模式分类 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: (1)简单工厂模式(Simp ...

  6. 10.Java设计模式 工厂模式,单例模式

    Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...

  7. Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)

    工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...

  8. java设计模式-工厂模式(springweb为例子)

    一般而言,工厂模式分为3种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种工厂模式逐层深入吧. 一,从springWeb.jar包使用抽象工厂模式的一个例子聊起 之前对spring各种痴迷,所以在需 ...

  9. Java设计模式の工厂模式

    -------------------------------------------------------- 目录:  一.序言 二.简单工厂模式 三.工厂方法模式 四.简单工厂和工厂方法模式的比 ...

  10. java设计模式--工厂模式

       所谓工厂,就是要造产品,比如一个小型砖瓦厂,只有一个窑,既能造砖又能造瓦,这种叫简单工厂模式.规模稍大一点呢,我多个窑,有的窑专门造砖,有的窑专门造瓦,想造别的,比如瓷砖,我再用个专门的窑,这种 ...

随机推荐

  1. linux 终止用户会话

    第一步使用 tty 命令 查看自己会话id:本例中会话id为1[root@localhost ~]# tty/dev/pts/1[root@localhost ~]# 第二步 使用 w 命令 查看当前 ...

  2. (转)SQL利用Case When Then多条件判断

    CASE     WHEN 条件1 THEN 结果1     WHEN 条件2 THEN 结果2     WHEN 条件3 THEN 结果3     WHEN 条件4 THEN 结果4 ....... ...

  3. http断点续传原理

    断点续传一是断点,一续传. 断点是在下载时,将下载文件分多片,同时进行多片一起下载,如果任务被暂停,暂停的位置就是断点. 续传就是未完成的下载再次开始时,会从上次的断点继续传送. 在下载(或上传)过程 ...

  4. Lanucherr 默认显示第几屏

    Launcher.java static final int SCREEN_COUNT = 5;static final int DEFAULT_SCREEN = 2;//第一页是从0开始计数,这里是 ...

  5. [转载]VIM命令合集

    Vim命令合集 http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html 命令历史 以:和/开头的命令都有历史纪录, ...

  6. c++11 auto

    auto 关键字指示编译器使用已声明变量的初始化表达式或 lambda 表达式参数来推导其类型. 在大多情况下,建议您使用 auto 关键字(除非您确实需要转换),因为此关键字可提供以下好处: 可靠性 ...

  7. VC++函数(win32_exe)

    1.windows输出,以对话框的方式. int MessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in ...

  8. 使用 PHP 读取文本(TXT)文件 并分页显示

    <?php //----------------you should save this file as m.php---------------- session_start(); if (e ...

  9. css 溢出文本显示省略号

    这个标题其实已经是一个老生常谈的问题了.很多时候,比如网站最基本的文章列表,标题会很长,而显示列表的区域宽度却没有这么宽,这时候最正常的做法就是 让超出宽度的部分文字用省略号(…)来表示.通常做法是网 ...

  10. mongodb3 权限认证问题总结

    mongodb3 权限认证问题总结 标签(空格分隔): mongodb 权限 数据库 认证 ubuntu用户安装最新版本mongodb 添加key sudo apt-key adv --keyserv ...