我们专注攀枝花网站设计 攀枝花网站制作 攀枝花网站建设
成都网站建设公司服务热线:400-028-6601

网站建设知识

十年网站开发经验 + 多家企业客户 + 靠谱的建站团队

量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决

工厂模式java源代码 java简单工厂模式及代码

求java工厂模式的一个简单代码例子,尽量简单

这个应该比较简单一点。

成都创新互联公司是一家专业提供阜新企业网站建设,专注与成都网站设计、成都做网站、HTML5、小程序制作等业务。10年已为阜新众多企业、政府机构等服务。创新互联专业网络公司优惠进行中。

某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式。现使用工厂方法模式设计该系统,并写出相应Java代码。

interface Log{

public void writeLog();

}

class FileLog implements Log{

public void writeLog(){

System.out.println("文件记录");

}

}

class DatabaseLog implements Log{

public void writeLog(){

System.out.println("数据库记录");

}

}

interface LogFactory{

public Log createLog();

}

class FileLogFactory implements LogFactory{

public Log createLog(){

return new FileLog();

}

}

class DatabaseLogFactory implements LogFactory{

public Log createLog(){

return new DatabaseLog();

}

}

public class Client{

public static void main(String[] args) {

try{

Log log;

LogFactory factory;

//这里可以改成使用DOM和Java反射机制读取XML文件,获取工厂类名

factory=new DatabaseLogFactory ();

log=factory.createLog();

log.writeLog();

}

catch(Exception e){

System.out.println(e.getMessage());

}

}

}

java 抽象工厂模式

工厂模式在项目中是常常用到的,有人说只有大项目才会用到,小项目是体会不出来.其实使用设计模式与项目的大小没有实质性的联系.设计模式是经验的总结而不是衡量项目大小的标准.

以开发项目的DAO层为例,在项目中客户的需求是常常变动的,临时更换数据库的需求也是常常发生的,那我们要如何解决跨数据库的功能,这里就要使用到抽象工厂模式了.工厂模式常常用于创建多系列化的对象(如Orale系列,MySql系列)

1.首先定义相关接口(与平常的做法没什么区别)

Java代码

// 角色表DAO接口

interface IroleDao {

void insert();

void update();

}

// 用户表DAO接口

interface IuserDao {

void find();

void delete();

}

// 角色表DAO接口

interface IroleDao {

void insert();

void update();

}

// 用户表DAO接口

interface IuserDao {

void find();

void delete();

} 2.不同的数据库有不同的SQL语句所以实现时必须分数据库来实现

Java代码

// 用户表Oralce数据库DAO

class OracleuserDao implements IuserDao {

public void delete() {

System.out.println("Oralce 删除用户表数据");

}

public void find() {

System.out.println("Oralce 查询用户表数据");

}

}

// 用户表MySql数据库DAO

class MySqluserDao implements IuserDao {

public void delete() {

System.out.println("MySql 删除用户数据");

}

public void find() {

System.out.println("MySql 查询用户数据");

}

}

// 角色表Oracle数据库DAO

class OracleroleDao implements IroleDao {

public void insert() {

System.out.println("Oralce 对角色表插入数据");

}

public void update() {

System.out.println("Oracle 对角色表更新数据");

}

}

// 角色表MySql数据库DAO

class MySqlroleDAO implements IroleDao {

public void insert() {

System.out.println("MySql 对角色表插入数据");

}

public void update() {

System.out.println("Mysql 对角色表更新数据");

}

}

// 用户表Oralce数据库DAO

class OracleuserDao implements IuserDao {

public void delete() {

System.out.println("Oralce 删除用户表数据");

}

public void find() {

System.out.println("Oralce 查询用户表数据");

}

}

// 用户表MySql数据库DAO

class MySqluserDao implements IuserDao {

public void delete() {

System.out.println("MySql 删除用户数据");

}

public void find() {

System.out.println("MySql 查询用户数据");

}

}

// 角色表Oracle数据库DAO

class OracleroleDao implements IroleDao {

public void insert() {

System.out.println("Oralce 对角色表插入数据");

}

public void update() {

System.out.println("Oracle 对角色表更新数据");

}

}

// 角色表MySql数据库DAO

class MySqlroleDAO implements IroleDao {

public void insert() {

System.out.println("MySql 对角色表插入数据");

}

public void update() {

System.out.println("Mysql 对角色表更新数据");

}

}

这里增加了一套DAO的实现 (与平时有所不同,如果有10个数据库就要加上10种不同的实现,比较麻烦呀)

3.定义DAO工厂接口与实现(利用java反射机制生产出你需要的DAO如:userDAO,roleDao)

Java代码

// DAO工厂

abstract class DaoFactory {

public static DaoFactory getInstance(String classname) {

DaoFactory dao = null;

try {

dao = (DaoFactory) Class.forName(classname).newInstance();

} catch (Exception e) {

e.printStackTrace();

}

return dao;

}

abstract IuserDao getuserdao();

abstract IroleDao getroledao();

}

// Oralce工厂

class OracleFactory extends DaoFactory {

public IroleDao getroledao() {

return new OracleroleDao();

}

public IuserDao getuserdao() {

return new OracleuserDao();

}

}

// MySql工厂

class MysqlFactory extends DaoFactory {

public IroleDao getroledao() {

return new MySqlroleDAO();

}

public IuserDao getuserdao() {

return new MySqluserDao();

}

}

// DAO工厂

abstract class DaoFactory {

public static DaoFactory getInstance(String classname) {

DaoFactory dao = null;

try {

dao = (DaoFactory) Class.forName(classname).newInstance();

} catch (Exception e) {

e.printStackTrace();

}

return dao;

}

abstract IuserDao getuserdao();

abstract IroleDao getroledao();

}

// Oralce工厂

class OracleFactory extends DaoFactory {

public IroleDao getroledao() {

return new OracleroleDao();

}

public IuserDao getuserdao() {

return new OracleuserDao();

}

}

// MySql工厂

class MysqlFactory extends DaoFactory {

public IroleDao getroledao() {

return new MySqlroleDAO();

}

public IuserDao getuserdao() {

return new MySqluserDao();

}

}

4. 定义配置文件

Java代码

class Config {

// Oralce

static final String ORALCE = "org.abc.OracleFactory";

static final String MYSQL = "org.abc.MysqlFactory";

}

class Config {

// Oralce

static final String ORALCE = "org.abc.OracleFactory";

static final String MYSQL = "org.abc.MysqlFactory";

}

配置文件可以定义到XML中去(好处:修改配置项之后不需要对JAVA文件进行编译.)

5.测试你的输出的DAO

Java代码

public class Dao {

public static void main(String[] args) {

DaoFactory.getInstance(Config.ORALCE).getroledao().insert();

DaoFactory.getInstance(Config.MYSQL).getroledao().insert();

}

}

public class Dao {

public static void main(String[] args) {

DaoFactory.getInstance(Config.ORALCE).getroledao().insert();

DaoFactory.getInstance(Config.MYSQL).getroledao().insert();

}

}

总结

使用条件:一系列接口有一系列的实现

如上IuserDao、IroleDao等一系列的接口,他们可以有一系列的实现(Oracle方式、MySql方式)

OracleuserDao、OracleroleDao、MySqluserDao、MySqlroleDAO

组成元素(以上面例子)

一系列接口:IuserDao、IroleDao

一系列实现:Oracle系列、MySql系列

系列工厂类:Oracle系列工厂类、MySql系列工厂类(必须继承抽象工厂类)

抽象工厂类:DaoFactory

写一个抽象工厂模式 java实例 出来

工厂模式java实例如下:

public interface Work {

void doWork();

}

ConcreteProduct

public class StudentWork implements Work {

public void doWork() {

   System.out.println("学生做作业!");

}

}

public class TeacherWork implements Work {

public void doWork() {

   System.out.println("老师审批作业!");

}

}

生产者

public interface IWorkFactory {

Work getWork();

}

ConcreteCreator

public class StudentWorkFactory implements IWorkFactory {

public Work getWork() {

   return new StudentWork();

}

}

public class TeacherWorkFactory implements IWorkFactory {

public Work getWork() {

   return new TeacherWork();

}

}

Test

public class Test {

public static void main(String[] args) {

   IWorkFactory studentWorkFactory = new StudentWorkFactory();

   studentWorkFactory.getWork().doWork();

   

   IWorkFactory teacherWorkFactory = new TeacherWorkFactory();

   teacherWorkFactory.getWork().doWork();

}

}

字符串反转如下:

public String getReverseStr(String str)

{

String reverseStr = "";

if (null != str !str.equals(""))

{

  for (int i = 1 ; i =str.length(); i++){

        reverseStr += str.charAt(str.length() - i);

        // 依次按与原字符串相反的顺序拼装字符串,内部会自动进行类型转换

        //str.length() - i刚好是str的下标,因为i是从1开始

  }

}

return reverseStr;

}

冒泡排序算法,从小到大

public int[] sortArr(int[] targetArr){

     //小到大的排序

       int temp = 0;

       for(int i = 0;itargetArr.length;i++){

           for(int j = i;jtargetArr.length;j++){

               if(targetArr[i]targetArr[j]){

                   temp = targetArr[i];

                   targetArr[i] = targetArr[j];

                   targetArr[j] = temp;

                  }

            }

       }

    return targetArr;

}

用java 编写程序写出简单的工厂模式?

java中工厂模式分为:

简单工厂模式(Simple Factory) 

2. 工厂方法模式(Factory Method) 

3. 抽象工厂模式(Abstract Factory)

每种方法的实现不同

提供一个简单工厂模式的案例:

public abstract class Woman {

private String mySkill;

public String getMySkill() {

return mySkill;

}

public Woman() {

//System.out.println("我是女人");

}

public void setMySkill(String mySkill) {

this.mySkill = mySkill;

}

}

----------------------------

public class LovelinessWoman extends Woman{

/*

* 可爱型女人

*/

public LovelinessWoman()

{

String mySkill="撒过娇、出过轨、勾引领导下过水";

  this.setMySkill(mySkill);

}

}

-----------------------------

public class SteelinessWoman extends Woman{

/*

* 冷酷型女人

*/

public SteelinessWoman()

{

String mySkill="装过神、弄过鬼,跟别人老公亲过嘴";

  this.setMySkill(mySkill);

}

}

--------------------------------------

public class WomanMakeFactory {

public Woman findWoman(int typeID) {

switch (typeID) {

case 1:

return new LovelinessWoman();

case 2:

return new VirtuousWoman();

case 3:

return new SteelinessWoman();

default:

return null;

}

}

public Woman findWoman(String type) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

/*

* Type t = Type.GetType("SimpleFactory." + type);

* Woman wm =

* (Woman)Activator.CreateInstance(t); return wm;

*/

String string="cn.jbit.design.simplefactory."+type;

Class c = Class.forName(string);

Woman wm = (Woman) c.newInstance();

return wm;

}

}

-------------------------

调用

public class Test2 {

/**

* @param args

* @throws IllegalAccessException

* @throws InstantiationException

* @throws ClassNotFoundException

*/

public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {

Scanner input=new Scanner(System.in);

boolean sel=false;

do {

System.out.println("请选择你要找的女人的类型");

System.out.println("LovelinessWoman:可爱型女人 VirtuousWoman:善良型女人 SteelinessWoman:冷酷型女人");

String typeid=input.next();

       WomanMakeFactory factory = new WomanMakeFactory();

       Woman wm=factory.findWoman(typeid);

       System.out.println("该类型女人的新标准:");

       System.out.println(wm.getMySkill());

     

       System.out.println("还想看看别的类型吗?y代表想,n代表再也不想了");

     

       sel=input.next().equals("y");

} while (sel);

}

}


名称栏目:工厂模式java源代码 java简单工厂模式及代码
分享地址:http://shouzuofang.com/article/doocihg.html

其他资讯