最近在看《大话设计模式》,想好好学习下设计模式,并写一点自己学习过程中的体会以及遇到的疑问,希望能给初学者以帮助,更希望大家能指出我的不足和错误,在此感谢各位看客。
简单工厂模式:
简单工厂模式可以说是设计模式里最简单但是应用却是最广的一种模式,我们随便举个例子来看下它的好处。
话说咱家养了好多小动物,比如阿猫、阿狗、奥特曼什么的,猫吃鱼,狗吃肉,奥特曼吃小怪兽。现在我们想知道随便抓一只动物出来,它吃的是什么,不用设计模式的话是这么实现的:
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章工厂方法和抽象工厂模式学习代码
共150讲,时长共 33...1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML类图(类的依赖、泛化和实现、类的关联、聚合和组合) 23种设计模式包括...
定义: 结构说明: 相关概念: 接口: 接口与抽象类的区别: 面向接口编程: 功能: 时序图: 优缺点: 代码阐释:
工厂模式,策略模式,装饰模式,代理模式,工厂方法模式,原型模式等23个设计模式
最新设计模式超级详解课程,课程深入浅出的探讨了设计模式总览,创建型模式、结构型模式、行为模式的...├─day01-总览设计模式-06-创建型模式-工厂-简单工厂模式.mp4 ├─day01-总览设计模式-07-创建型模式-工厂-工厂
详述设计模式之工厂模式,包括简单工厂,工厂方法,描象工厂的学习笔记,都附带有例子源代码
JavaScript常见的一些设计模式学习笔记和代码实现。包括工厂模式、单例模式、代理模式、发布订阅模式、中介者模式等等内容。
在PHP学习中,收集了一些常用的编程方法和思想,集中详细的记录了9种设计模式的设计思路和用法。比如:工厂模式,单例模式,注册模式,适配器模式,观察者模式等
1. 创建型模式:创建型模式关注对象的创建过程,包括简单工厂模式、工厂方法模式、抽象工厂模式、建造者模式、原型模式和单例模式。这些模式可以帮助我们更灵活地创建对象,避免直接使用new关键字来创建对象,降低...
该文档是自己在学习设计模式时整理的常用设计模式pdf文档,包括源码,包括装饰模式,代理模式,责任链模式,命令模式,解释器模式,迭代器模式,备忘录模式,观察者模式,工厂模式,建造者模式,适配器模式,桥梁...
普科国际软件一个学院的学习笔记,有3个文件word文档,文本,还有factory-demo源文件代码
设计模式学习笔记,此项目参考《大话设计模式》,只能作为入门级设计模式学习 设计原则 职责单一原则 开放-封闭原则 依赖倒转原则 高层模块不依赖底层模块,两个模块都应该依赖抽象。抽象不依赖细节,细节依赖抽象。...
工厂模式和单例模式(https://www.jb51.net/article/184230.htm)应该是设计模式中应用最多的模式了,工厂模式的定义:提供创建对象的接口(来自百度百科:http://baike.baidu.com/view/1306799.htm),意思就是根据...
是我在学习设计模式时整理的,其中一些是我自己学习,很多来自网络.希望对模式有兴趣的朋友有帮助,我会很高兴.
23种经典设计模式的分析,针对Java写的,自己的一些感悟, 与大家分享
针对几种经典软件设计模式:模板方法模式 外观模式 代理模式 装饰器模式 桥模式 工厂方法模式 组合模式等给出了简单易懂的讲解,透彻明了。很好的学习资料哦,是我平时学习时做的笔记外加自己的理解,很不错的……
{1.11}简单算法}{38}{section.1.11} {1.11.1}打乱算法}{38}{subsection.1.11.1} {1.11.2}排序算法}{38}{subsection.1.11.2} {1.11.2.1}选择排序}{38}{subsubsection.1.11.2.1} {1.11.2.2}冒泡排序}{39}{...