作为一名面向对象的Java工程师,设计模式肯定是必会的,之前虽然也看了一些设计模式的资料,也学习过,但是没有动手写下学习的心得,有的时候想再去看看的时候记不清在哪里,干脆就写道这个博客里,以后忘记了也好有复习的地方。
菜鸟教程设计模式地址:http://www.runoob.com/design-pattern/design-pattern-intro.html
有兴趣的可以去菜鸟教程的设计模式教程里看一下,我个人觉得写的挺好的,下面就写一下我个人看了之后的学习心得。
首先说一下工厂设计模式的特点。
- 工厂设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
- 在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑。
- 并且是通过使用一个共同的接口来指向新创建的对象。
主要有一下及部分组成:
- 接口
- 接口的实现类
- 工厂类
接口
package com.soft.shape;
/**
* 接口,作为子类的模板。
* @author chenlei
*
*/
public interface Shape {
public void draw();
}
接口的实现类1
package com.soft.shapeImpl;
import com.soft.shape.Shape;
/**
* 接口的实现类,
* @author chenlei
*
*/
public class Cirle implements Shape{
@Override
public void draw() {
System.out.println("画了一个圆形");
}
}
接口的实现类2
package com.soft.shapeImpl;
import com.soft.shape.Shape;
/**
* 接口的实现类
* @author chenlei
*
*/
public class Rectangle implements Shape{
@Override
public void draw() {
System.out.println("画了一个长方形");
}
}
接口的实现类3
package com.soft.shapeImpl;
import com.soft.shape.Shape;
/**
* 接口的实现类
* @author chenlei
*
*/
public class Triangle implements Shape {
@Override
public void draw() {
// TODO Auto-generated method stub
System.out.println("画了一个三角形");
}
}
工厂类
package com.soft.factory;
import com.soft.shape.Shape;
import com.soft.shapeImpl.Cirle;
import com.soft.shapeImpl.Rectangle;
import com.soft.shapeImpl.Triangle;
/**
* 工厂类,通过这一个工厂类可以返回不同的对象。
* @author chenlei
*
*/
public class Factory {
//实例化对象的具体方法。
public Shape getShape(String shape){
//创建一个返回的图形对象,
Shape sp;
//使用switch分支结构来判断应该返回那个具体对象,
switch (shape) {
case "Cirle":
sp = new Cirle();
break;
case "Rectangle":
sp = new Rectangle();
break;
case "Triangle":
sp = new Triangle();
break;
default:
sp = new Cirle();
break;
}
return sp;
}
}
测试类
package com.soft.test;
import com.soft.factory.Factory;
import com.soft.shape.Shape;
/**
* 测试工厂方法
* @author chenlei
*
*/
public class Test {
public static void main(String[] args) {
Factory factory = new Factory();
Shape shape1 = factory.getShape("Cirle");
Shape shape2 = factory.getShape("Rectangle");
Shape shape3 = factory.getShape("Triangle");
shape1.draw();
shape2.draw();
shape3.draw();
}
}
打印输出的结果

作为一种创建类模式,在任何需要生成复杂对象的地方,都可以使用工厂方法模式。
有一点需要注意的地方就是复杂对象适合使用工厂模式,而简单对象,特别是只需要通过 new 就可以完成创建的对象,无需使用工厂模式。如果使用工厂模式,就需要引入一个工厂类,会增加系统的复杂度。
2813

被折叠的 条评论
为什么被折叠?



