设计模式学习笔记——工厂方法模式
定义:工厂方法模式又称为工厂模式,属于类的创建型模式。在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化哪一个类。
在简单工厂模式中,一个工厂类处于对产品类进行实例化的中心位置,它知道每一个产品类的细节,并决定何时哪一个产品类应当被实例化。但是,简单工厂模式的致命弱点也就是处于核心地位的工厂类。而工厂方法模式,则是创建类多个产品的工厂,从而将产品的创建过程变得分散化,避免简单工厂模式中核心工厂负担过重的问题。
参与者:工厂方法模式主要涉及4个参与者:抽象工厂类、实现抽象工厂类的具体工厂类、抽象产品类和实现抽象产品类的具体产品类
一个简单例子:
仍引用上一篇简单工厂模式里举的例子。在原有基础上,做适当的修改和添加。
1、在工厂方法模式里,关于产品部分与简单工厂模式类似,需要一个抽象产品和多个具体产品。定义SchoolUser抽象类,Teacher和Student类继承该父类。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
//定义抽象产品类,父类
public abstract class SchoolUser {
public String UserName="";
public String UserType="";
public abstract void Describe();
}
////////////////////////////////////////
//定义具体产品Student
public class Student extends SchoolUser{
public Student(){
this.UserName="Tom";
this.UserType="Student";
}
public void Describe(){
System.out.println("User "+this.UserName+" is "+this.UserType);
}
}
///////////////////////////////////////
//定义具体产品Teacher
public class Teacher extends SchoolUser{
public Teacher(){
this.UserName="Peter";
this.UserType="Teacher";
}
public void Describe(){
System.out.println("User "+this.UserName+" is a "+this.UserType);
}
}
2、接下来就是与简单工厂模式不同的地方了,在简单工厂模式中所有产品的创建都集中在了一个工厂里,而工厂方法模式则是需要创建多个不同类别的工厂实例的。我们首先定义一个抽象工厂接口,其实工厂方法模式的核心
1
2
3
public interface Factory {
public SchoolUser createUser();
}
3、实现步骤2中的抽象工厂,定义具体的教师工厂和学生工厂
1
2
3
4
5
6
7
8
9
10
11
public class TeacherFactory implements Factory{
public SchoolUser createUser(){
return new Teacher();
}
}
////////////////////////////////////////////////
public class StudentFactory implements Factory {
public SchoolUser createUser(){
return new Student();
}
}
4、最后,创建客户端进行使用测试
1
2
3
4
5
6
7
8
9
10
11
12
13
public class Client {
public static void main(String[] args) {
//创建一个学生工厂,并产生一个学生实例
Factory factory;
factory = new StudentFactory();
SchoolUser student = factory.createUser();
student.Describe();
//创建一个教师工厂,并产生一个教师 实例
factory = new TeacherFactory();
SchoolUser teacher = factory.createUser();
teacher.Describe();
}
}
5、总结一下:
在工厂模式方法中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类被实例化这一细节。工厂方法模式的核心是一个抽象工厂类,各种具体工厂类通过抽象工厂类将工厂方法继承下来。基于工厂角色和产品角色的多态性设计时工厂方法模式的关键。用户只需关心抽象产品和工厂,一旦创建了一个工厂实例,就不用再理会返回的是到底哪一种具体产品,因为产品创建的具体实现细节已经被封装到了具体工厂里。
工厂模式的另一个优点是在 系统中加入新产品时,无需修改抽象工厂和抽象产品提供的接口,无需更改客户端,也无需更改其他的具体工厂和具体产品,而只需要添加一个具体工厂和具体产品就可以了。这样,系统的可扩展性非常好。
更多阅读
中小学教师职业道德规范学习笔记
中小学教师职业道德规范学习笔记一、依法执教。学习和宣传马列主义、毛泽东思想和邓--同志建设有中国特色社会主义理论,拥护党的基本路线,全面贯彻国家教育方针,自觉遵守《教师法》等法律法规,在教育教学中同党和国家的方针政策保持一
伤寒学习笔记(下
伤寒学习笔记---14,桂枝用量问题?学习仲景药法,涉及用量问题。深入考证,固然不必,简单了解,实属必要。仅以桂枝为例,整理如下:基本资料:《现代中医药应用与研究大系》1985年版,简称《大系》。药法:凡例里说:“将其折合今之用量---,并结合笔者临床
关于闪光灯TTL的学习笔记
关于闪光灯TTL的学习笔记(转)俺注:一直对加闪光灯的拍摄比较疑惑,要知道并不是加开个闪光就一了百了的。特别是现在的专业闪灯,有好几种模式,都需要配合相机的测光使用。今天无意之间看到一篇解疑的文章,赶紧收集下来仔细学习。想学习下闪
飞地艺术坊素描学习笔记秘籍本3素描人物头像训练以及综合笔记
飞地艺术坊素描学习笔记【秘籍本3 素描人物头像训练以及综合笔记】人像训练1.准肯定像,而像未必准。因为有的是感觉像、有的是结构像、有的是特征像(对象型、心理型和画面型)2.像有很多因素造成的,明暗、形体、结构、空间、甚至细节
设计模式概论 设计学概论
设计模式概论1. 设计模式设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系