`
link1987330
  • 浏览: 23090 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

设计模式学习笔记之---简单工厂模式

阅读更多
    最近在看《大话设计模式》,想好好学习下设计模式,并写一点自己学习过程中的体会以及遇到的疑问,希望能给初学者以帮助,更希望大家能指出我的不足和错误,在此感谢各位看客。

简单工厂模式:
    简单工厂模式可以说是设计模式里最简单但是应用却是最广的一种模式,我们随便举个例子来看下它的好处。

话说咱家养了好多小动物,比如阿猫、阿狗、奥特曼什么的,猫吃鱼,狗吃肉,奥特曼吃小怪兽。现在我们想知道随便抓一只动物出来,它吃的是什么,不用设计模式的话是这么实现的:


public class Cat {
	public Cat() {}

	public void eat() {
		System.out.println("猫吃鱼");
	}
}

public class Dog {
		
	public Dog() {}
	
	public void eat() {
		System.out.println("狗吃肉");
	}
}

public class Ultraman {
	public Ultraman () {}
	
	public void eat() {
		System.out.println("奥特曼吃小怪兽");
	}
}
public class MainClass {
        /**
	 * 具体业务实现代码
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String animalName = null;

		System.out.println("Please enter the name of the animal:");
		animalName = br.readLine();
		
		if("Dog".equals(animalName)) {
			Dog dog = new Dog();
			dog.eat();
		} else if("Cat".equals(animalName)) {
			Cat cat = new Cat();
			cat.eat();
		} else if("Ultraman".equals(animalName)) {
			Ultraman ulMan = new Ultraman();
			ulMan.eat();
		}
	}
}

这种写法的缺点:
1、如果刚好咱家开的是动物园,将会有无数个if...else
2、如果我们不仅仅想知道小动物们吃啥,还想知道动物它们拉些啥粑粑,这时候就要往所有if...else里加拉粑粑的方法,这些重复代码将随动物越多产生越多工作量
3、所有if...else里的动作都是类似的操作,当里面的操作非常多的时候将产生大量代码,不容易维护

现在我们使用简单工厂方法来改进代码:
public interface Animal {
	public void eat();
}

public class Cat implements Animal{
	public Cat() {}

	public void eat() {
		System.out.println("猫吃鱼");
	}
}
//狗类和奥特曼类省略
...

/**
 * 工厂类,创建各种动物
 * @author link
 */
public class OperationFactory {
	public static Animal createAnimal(String animalName) {
		Animal animal = null;
		if("Dog".equals(animalName)) {
			animal = new Dog();
		} else if("Cat".equals(animalName)) {
			animal = new Cat();
		} else if("Ultraman".equals(animalName)) {
			animal = new Ultraman();
		}
		return animal;
	}
}

public class MainClass {
        /**
	 * 具体业务实现代码
	 * @param args
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String animalName = null;

		System.out.println("Please enter the name of the animal:");
		animalName = br.readLine();
		
		//使用工厂方法,根据动物名称获取动物实例
		Animal animal = OperationFactory.createAnimal(animalName);
		//调用动物“吃”的方法,无需理会到底这是阿猫、阿狗还是奥特曼
		animal.eat();
	}
}


运行MainClass,
Please enter the name of the animal:
Ultraman
奥特曼吃小怪兽

使用简单工厂方法的优点:
1、即使我们开动物园了,也只需要在工厂类中添加相应动物的初始化方法就行了,如果使用反射进行初始化还可以去掉所有的if...else,使代码更加简洁。更重要的是:无论增加多少动物都不会影响业务代码(这里说的业务代码指main方法中代码)。
2、我们的业务代码将会简洁非常多,并且不需要在业务代码中重复调用各种动物的eat()方法,即使我们想知道动物们都拉啥粑粑,也只需要在业务代码中加上一行代码就行了,而不像普通代码需要在if...else所有的判断中各加一行(现实工作中可能就是各加几十行上百行了)。

从设计上来说,使用简单工厂方法降低了代码的耦合度,将最有可能发生变动、进行扩展的代码提取出来了,从而保证了业务代码的简洁和相对稳定性。
分享到:
评论

相关推荐

    《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码

    《C++20设计模式》学习笔记-第3章工厂方法和抽象工厂模式学习代码

    设计模式学习笔记(一)--简单工厂模式源码

    在这个学习笔记中,我们将深入理解简单工厂模式的概念、工作原理以及如何在实际编程中应用。 简单工厂模式的核心思想是通过一个公共的工厂类来创建不同类型的对象。这个工厂类负责识别客户端请求的对象类型,并返回...

    设计模式学习笔记--Flyweight享元模式.docx

    享元模式是一种设计模式,属于构造型模式,其主要目的是减少对象的数量,通过共享大量相似对象的内部状态来节省内存。这种模式在处理大量细粒度对象时特别有用,能够有效地提高系统的性能。 享元模式的核心是...

    Java 版设计模式学习笔记-java-design-patterns.zip

    这个“Java版设计模式学习笔记”涵盖了多种设计模式,旨在帮助开发者更好地理解和应用这些模式。让我们深入探讨一下其中可能包含的关键知识点。 一、单例模式 单例模式确保一个类只有一个实例,并提供一个全局访问...

    《设计模式学习笔记》

    《设计模式学习笔记》主要探讨了GOF的23种设计模式以及类设计的基本原则,旨在帮助开发者理解和应用这些经过时间验证的成熟解决方案。设计模式是面向对象软件设计中的核心概念,它们为解决常见的设计问题提供了标准...

    设计模式学习笔记总结

    这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、门面模式、命令模式、工厂方法、策略模式、代理模式以及状态模式。下面将对这些模式逐一进行详细...

    设计模式学习笔记大全

    以上就是压缩包中的设计模式学习笔记涉及到的主要内容。通过对这些模式的理解和应用,开发者可以更好地解决软件设计中的问题,提升软件的质量和可维护性。每种模式都有其适用场景,理解其背后的意图和应用场景是关键...

    HeadFirst设计模式学习笔记

    《HeadFirst设计模式学习笔记》是一份详尽的资料,旨在帮助读者深入理解并掌握设计模式这一编程领域的核心概念。设计模式是软件工程中的一种最佳实践,它在解决常见问题时提供了一种标准的解决方案,使得代码更易于...

    设计模式之美—学习笔记

    在这个“设计模式之美”的学习笔记中,我们将探讨一些主要的设计模式,以及它们在实际开发中的应用。 首先,我们从创建型模式开始。这类模式主要用于对象的创建,如单例模式(Singleton)、工厂模式(Factory ...

    23种设计模式学习笔记

    这个“23种设计模式学习笔记”文档将引导你深入理解这些模式,并帮助你在实际编程中有效地应用它们。以下是对23种设计模式的详细解读: 1. **单例模式**:确保一个类只有一个实例,并提供全局访问点。它常用于控制...

    学习笔记-深入浅出设计模式

    在《深入浅出设计模式》的学习笔记中,我们可以看到几种关键的设计模式及其应用,包括策略模式、观察者模式、装饰者模式、工厂模式和抽象工厂模式。 1. **策略模式**: - 策略模式的核心在于将算法族封装在独立的...

    Java设计模式学习笔记.pdf

    在学习Java设计模式时,掌握其概念、应用、优点和缺点非常重要。设计模式是软件开发中经常使用的一种通用解决方案模板,用于解决特定上下文中的常见问题。它们源于设计模式的研究,通常被认为是软件设计中的最佳实践...

    《C++20设计模式》学习笔记-第2章构造器模式学习代码

    在C++编程中,设计模式是一种经过验证的解决常见问题的最佳实践。《C++20设计模式》一书深入探讨了如何在C++20这一最新标准中应用这些模式。第2章着重讲解了构造器模式,这是一种创建型设计模式,它关注的是对象的...

    C#设计模式学习笔记

    以下是对“C#设计模式学习笔记”中涉及的一些关键知识点的详细解释。 1. **设计模式的基本概念**: 设计模式是一种在特定上下文中已被证明有效的解决方案模板,它描述了如何在软件设计中解决常见问题。设计模式...

    23个设计模式图解--学习笔记

    在《23个设计模式图解--学习笔记》中,我们探讨了这些模式,以便于理解和应用到实际开发中。以下是这23个设计模式的详细说明: 1. **工厂方法**(Factory Method):定义一个用于创建对象的接口,让子类决定实例化...

    23种设计模式学习笔记及源码

    这个压缩包文件包含了23种设计模式的学习笔记和源码,旨在帮助开发者深入理解并熟练运用这些模式。以下是对每种设计模式的详细解释,以及它们在Java编程中的应用。 1. **单例模式**:确保一个类只有一个实例,并...

    设计模式学习笔记

    ### 设计模式学习笔记 #### 一、简单工厂模式 (Simple Factory) **类图与描述:** 简单工厂模式的核心在于存在一个工厂类,这个工厂类能够根据不同的输入参数返回不同的对象实例。简单工厂模式并不涉及继承关系,...

    韩顺平_Java设计模式笔记.docx

    通过以上内容,我们可以看到韩顺平老师的Java设计模式笔记涵盖了设计模式的基础概念、常见面试题解析、设计原则等内容,并通过具体案例来阐述设计模式的实际应用价值,旨在帮助学习者深刻理解并掌握设计模式,从而在...

Global site tag (gtag.js) - Google Analytics