软件构造(03)工厂方法总结
软件构造(03)工厂方法总结
之所以把工厂方法单列出来作为一节进行阐述,是由于我在实验三种并没有把这一块的内容完成的很好,所以这篇博客将对工厂方法进行阐述并总结。
定义:
定义一个工厂类,根据传入的参数不同返回不同的实例,被创建的实例具有共同的父类或接口。
适用场景:
其实由定义也大概能推测出其使用场景,首先由于只有一个工厂类,所以工厂类中创建的对象不能太多,否则工厂类的逻辑就太复杂了,其次由于工厂类封装了对象的创建过程,所以客户端应该不关心对象的创建。总结一下适用场景:
(1)需要创建的对象较少。
(2)客户端不关心对象的创建过程。
以上就是简单工厂模式简单工厂模式的适用场景,下面看一个我举出的具体的实例。
实例:
创建一个可以绘制不同形状的绘图工具,可以绘制圆形,正方形,三角形,每个图形都会有一个draw()方法用于绘图,不看代码先考虑一下如何通过该模式设计完成此功能。由题可知圆形,正方形,三角形都属于一种图形,并且都具有draw方法,所以首先可以定义一个接口或者抽象类,作为这三个图像的公共父类,并在其中声明一个公共的draw方法。
public interface Shape {
void draw();
}
这里定义成抽象类也是可以的,只不过接口是更高一级的抽象,所以习惯定义成接口,而且接口支持多实现,方便以后扩展。下面就是编写具体的图形,每种图形都实现Shape 接口
圆形
public class CircleShape implements Shape {
public CircleShape() {
System.out.println( "CircleShape: created");
}
@Override
public void draw() {
System.out.println( "draw: CircleShape");
}
}
正方形
public class RectShape implements Shape {
public RectShape() {
System.out.println( "RectShape: created");
}
@Override
public void draw() {
System.out.println( "draw: RectShape");
}
}
三角形
public class TriangleShape implements Shape {
public TriangleShape() {
System.out.println( "TriangleShape: created");
}
@Override
public void draw() {
System.out.println( "draw: TriangleShape");
}
}
下面是工厂类的具体实现
public class ShapeFactory {
public static final String TAG = "ShapeFactory";
public static Shape getShape(String type) {
Shape shape = null;
if (type.equalsIgnoreCase("circle")) {
shape = new CircleShape();
} else if (type.equalsIgnoreCase("rect")) {
shape = new RectShape();
} else if (type.equalsIgnoreCase("triangle")) {
shape = new TriangleShape();
}
return shape;
}
}
在这个工厂类中通过传入不同的type可以new不同的形状,返回结果为Shape 类型,这个就是简单工厂核心的地方了。
客户端使用
画圆形
Shape shape= ShapeFactory.getShape("circle");
shape.draw();
画正方形
Shape shape= ShapeFactory.getShape("rect");
shape.draw();
只通过给ShapeFactory传入不同的参数就实现了各种形状的绘制。
上一篇: 笔记03
下一篇: 软件构造笔记四:考前学习(预习)设计模式
推荐阅读
-
effective java 3th item1:考虑静态工厂方法代替构造器
-
Java描述设计模式(03):工厂方法模式
-
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
-
JS常见创建类的方法小结【工厂方式,构造器方式,原型方式,联合方式等】
-
javascript工厂模式和构造函数模式创建对象方法解析
-
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
-
[HITSC]哈工大软件构造Lab3+Lab4实验总结
-
对软件构造实验的总结与感想
-
第03条 用私有构造方法或者枚举类型强化Singleton属性
-
C#基础(203)实例方法和重载方法总结,构造方法与实例方法总结,this关键字