JAVA简单工厂模式
简单工厂模式
通过本文将学习到
- 简单工厂模式的概念
- UML图
- 优缺点/作用
- 解决的问题
- 简单实现
1、前言
23种经典设计模式中,并没有将简单工厂模式列入其中!但是实际上简单工厂模式还是非常有用且常用的,它能够有效的减少代码量以及冗余度,同时它没有被选进23中设计模式大概是应为它自己的工厂模式不是一个抽象类不好扩展吧!简单工厂模式最大的优点就是将对象的创建和使用分开了 !
2、什么是简单工厂模式
简单工厂模式是一种创建型设计模式,在我进行学习编程的时候可以说简单工厂模式是我第一个真正用过的设计模式。当时它的作用就是用来创建方块,俄罗斯方块!通过我得主类随机产生0-7的数,由我得方块工厂来产生不同的方块。好处就是不用我每次产生个方块的时候自己去NEW,直接让工厂去NEW对象就好。我只要告诉它要什么方块就行。然后我就不用在乎怎么创建了!还是很方便的。
创建型的设计模式从来就只需要关心3个问题,创建什么(WHAT),谁来创建(WHO),什么时候创建(WHEN)。在我的俄罗斯方块的游戏中,就是创建方块,由方块工厂来创建,当我传入我需要的方块时创建。
总结一下:简单工厂模式就是:定义一个工厂类,它可以根据参数不同返回不同的实力,被创建的实例通常有相同的父类,或者说有公共的属性或方法。
3、UML图
学习设计模式我认为最关键的一个点就是记住它的UML图,因为我觉得记住UML图再结合原理来学习能够更好得记住(我认为学习一个新东西首先背下来才是关键。)
简单工厂模式得UML图一般来说三个角色。工厂角色、抽象产品角色、具体产品角色。
工厂模式用来创建实体,然后就是抽象了产品类给出不同得参数就能生产出不同的实体来!!!!
4、简单工厂模式的实现
场景:通过不同的参数,来生成对应的图形。
1、 抽象产品角色:
图形父类
public interface Chart{
//这里有公共的的属性比如
String name;
//公共的方法
public void display();
}
2、 具体产品角色:
柱形图:
public class HistomgramChart implements Chart{
//overwirte
public void display(){
System.out.println("这是柱形图");
}
}
折线图:
public class LineChart implements Chart{
//overwrite
public void display(){
System.out.print("这是折线图");
}
}
3、工厂角色:
public class ChartCreateFactory{
//创建一个静态的工厂方法。记住所有创建类型的方法一般来说都是静态的
public static Chart ChartCreate(String name){
Chart hChart = null;
if(name.equals("柱形图")){
//创建一个柱形图
hChart = new HistomgramChart();
return hChart;
}else if(name.equals("折线图"){
hChart = new LineChart();
return hChart;
}else{
System.out.print("不存再这个分类,或者你打错了");
}
}
}
如何调用?
当然是主类去调用
public class test{
public static void main(String [] args){
Chart c1 = ChartCreateFactory.ChartCrate("柱形图");
Chart c2 = ChartCreateFactory.ChartCrate("折线图");
c1.display();
c2.display();
//c1,c2就是分别代表了 两个具体的产品,我们就不用自己去创建了只用掉一//个方法即可
}
}
5、优缺点/作用
j简单工厂模式将类的创建和使用进行分开。作为一种嘴简单的设计模式还是非常常用的。
优点:
- 工厂模式帮助人们省去创建具体对象的步骤,只需要输入对应需要的参数名即可创建。实现了对象的创建和使用的分离!是一种解耦的操作。
- 不用记忆太长的类名,只要给对应的参数就能创建对应的类对象。
- 如果通过配置文件来进行参数的设置的话,可以在不改变客户端代码的情况下而达到修改所需要的类。这个解决方案就是:通过读取xml配置文件来获得对应的参数。具体代码来一个。
public String getXMLContract(){
//同过
//创建文档对象
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc;
doc = builder.parse(new File("对应的配置文件的URL"));
//获取xml中的文本节点,就是读数据。
NodeList nl = doc.getElementsByTagName("charType");
Node classNode = nl.item(0).getFirstChild();
String chartType = classNode.getNodeValue().trim();
return charType;
}
缺点:
1、工厂模式在创建时还是要进行判断创建什么类型的类,进行了逻辑的处理,如果一但工厂类崩溃了,这个创建系统就无法运作。
2、使用简单工厂模式势必会增加类,工厂类。当然我个人觉得这是个小毛病。
3、系统扩展会更加困难,虽然在一定层度上工厂模式进行类解耦,并且更加符号单一职责原则,但是一旦有新的类别加入,比如说我如果加入一个饼状图,+N多其他图,那么工厂模式的逻辑判断就会更加复杂,这个是不利于扩展和维护的。
6、总结
总的来说,简单工厂模式对于创建对象还是非常有帮助的!在我们进行系统的设计的时候可以将一些比较频繁创建对象的类通过工厂模式来进行。然后创建的对象比较少,在5-10个之内我认为是挺好用的!业务逻辑也不会特别复杂!其次,在创建对象时只要关注参数,而不用在意其他细节用工厂模式也是非常好的解决方案。
设计模式,越学越觉得有用,虽然我现在没有真正体会到其中的好处,但是从书上的一些问题我能感受到它能够帮助我们解决一些很麻烦的事情,学习我觉得就是从别人的经验中获取知识,站在巨人的肩膀上果然没错。哈哈!
目前上班了半个多月了,感觉还是先做纯JAVA的有意思点!关键是,自己都没搞熟JAVA就其它都学不愿意,也无聊。想写APP,想写小程序,想写个人博客,想写电商,想写一些好玩的东西。 做一份工作自己喜欢果然是最重要的,钱赚不完,正如我妈说的养活自己就好。我没必要为了钱做自己不喜欢的工作。做一些自己觉得有意思的事是我接下来需要选择公司的最重要的理由。还有不想在大公司,大公司我们这都已经把东西封装好了,密不透风。我又不会分析,所以去点小公司。做最基本的研究最基础的然后再研究别人的一套东西我觉得更加有思路!做自己喜欢的东西吧。
上一篇: 操作系统:实验四 页面置换算法
下一篇: 操作系统实验四(页面置换算法)