java工厂模式代码例子(简单的工厂模式java)

本文目录一览:

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

这个应该比较简单一点。

某系统日志记录器要求支持多种日志记录方式,如文件记录、数据库记录等,且用户可以根据要求动态选择日志记录方式。现使用工厂方法模式设计该系统,并写出相应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工厂模式和单体模式

单体模式 很简单,就是将构造函数变为私有,那么就不能通过new 来创建对象。 同时创建一个 共有的静态的方法来获得实例,代码如下:

class Test{

private static Test instance = null;

private Test(){}

public static Test getInstance(){

if( instance == null ){

instance = new Test();

}

return instance ;

}

}

工厂模式有三个参与者,抽象产品(Product)、工厂(Creator)和具体产品(ConcreteProduct)。客户只会看到工厂和抽象产品。

public interface Product{

public String getName();

}

public class ConcreteProduct implements Product{

public String getName(){

return “产品1”;

}

}

public class Creator{

public static Product create1(){

return new ConcreteProduct();

}

}

工厂模式的作用在于将创建具体产品的方法由工厂类控制,客户只需要知道产品的抽象类型

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();

}

}

java简单工厂模式是什么

简单工厂模式的:简单工厂模式是类的创建模式,又叫做静态工厂方法(Static Factory Method)模式。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。

那么简单工厂模式是在什么场景下使用呢,下面就以本人的理解举例说明:

就拿登录功能来说,假如应用系统需要支持多种登录方式如:口令认证、域认证(口令认证通常是去数据库中验证用户,而域认证则是需要到微软的域中验证用户)。那么自然的做法就是建立一个各种登录方式都适用的接口,如下图所示:

public interface Login {

//登录验证

public boolean verify(String name , String password);

}

public class DomainLogin implements Login {

@Override

public boolean verify(String name, String password) {

// TODO Auto-generated method stub

/**

* 业务逻辑

*/

return true;

}

}

public class PasswordLogin implements Login {

@Override

public boolean verify(String name, String password) {

// TODO Auto-generated method stub

/**

* 业务逻辑

*/

return true;

}

}

我们还需要一个工厂类LoginManager,根据调用者不同的要求,创建出不同的登录对象并返回。而如果碰到不合法的要求,会返回一个Runtime异常。

public class LoginManager {

public static Login factory(String type){

if(type.equals(“password”)){

return new PasswordLogin();

}else if(type.equals(“passcode”)){

return new DomainLogin();

}else{

/**

* 这里抛出一个自定义异常会更恰当

*/

throw new RuntimeException(“没有找到登录类型”);

}

}

}

测试类:

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

String loginType = “password”;

String name = “name”;

String password = “password”;

Login login = LoginManager.factory(loginType);

boolean bool = login.verify(name, password);

if (bool) {

/**

* 业务逻辑

*/

} else {

/**

* 业务逻辑

*/

}

}

}

简单工厂模式的结构如下图:

我们可以设想一下真实的场景,如果把上面的Test当做一个servlet的话,当客户端发起登录请求——请求交给服务端的Servlet——Servlet根据客户端传递的loginType调用工厂类LoginManager的factory()方法——factory()方法根据参数loginType创建相应的登录验证类(DomainLogin或PasswordLogin)并返回——登录验证类调用方法verify()验证用户名密码是否正确

假如不使用简单工厂模式则验证登录Servlet代码如下(假设Test为一个Servlet,变量loginType、name、password表示从客户端传递过来的参数):

public class Test {

public static void main(String[] args) {

// TODO Auto-generated method stub

String loginType = “password”;

String name = “name”;

String password = “password”;

//处理口令认证

if(loginType.equals(“password”)){

PasswordLogin passwordLogin = new PasswordLogin();

boolean bool = passwordLogin.verify(name, password);

if (bool) {

/**

* 业务逻辑

*/

} else {

/**

* 业务逻辑

*/

}

}

//处理域认证

else if(loginType.equals(“passcode”)){

DomainLogin domainLogin = new DomainLogin();

boolean bool = domainLogin.verify(name, password);

if (bool) {

/**

* 业务逻辑

*/

} else {

/**

* 业务逻辑

*/

}

}else{

/**

* 业务逻辑

*/

}

}

}

上面的代码会不会很蛋疼啊。。。呵呵

《JAVA与模式》一书中使用java.text.DataFormat类作为简单工厂模式的典型例子叙述。

简单工厂模式的优点

模式的核心是工厂类。这个类含有必要的逻辑判断,可以决定在什么时候创建哪一个登录验证类的实例,而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,当系统引入新的登录方式的时候无需修改调用者。

简单工厂模式的缺点

这个工厂类集中了所以的创建逻辑,当有复杂的多层次等级结构时,所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,整个系统都会受到影响。

写一个抽象工厂模式 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;

}

原创文章,作者:XVYAA,如若转载,请注明出处:https://www.506064.com/n/130306.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
XVYAAXVYAA
上一篇 2024-10-03 23:28
下一篇 2024-10-03 23:28

相关推荐

  • Python周杰伦代码用法介绍

    本文将从多个方面对Python周杰伦代码进行详细的阐述。 一、代码介绍 from urllib.request import urlopen from bs4 import Bea…

    编程 2025-04-29
  • Python字符串宽度不限制怎么打代码

    本文将为大家详细介绍Python字符串宽度不限制时如何打代码的几个方面。 一、保持代码风格的统一 在Python字符串宽度不限制的情况下,我们可以写出很长很长的一行代码。但是,为了…

    编程 2025-04-29
  • Python基础代码用法介绍

    本文将从多个方面对Python基础代码进行解析和详细阐述,力求让读者深刻理解Python基础代码。通过本文的学习,相信大家对Python的学习和应用会更加轻松和高效。 一、变量和数…

    编程 2025-04-29
  • Python满天星代码:让编程变得更加简单

    本文将从多个方面详细阐述Python满天星代码,为大家介绍它的优点以及如何在编程中使用。无论是刚刚接触编程还是资深程序员,都能从中获得一定的收获。 一、简介 Python满天星代码…

    编程 2025-04-29
  • 仓库管理系统代码设计Python

    这篇文章将详细探讨如何设计一个基于Python的仓库管理系统。 一、基本需求 在着手设计之前,我们首先需要确定仓库管理系统的基本需求。 我们可以将需求分为以下几个方面: 1、库存管…

    编程 2025-04-29
  • 写代码新手教程

    本文将从语言选择、学习方法、编码规范以及常见问题解答等多个方面,为编程新手提供实用、简明的教程。 一、语言选择 作为编程新手,选择一门编程语言是很关键的一步。以下是几个有代表性的编…

    编程 2025-04-29
  • Python实现简易心形代码

    在这个文章中,我们将会介绍如何用Python语言编写一个非常简单的代码来生成一个心形图案。我们将会从安装Python开始介绍,逐步深入了解如何实现这一任务。 一、安装Python …

    编程 2025-04-29
  • 怎么写不影响Python运行的长段代码

    在Python编程的过程中,我们不可避免地需要编写一些长段代码,包括函数、类、复杂的控制语句等等。在编写这些代码时,我们需要考虑代码可读性、易用性以及对Python运行性能的影响。…

    编程 2025-04-29
  • 北化教务管理系统介绍及开发代码示例

    本文将从多个方面对北化教务管理系统进行介绍及开发代码示例,帮助开发者更好地理解和应用该系统。 一、项目介绍 北化教务管理系统是一款针对高校学生和教职工的综合信息管理系统。系统实现的…

    编程 2025-04-29
  • Python爱心代码动态

    本文将从多个方面详细阐述Python爱心代码动态,包括实现基本原理、应用场景、代码示例等。 一、实现基本原理 Python爱心代码动态使用turtle模块实现。在绘制一个心形的基础…

    编程 2025-04-29

发表回复

登录后才能评论