JAVA设计模式-工厂模式(代码示例)
结构
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设计模式-工厂模式(代码示例)的更多相关文章
- 【设计模式】Java设计模式 -工厂模式
[设计模式]Java设计模式 -工厂模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 分享学习心得,欢迎指正,大家一起学习成长! 目 ...
- 学习:java设计模式—工厂模式
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: 1)简单工厂模式(Simple Facto ...
- 一张图搞定Java设计模式——工厂模式! 就问你要不要学!
小编今天分享的内容是Java设计模式之工厂模式. 收藏之前,务必点个赞,这对小编能否在头条继续给大家分享Java的知识很重要,谢谢!文末有投票,你想了解Java的哪一部分内容,请反馈给我. 获取学习资 ...
- java设计模式—工厂模式
一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类:1)简单工厂模式(Simple Factor ...
- Java设计模式——工厂模式
一.工厂模式分类 工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java与模式>中分为三类: (1)简单工厂模式(Simp ...
- 10.Java设计模式 工厂模式,单例模式
Java 之工厂方法和抽象工厂模式 1. 概念 工厂方法:一抽象产品类派生出多个具体产品类:一抽象工厂类派生出多个具体工厂类:每个具体工厂类只能创建一个具体产品类的实例. 即定义一个创建对象的接口(即 ...
- Java设计模式---工厂模式(简单工厂、工厂方法、抽象工厂)
工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory M ...
- java设计模式-工厂模式(springweb为例子)
一般而言,工厂模式分为3种,简单工厂模式,工厂方法模式,抽象工厂模式.这三种工厂模式逐层深入吧. 一,从springWeb.jar包使用抽象工厂模式的一个例子聊起 之前对spring各种痴迷,所以在需 ...
- Java设计模式の工厂模式
-------------------------------------------------------- 目录: 一.序言 二.简单工厂模式 三.工厂方法模式 四.简单工厂和工厂方法模式的比 ...
- java设计模式--工厂模式
所谓工厂,就是要造产品,比如一个小型砖瓦厂,只有一个窑,既能造砖又能造瓦,这种叫简单工厂模式.规模稍大一点呢,我多个窑,有的窑专门造砖,有的窑专门造瓦,想造别的,比如瓷砖,我再用个专门的窑,这种 ...
随机推荐
- SQL Server常用脚本
一.迁移登录用户脚本: select 'create login [' + p.name + '] ' + case when p.type in('U','G') then 'from window ...
- (二)backbone - DEMO - user list
Demo介绍 学习了如何基本的使用Backbone,展示用户信息 使用JQuery操作DOM,backbone.localStorage.js操作localstorage 大体实现 •创建user M ...
- php 与 jquery中$.post()与attr()方法的简单实例 amaze modal 模态窗口
$(selector).attr(attribute,value)$.post() 在jqery中有这样一个方法,$.post()下面就这个方法做一个简单的实例: jQuery.post( url, ...
- Monkey and Banana(HDU 1069 动态规划)
Monkey and Banana Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- Scala学习文档-列表的使用
注:列表是不可变的,不能通过赋值改变列表的元素 列表具有递归结构,数组是连续的 scala里的列表类型是协变的? --> scala中的逆变与协变 分治原则 //自定义实现:::操作符 def ...
- IOS 面试 --- 动画 block
1 谈谈对Block 的理解?并写出一个使用Block执行UIVew动画? 答案:Block是可以获取其他函数局部变量的匿名函数,其不但方便开发,并且可以大幅提高应用的执行效率(多核心CPU可直接处理 ...
- 新浪研发中心: Berkeley DB 使用经验总结
http://blog.sina.com.cn/s/blog_502c8cc40100yqkj.html NoSQL是现在互联网Web2.0时代备受关注的技术之一,被用来存储大量的非关系型的数据.Be ...
- Tuning Radio Resource in an Overlay Cognitive Radio Network for TCP: Greed Isn’t Good
好吧,这是09年七月发布在IEEE Communications Magazine的一篇文章. 核心二个词:overlay cognitive radio network,tcp 讲的是,在认知无线网 ...
- PADSPOWERPCB中怎样去隐藏一些PIN脚
由于一些板,尤其是U盘等面积很小的板,FLASH中只使用了为数不多的几个PIN,为了可以让其它PIN下面可以走线,增加GND网络的面积,所以实际操作中要隐藏一些PIN.这就需要怎么操作呢! 我们要做的 ...
- Qt自定义带游标的slider,在滑块正上方显示当前值(非常有意思,继承QSlider之后增加一个QLabel,然后不断移动它)
首先自定义QSlider的子类MyCustomSlider,如下所示. mycustomslider.h #ifndef MYCUSTOMSLIDER_H #define MYCUSTOMSLIDER ...