大话设计模式(一)简单工厂模式

举报
SHQ1874009 发表于 2020/12/29 23:04:03 2020/12/29
【摘要】 大话设计模式(一)简单工厂模式       今天主要讲解简单工厂模式即静态工厂设计模式。       其中,简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 简单工厂模式 包含的角色及其职责       1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部...

大话设计模式(一)简单工厂模式

      今天主要讲解简单工厂模式即静态工厂设计模式。

      其中,简单工厂模式属于类的创建型模式,又叫做静态工厂方法模式。通过专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

简单工厂模式

包含的角色及其职责

      1.工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
      2.抽象(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
      3.具体产品(Concrete Product)角色 简单工厂模式所创建的具体实例对象。

UML图

优缺点

           简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。违背了OCP(开放-封闭原则,即对扩展开放,对修改封闭。开放-封闭原则是面向对象设计的核心所在。遵循这个原则可以提升软件的可维护、可扩展、可复用、灵活性好。) 在这个模式中,工厂类是整个模式的关键所在。它包含必要的判断逻辑,能够根据外界给定的信息,决定究竟应该创建哪个具体类对象。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

            不难发现,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。另外,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。 示例图如图1-1所示:

示例代码


   
  1. package cn.edu.ujn.designpattern;
  2. interface Fruit{
  3. // 种植
  4. public void plant();
  5. // 生长
  6. public void grow();
  7. // 收获
  8. public void harvest();
  9. }
  10. class Apple implements Fruit{
  11. @Override
  12. public void grow() {
  13. System.out.println("Apple is growing.");
  14. }
  15. @Override
  16. public void harvest() {
  17. // TODO Auto-generated method stub
  18. }
  19. @Override
  20. public void plant() {
  21. // TODO Auto-generated method stub
  22. }
  23. }
  24. class Strawberry implements Fruit{
  25. @Override
  26. public void grow() {
  27. System.out.println("Strawberry is growing.");
  28. }
  29. @Override
  30. public void harvest() {
  31. // TODO Auto-generated method stub
  32. }
  33. @Override
  34. public void plant() {
  35. // TODO Auto-generated method stub
  36. }
  37. }
  38. class FruitFactory{
  39. public static Fruit creatFruit(String fruitName){
  40. Fruit fruit = null;
  41. switch (fruitName) {
  42. case "apple":
  43. fruit = new Apple();
  44. break;
  45. case "strawberry":
  46. fruit = new Strawberry();
  47. break;
  48. default:
  49. break;
  50. }
  51. return fruit;
  52. }
  53. }
  54. public class SimpleFactory {
  55. public static void main(String[] args) {
  56. Fruit fruit = FruitFactory.creatFruit("apple");
  57. fruit.grow();
  58. }
  59. }

参考资料

1.http://www.cnblogs.com/zhouqiang/archive/2012/07/20/2601365.html

2.http://www.cnblogs.com/forlina/archive/2011/06/21/2086114.html

美文美图

 

文章来源: shq5785.blog.csdn.net,作者:No Silver Bullet,版权归原作者所有,如需转载,请联系作者。

原文链接:shq5785.blog.csdn.net/article/details/45011183

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。