工厂模式java,工厂模式怎么恢复出厂设置

本文目录一览:

java中的工厂模式是什么意思?

工厂模式简单的讲就是用工厂方法代替了new的操作,

在通俗点就是说,你new一个对象的时候直接调用工厂方法就行了,

在编程时,需要定义一个工厂接口,由不同的的子类去实现,再定一个具体工厂类,定义一个产生实例的方法,我们通过这个方法来获得实例就行了,

Java的工厂模式有哪一些,分别有什么作用,一般用在哪些地方?

我简单的说下,举个例子,当我们的程序结构比较繁杂时,比如有100个类,而类中又有很多方法,这些方法之间都互相有依赖关系,也就是一个方法之间的某段逻辑处理需要用到另一个类中的代码逻辑,这种时候对于整个程序而言是非常不利于开发的(我们需要考虑到很多类、方法之间的耦合问题),那么就有一个概念了,也就是面对接口编程。通俗的说就是把类中的方法封装起来,外部调用的人完全不需要考虑方法是如何实现的,但是这样做也有一个不好的地方,我们的接口是不提供方法实现的,而需要在类中实现接口的方法。那么问题产生了,我们在new接口对象的时候需要明确的知道他的实例类。

想象一下,如果程序在继续庞大,接口非常多,接口实例类非常多,这样又会产生我们之前的问题(我们需要考虑到很多类、方法之间的耦合问题)那么这个时候就产生了一中设计思想,也就是工厂模式,这种模式的核心思想就是管理接口的实例对象,把接口和实例对象之间的关系封装起来处理,外部需要用到某个接口的实例时,由工厂进行分配,而不需要关注具体是哪个实例。

如果你做到比较复杂的程序时你应该就能体会到了。

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

}

}

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

(0)
ILCCILCC
上一篇 2024-10-04
下一篇 2024-10-04

相关推荐

  • ps提取字并修改文字图解,ps提取图片文字编辑

    本文目录一览: 1、如何用ps修改图片上的文字 2、如何ps修改图片上的文字 3、在ps里面如何改图片中的文字 4、用ps怎么改图片上的文字与数字 如何用ps修改图片上的文字 用p…

    编程 2024-10-04
  • Python断言错误:如何快速排查代码中的错误

    一、错误类型及原因分析 在Python中,断言错误指的是使用assert关键字的预测条件未满足时所引发的错误。例如,下面的代码中就会抛出一个断言错误: assert a == 5 …

    编程 2024-10-04
  • 如何保存网页图片?

    现代互联网时代,网页中的图片已经成为了信息传播的重要组成部分。在我们使用互联网时,有时候会遇到想要保存网页中的一些图片到本地电脑的情况。如何高效地保存网页图片?本文将从多个方面对保…

    编程 2024-10-03
  • 从多维数组到一维数组的转换

    多维数组是常用的数据结构之一,它是由多个一维数组组成的。如果将多维数组转换为一维数组,可以简化数据结构,方便数据的处理和传递。在本文中,我们将从多个方面介绍如何将多维数组转化为一维…

    编程 2024-10-03
  • Mybatis Cursor详解

    一、什么是Mybatis Cursor? Mybatis Cursor是Mybatis提供的一个API,用于处理大量数据时占用内存过高的问题。它是对JDBC ResultSet游标…

    编程 2024-10-11
  • 用php获取页面标题,php设置标题

    本文目录一览: 1、求一个简易的php爬虫提取网页的title 2、php网站,全站都是一个标题,文章页面的标题也是首页的,怎么调用上文章的题目啊, 3、php获取网页title问…

    编程 2024-10-04
  • mysql数据库设置怎么打开(数据库怎么开启)

    本文目录一览: 1、怎么启动mysql数据库服务器 2、如何打开Mysql数据库 3、如何打开mysql数据库 4、怎么用命令打开mysql数据库操作页面 5、mysql怎么打开啊…

    编程 2024-10-03
  • 使用CSS initial属性来设置初始值,实现更具有针对性的网页设计

    CSS(Cascading Style Sheets)是一种用于显示HTML内容外观的面向样式的语言。随着Web应用越来越复杂,CSS由最初作为样式工具的简单语言逐渐转变为一个强大…

    编程 2024-10-03
  • c语言cpu频率,cpu频率是

    本文目录一览: 1、c语言死循环导致cpu飙高怎么处理 2、c语言的cpu占用率 3、C语言怎么取CPU的各项信息 4、C语言延时程序中,延时时间是如何计算出来的. (假如我想延时…

    编程 2024-10-04
  • 如何查看数据库版本

    一、通过SQL查询系统表 每种数据库都提供了版本信息的系统表,可以通过查询这些表获取数据库的版本信息。 — 查询 MySQL 数据库版本 SELECT VERSION(); –…

    编程 2024-10-04

发表回复

登录后才能评论