您的位置:首页 > 其它

创建型--工厂方法模式

2016-07-05 11:46 555 查看
设计模式从四个方面来说:这种设计模式的意图,设计模式的动机,设计模式的主要角色,这种设计模式的优缺点。

模式的意图

定义一个用于创建对象的接口,让子类决定实例化哪一个类。可以把它理解为一个工厂,可以生产出不同类型的产品。

模式设计的适用性

使用工厂方法可以让用户的代码和某个特定类的子类的代码解耦。

工厂方法使用户不知道它所使用的对象是怎样被创建的,只需知道该对象有哪些方法即可。

参与者

抽象产品(Product):抽象类或接口,负责定义具体产品必须实现的方法。

具体产品(ConcreteProduct):实现Product接口的类

构造者(Creator):定义一个称作工厂方法的抽象方法,该方法返回具体产品类的实例。

具体构造者(ConcreateCreator):重写工厂方法,返回具体产品的一个实例。

也就是说通常我们在使用工厂方法模式的时候一般要有这几大参与者。

从例子上再来看一下:

抽象产品

public abstract class PenCore {
public String color;
public abstract void writeWord(String s);
}


具体产品

RedPenCore.java
public class RedPenCore extends PenCore{
public RedPenCore() {
color = "红色";
}
@Override
public void writeWord(String s) {
System.out.println("写出" + color + "的字:" + s);
}
}
BluePenCore.java
public class BluePenCore extends PenCore{
public BluePenCore() {
color = "蓝色";
}
@Override
public void writeWord(String s) {
System.out.println("写出" + color + "的字:" + s);
}
}
BlackPenCore.java
public class BlackPenCore extends PenCore{
public BlackPenCore() {
color = "黑色";
}
@Override
public void writeWord(String s) {
System.out.println("写出" + color + "的字:" + s);
}
}


构造者

BallPen.java
public abstract class BallPen {
public BallPen() {
System.out.println("生产了一只装有" + getPenCore().color + "笔芯的圆珠笔");
}
public abstract PenCore getPenCore();
}


具体构造者

BlueBallPen.java
public class BlueBallPen extends BallPen{
@Override
public PenCore getPenCore() {
return new BluePenCore();
}
}
BlackBallPen.java
public class BlackBallPen extends BallPen{
@Override
public PenCore getPenCore() {
return new BlackPenCore();
}
}
RedBallPen.java
public class RedBallPen extends BallPen{
public PenCore getPenCore() {
return new RedPenCore();
}
}


我们通过抽象产品定义了一个笔芯的类,具体产品笔芯实现了抽象产品中的方法,并且定义了不同种类的笔芯。我们通过具体的构造者构造出不同的笔,每种笔内产生一个具体的笔芯的对象,我们可以通过这个对象实例调用具体产品中的方法。

具体的类图:



优点

使用工厂方法可以让用户的代码和某个特定类的子类代码解耦。

工厂方法使用户不必知道它所使用的对象是怎么样被创建的,只需知道该对象有哪些方法即可。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: