反射和工厂设计模式---工厂设计模式

这篇具有很好参考价值的文章主要介绍了反射和工厂设计模式---工厂设计模式。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、工厂设计模式概述

■什么是工厂设计模式

工厂模式(Factory Pattern)是开发中比较常用的设计模式之一。

它属于创建型模式(单例模式就是创建型模式的一种),这种模式让我们在创建对象时不会直接暴露创建逻辑,而是通过使用一个共同的接口来完成对象的创建
工厂模式可以分为三种,分别是简单工厂模式、工厂方法模式以及抽象工厂模式(后面的两种模式都是基
于第一种模式进行的),我们主要来讲解简单工厂模式。

■为什么要用工厂模式

其实工厂设计模式就是根据现实抽象过来的模式,

我们在Java中,习惯要用什么对象,就去找它的类去new,主要其实并不好,类与类的耦合度会比较高,而且我们现实中也不会你需要买什么东西就跑去生产车间里去买吧,我们生活中更多的是一个商店或者是商场把对应的商品从生产线上购买到店里来,然后你需要什么跟老板说你要买的商品名称,老板就提供给你。

由商店来管理这些对象,我们不关心这些商品的生产细节。

■工厂设计模式的优点

➢调用者想创建一一个对象,只要知道其名称(也就是不同的标签)就可以在工厂获取具体的
对象;
➢扩展性强,如果想增加一个产品(也就是具体的对象),只要扩展工厂类就可以(也就是
增加不同的标签,增加不同标签所对应的对象) ;
➢屏蔽产品的具体实现,调用者只关心产品的接口、无需关心内部实现;
➢面向接口编程,体现了面向对象的思想;

二、demo

1、使用统一的接口来管理不同的类


public class FactoryDemo1 {
	public static void main(String[] args) {
		Fruit apple = new Apple();
		Fruit banane = new Banane();
		apple.eat();
		banane.eat();
	}
}
interface Fruit{
	void eat();
}
class Apple implements Fruit{
	public void eat() {
		System.out.println("苹果真好吃");
	}
}
class Banane implements Fruit{
	public void eat() {
		System.out.println("香蕉真好吃");
	}
}

2、使用一个统一的类对象生产车间来管理对象的生产

public class FactoryDemo2 {
	public static void main(String[] args) {
		FruitFatory fatory = new FruitFatory();
		Fruit apple = fatory.getApple();
		Fruit banane = fatory.getBanane();
		apple.eat();
		banane.eat();
	}
}
class FruitFatory{
	public Fruit getApple() {
		return new Apple();
	}

	public Fruit getBanane() {
		return new Banane();
	}
}
interface Fruit{
	void eat();
}
class Apple implements Fruit{
	public void eat() {
		System.out.println("苹果真好吃");
	}
}
class Banane implements Fruit{
	public void eat() {
		System.out.println("香蕉真好吃");
	}
}

3、使用一个工厂来生产多个不一样的水果

public class FactoryDemo3 {
	public static void main(String[] args) {
		Fruit apple = FruitFatory.getApple();
		Fruit banane = FruitFatory.getBanane();
		apple.eat();
		banane.eat();
	}
}
class FruitFatory{
	public static Fruit getApple() {
		return new Apple();
	}
	
	public static Fruit getBanane() {
		return new Banane();
	}
}
interface Fruit{
	void eat();
}
class Apple implements Fruit{
	public void eat() {
		System.out.println("苹果真好吃");
	}
}
class Banane implements Fruit{
	public void eat() {
		System.out.println("香蕉真好吃");
	}
}

4、使用工厂的一个方法就能够构建不同的对象

public class FactoryDemo4 {
	public static void main(String[] args) {
		Fruit apple = FruitFatory.getFruit("apple");
		Fruit banane = FruitFatory.getFruit("banane");
		apple.eat();
		banane.eat();
  }
}
class FruitFatory{
	public static Fruit getFruit(String fruitName) {
		if("apple".equalsIgnoreCase(fruitName)) {
			return new Apple();
		}else if("banane".equalsIgnoreCase(fruitName)) {
			return new Banane();
		}else {
			return null;
		}
	}
	
}
interface Fruit{
	void eat();
}
class Apple implements Fruit{
	public void eat() {
		System.out.println("苹果真好吃");
	}
}
class Banane implements Fruit{
	public void eat() {
		System.out.println("香蕉真好吃");
	}
}

5、终极版 加入反射

/src/lession14/entity

public interface Fruit {
	void eat();
}

public class Pear implements Fruit{

	@Override
	public void eat() {
		System.out.println(" 梨真好吃 ");
	}

}
public class Banane implements Fruit{
	public void eat() {
		System.out.println(" 香蕉真好吃 ");
	}
}

public class Apple implements Fruit{
	public void eat() {
		System.out.println(" 苹果真好吃 ");
	}
}

/**
 * 
 * 想让你的工厂直接不需要进行频繁的更改,它也可以顺利的生产出
 * 我们想要的对象!
 *
 */
public class FactoryDemo5 {
	public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		Fruit apple = FruitFatory.getFruit("apple");
		Fruit banane = FruitFatory.getFruit("banane");
		Fruit pear = FruitFatory.getFruit("pear");
		apple.eat();
		banane.eat();
		pear.eat();
	}
}
class FruitFatory{
	public static Fruit getFruit(String className) throws ClassNotFoundException, InstantiationException, IllegalAccessException {
		Class<?> classObj = Class.forName("lession14.entity."+initClassName(className));
		return (Fruit) classObj.newInstance();
	}
	
	public static String initClassName(String className) {
		StringBuilder sb = new StringBuilder();
		return sb.append((className.charAt(0)+"").toUpperCase()).append(className.substring(1).toLowerCase()).toString();
	}
}

在Demo2中,我们已经可以通过-一个工厂类来构建具体的类对象了,但是还需要像调用方法一样来操作, 并且不同的对象不同的方法名,能否进一步 进行优化?
到Demo3中,我们直接使用一个统一-的方 法来获取不同的对象,在方法内部进行名字的判断就可以了,然后通过new或者是通过反射来获取到指定的对象。

在该模式中,工厂类是整个模式的关键。它包含必要的判断逻辑(比如根据外界给定的信息,决定究竟应该创建哪个具体类的对象)。用户在使用时可以直接根据工厂类去创建所需的实例,而无需了解这些对象是如何创建以及如何组织的。有利于整个软件体系结构的优化。

但是,简单工厂模式的缺点也正体现在其工厂类上,由于工厂类集中了所有实例的创建逻辑,所以“高内聚”方面做的并不好。并且,当系统中的具体产品类不断增多时,可能会出现要求工厂类也要做相应的修改,扩展性并不很好。在具体调用比较麻烦。文章来源地址https://www.toymoban.com/news/detail-649718.html

到了这里,关于反射和工厂设计模式---工厂设计模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 设计模式(二)、工厂模式--工厂方法模式

    工厂方法模式是一种常用的创建型设计模式。它解决了简单工厂模式的问题:如违反了开闭原则,其次可以用于更复杂的结构 它的核心结构有四个角色  抽象工厂;具体工厂;抽象产品;具体产品 抽象工厂(抽象类或接口)不在负责具体的创建过程,即具体的代码实现。只制定

    2024年02月16日
    浏览(35)
  • 【设计模式】单例模式、工厂方法模式、抽象工厂模式

    1. 单例模式 (Singleton Pattern): 场景: 在一个应用程序中,需要一个全局唯一的配置管理器,确保配置信息只有一个实例。 2. 工厂方法模式 (Factory Method Pattern): 场景: 创建一组具有相似功能但具体实现不同的日志记录器。 3. 抽象工厂模式 (Abstract Factory Pattern): 场景: 创建不同

    2024年01月15日
    浏览(57)
  • 设计模式-工厂设计模式

    在简单工厂模式的基础上进一步的抽象化 具备更多的可扩展和复用性,增强代码的可读性 使添加产品不需要修改原来的代码,满足 开闭原则 优点 符合 单一职责 ,每个工厂只负责生产对应的产品 符合 开闭原则 ,添加产品只需添加对应的产品类和工厂类 使用者只需要知道

    2024年02月11日
    浏览(45)
  • 设计模式-简单工厂模式(静态工厂模式)java实现

    简单工厂模式根据所 提供的参数 数据返回几个可能类中的一个类的实例。通常返回的类都有一个公共的父类和公共的方法。   意图 提供一个类,负责根据一定的条件创建某一具体类的实例。同时使用工厂模式也是为了隐藏创建对象的过程 角色及其职责 (1)工厂(Creator)角色

    2024年02月13日
    浏览(52)
  • 设计模式之工厂设计模式

    一种创建型模式,用于封装和管理对象的创建 根据产品是具体产品还是具体工厂可分为简单工厂模式和工厂方法模式 用一个工厂类,根据不同的参数,返回不同的对象。 (根据工厂的抽象程度,可分为工厂方法模式和抽象工厂模式) 工厂方法模式将生成具体产品的任务分发

    2024年02月03日
    浏览(42)
  • 【精选】设计模式——工厂设计模式

    工厂设计模式是一种创建型设计模式,其主要目的是通过将对象的创建过程封装在一个工厂类中来实现对象的创建。这样可以降低客户端与具体产品类之间的耦合度,也便于代码的扩展和维护。 以下是Java中两个常见的工厂设计模式示例: 简单工厂模式又称静态工厂模式,通

    2024年02月04日
    浏览(48)
  • 结构型设计模式-单例模式/工厂模式/抽象工厂

    创建型设计模式-单例模式/工厂模式/抽象工厂 行为型设计模式:模板设计模式/观察者设计模式/策略设计模式 C#反射机制实现开闭原则的简单工厂模式 设计模式可以分为三种类型: 创建型设计模式、结构型设计模式和行为型设计模式 。 创建型设计模式:这些模式涉及到 对

    2024年02月11日
    浏览(52)
  • JavaScript设计模式(二)——简单工厂模式、抽象工厂模式、建造者模式

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年02月10日
    浏览(47)
  • 【设计模式专题之抽象工厂模式】3. 家具工厂

    题目描述 小明家新开了两个工厂用来生产家具,一个生产现代风格的沙发和椅子,一个生产古典风格的沙发和椅子,现在工厂收到了一笔订单,请你帮他设计一个系统,描述订单需要生产家具的信息。 输入描述 输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示订单的数量。

    2024年03月12日
    浏览(50)
  • 【设计模式专题之工厂方法模式】2.积木工厂

    时间限制:1.000S  空间限制:256MB 题目描述 小明家有两个工厂,一个用于生产圆形积木,一个用于生产方形积木,请你帮他设计一个积木工厂系统,记录积木生产的信息。 输入描述 输入的第一行是一个整数 N(1 ≤ N ≤ 100),表示生产的次数。  接下来的 N 行,每行输入一

    2024年03月14日
    浏览(55)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包