前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『设计模式』简单工厂模式

『设计模式』简单工厂模式

作者头像
风骨散人Chiam
发布2020-10-28 10:57:02
3420
发布2020-10-28 10:57:02
举报
文章被收录于专栏:CSDN旧文

简单工厂模式

简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的“消费”和生产完全分开,客户端只需要知道自己需要什么产品,如何来使用产品就可以了,具体的产品生产任务由具体的工厂类来实现。工厂类根据传进来的参数生产具体的产品供消费者使用。这种模式使得更加利于扩展,当有新的产品加入时仅仅需要在工厂中加入新产品的构造就可以了。

优点
  • 工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端与产品的创建分离,客户端可以免除直接创建产品对象的责任,不需要知道产品创建的逻辑,而仅仅工厂类含有必要的判断逻辑,可以决定在什么时候创建哪一个产品类的实例,客户端可以免除直接创建产品对象的责任,而仅仅"消费消费"产品。简单工厂模式通过这种做法实现了对责任的分割。
缺点
  • 当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。当产品有复杂的多层等级结构时,工厂类只有自己,以不变应万变,就是模式的缺点。因为工厂类集中了所有产品创建逻辑,一旦不能正常工作,整个系统都要受到影响。
  • 同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。同时,系统扩展困难,一旦添加新产品就不得不修改工厂逻辑,有可能造成工厂逻辑过于复杂。
  • 另外,简单工厂模式通常使用静态工厂方法,这使得无法由子类继承,造成工厂角色无法形成基于继承的等级结构
  • 工厂类集成了所有产品的创建逻辑,当工厂类出现问题,所有产品都会出现问题;还有当新增加产品都会修改工厂类,违背开闭原则
使用场景
  • 如果想要完全封装隔离具体实现,让外部只能通过接口来操作封装体,则可以选用简单工厂。让客户端通过工厂来获取相应的接口,而无需关心具体的实现。
  • 如果想要把对外创建对象的职责集中管理 和控制,可以选用简单工厂
实现
简单工厂模式的构成

具体的工厂角色:Factory;在工厂中可以调用方法生产出具体的某个类型的产品; 抽象的产品角色:Father_Product;在抽象产品类型中可以声明抽象接口,在具体的产品类中实现; 具体的产品角色:Ex_Product_1 和Ex_Product_2;在具体的类中必须实现抽象类的接口,也可以实现自己的业务逻辑。

简单工厂模式的UML
在这里插入图片描述
在这里插入图片描述
代码实现

别诟病我这中文写代码,问就是不是做项目,这样更容易知道自己写的啥!

代码语言:javascript
复制
package 简单工厂模式;

public abstract class Father_Product {  //定义产品的父类
		String Attribute; //产品必备属性
		public abstract void Method(); //产品的功能
}
代码语言:javascript
复制
package 简单工厂模式;

public class Ex_Product_1 extends Father_Product {

	@Override
	public void Method() {
	System.out.println("我是第一种产品,这是我的功能");

	}
 
}
代码语言:javascript
复制
package 简单工厂模式;

public class Ex_Product_2 extends Father_Product {

	@Override
	public void Method() {
	System.out.println("我是第二种产品,这是我的功能");

	}

}
代码语言:javascript
复制
package 简单工厂模式;

public class Factory {
	  public Father_Product createProduct(String productName) {
		  Father_Product product = null;
		  
	        switch(productName){
	            case "1":
	                product = new Ex_Product_1();//生产产品1
	                break;
	                
	            case "2":
	                product = new Ex_Product_2();//生产产品2
	                break;
	                
	            default:
	                break;
	                
	        }
		return product;
	  }
}

在这里插入图片描述
在这里插入图片描述

写在最后: 我叫风骨散人,名字的意思是我多想可以不低头的自由生活,可现实却不是这样。家境贫寒,总得向这个世界低头,所以我一直在奋斗,想改变我的命运给亲人好的生活,希望同样被生活绑架的你可以通过自己的努力改变现状,深知成年人的世界里没有容易二字。目前是一名在校大学生,预计考研,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你! 如果有什么想看的,可以私信我,如果在能力范围内,我会发布相应的博文! 谢谢大家的阅读!?

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/22 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 优点
  • 缺点
  • 使用场景
  • 实现
    • 简单工厂模式的构成
      • 简单工厂模式的UML
        • 代码实现
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档