gpt4 book ai didi

java设计模式之简单工厂模式简述

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 24 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章java设计模式之简单工厂模式简述由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

简单工厂模式的概念 。

就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。  。

简单工厂模式的UML图 。

java设计模式之简单工厂模式简述

简单工厂模式代码 学习简单工厂模式的时候我用的是一个与人类有相关的例子。人类在世界分为男人和女人,首先定义一个Human产品的抽象接口  。

java" id="highlighter_22633">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/**
  * This is factory patter package
  */
package com.roc.factory;
 
/**
  * 产品的抽象接口 人类
  * @author liaowp
  *
  */
public interface Human {
 
  public void say();
 
}

然后定义男人和女人,同样都有说话的方法。  。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
  * This is factory patter package
  */
package com.roc.factory;
 
/**
  * man 男人
  * @author liaowp
  *
  */
public class Man implements Human {
 
  /* say method
  * @see com.roc.factory.Human#say()
  */
  @Override
  public void say() {
  System.out.println( "男人" );
  }
 
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
  * This is factory patter package
  */
package com.roc.factory;
 
/**女人
  * @author liaowp
  *
  */
public class Woman implements Human {
 
  /* say method
  * @see com.roc.factory.Human#say()
  */
  @Override
  public void say() {
  System.out.println( "女人" );
  }
 
}

最后写一个工厂类,用来创造男人和女人。第一种方式是使用逻辑判断的方式实现的。  。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.roc.factory;
/**
  * 简单工厂
  * @author liaowp
  *
  */
public class SampleFactory {
  public static Human makeHuman(String type){
  if (type.equals( "man" )){
   Human man = new Man();
   return man;
  } else if (type.equals( "womman" )){
   Human woman = new Woman();
   return woman;
  } else {
   System.out.println( "生产不出来" );
   return null ;
 
  }
}

第二方式是使用java的放射实现的,我觉得这一类的实现方式比较好。  。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
package com.roc.factory;
/**
  * 简单工厂放射实现
  * @author liaowp
  *
  */
public class SampleFactory1 {
  public static Human makeHuman(Class c){
  Human human = null ;
  try {
   human = (Human) Class.forName(c.getName()).newInstance();
  } catch (InstantiationException e) {
   // TODO Auto-generated catch block
   System.out.println( "不支持抽象类或接口" );
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
   System.out.println( "没有足够权限,即不能访问私有对象" );
  } catch (ClassNotFoundException e) {
   // TODO Auto-generated catch block
   System.out.println( "类不存在" );
   e.printStackTrace();
  }
  return human;
  }
}

最后是客户端的代码  。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package com.roc.factory;
/**
  * 简单工厂测试
  * @author liaowp
  *
  */
public class Client {
  public static void main(String[] args) {
// Human man = SampleFactory.makeHuman("man");
// man.say();
// Human womman = SampleFactory.makeHuman("womman");
// womman.say();
// Human test = SampleFactory.makeHuman("tttt");
 
  Human man = SampleFactory1.makeHuman(Man. class );
  man.say();
  Human woman = SampleFactory1.makeHuman(Woman. class );
  woman.say();
  }
}

简单工厂模式应用场景  。

优点:工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化.

缺点:由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利; 。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我.

最后此篇关于java设计模式之简单工厂模式简述的文章就讲到这里了,如果你想了解更多关于java设计模式之简单工厂模式简述的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com