您的位置:首页 > 其它

设计模式实践(二)工厂模式

2015-08-29 20:29 357 查看
强大的Spring框架中的IOC就是用到了这种模式。

1. 简单工厂设计模式

我们以衬衫为例,原来的模式是我自己做一件,现在是告诉工厂,你帮我生产一件。来实现一个最简单的简单工厂模式,首先由5个类构成(至少),分别是:接口类(用于定义某一类型的对象所具有的方法)、2个实现类(用于实现接口类,实现了多态的一种解释,即相同的方法,不同的结果)、工厂类(用于生成实现类的对象)、最后一个是测试类Main。

接口类:Shirt.java,这里提供了一种显示颜色的方法。

public interface Shirt {
public void showColor();
}
实现类1:WhiteShirt.java

public class WhiteShirt implements Shirt{
private String color = "white";
@Override
public void showColor() {
System.out.print(color);
}
}
实现类2:BlueShirt.java

public class BlueShirt implements Shirt{
private String color = "blue";
@Override
public void showColor() {
System.out.print(color);
}
}
工厂类:ShirtFactory.java

public class ShirtFactory {
public Shirt getShirt() {
//return new WhiteShirt();
return new BlueShirt();
}
}
测试类:Main.java

public class Main {
public static void main(String[] args) {
ShirtFactory factory = new ShirtFactory();
Shirt myshirt = factory.getShirt();
myshirt.showColor();
}
}


通过这种方式,将所有生成Shirt对象的逻辑集中在ShirtFactory中,所有的需要使用Shirt对象的程序与Shirt接口耦合,而不是以硬编码的实行耦合。这是一种面向接口编程的技术。这种方式提高了系统的可维护性和可扩展性。在上述的例子中,我们可以在工厂类中添加更多的产生不同实例类对象的方法。

2. 工厂方法

工厂方法指的是为每一种类型实现一个工厂类(这些工厂类也是实现了公共的工厂接口),而不是把所有类型的创建都放在一个工厂里面。同样是上面的例子,我们分别为Blue和White提供了工厂类,另外需要顶一个工厂接口。

工厂接口:ShirtFactoryMethod.java

public interface ShirtFactoryMethod {
Shirt getShirt();
}
两个工厂实现类:

BlueShirtFactory.java

public class BlueShirtFactory implements ShirtFactoryMethod{

@Override
public Shirt getShirt() {
return new BlueShirt();
}

}
WhiteSHirtFactory.java

public class WhiteSHirtFactory implements ShirtFactoryMethod{

@Override
public Shirt getShirt() {
return new WhiteShirt();
}

}
测试类:

public class Main {
public static void main(String[] args) {
<strong>ShirtFactoryMethod factory = new WhiteSHirtFactory();</strong>
Shirt myshirt = factory.getShirt();
myshirt.showColor();
}
}


3. 抽象工厂模式

工厂方法虽然解决了在简单工厂方法中工厂类同进行逻辑判断创建对象的复杂方法,但是也造成了工厂类和代码的耦合。我们通过实现另外一个类来实现工厂对象的创建,从而解决了工厂对象和程序的硬编码问题。

工厂对象实现方法:

public class Main {
public static void main(String[] args) {
<strong>ShirtFactoryMethod factory = AbstractShirtFactory.getShirtFactory("blue");</strong>
Shirt myshirt = factory.getShirt();
myshirt.showColor();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: