您的位置:首页 > 其它

设计模式-工厂模式详解(非抽象工厂模式)

2017-07-25 10:52 141 查看
工厂模式分为三种

第一种:普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。

我们来看个小例子(关于笔和写的案例)

首先我们写一个接口类,里面定义一个写的方法:

public interface Writer {
public void write();
}

然后我们来看实现类:

public class GangBi implements Writer {
@Override
public void write() {
// to do something
}
}
public class MaoBi implements Writer {
@Override
public void write() {
// to do something
}
}
然后创建工厂类:
public class WriteFactory {
// 简单工厂模式,弊端:如果字符串输错,实例就创建不成功
public Writer produce(String type) {
if ("gb".equals(type)) {
return new GangBi();
} else if ("mb".equals(type)) {
return new MaoBi();
} else {
return null;
}
}
}
测试类:
public class FactoryTest {
public static void main(String[] args) {
WriteFactory factory = new WriteFactory();
Writer write = factory.produce("mb");
write.write();
}
}
上面是简单工厂模式,上面注释也说了,如果输入的字符串有错,则不能正确常见对象,并且这种方法也并不友好,所以这种工厂模式不推荐使用。

第二种,多工厂模式:就是对工厂方法进行改进,提供多个工厂方法,分别创建对象。

修改WriteFactory如下:
public class WriteFactory {
public Writer produceGb() {
return new GangBi();
}
public Writer produceMb() {
return new MaoBi();
}
}
测试类:
public class FactoryTest {
public static void main(String[] args) {
WriteFactory factory = new WriteFactory();
Writer write = factory.produceMb();
write.write();
}
}
这种方法避免了上面讲的问题。

第三种,静态工厂模式:修改工厂类里面的方法,把所有方法都变成静态的,这样,调用工厂方法的时候不需要创建实例就可以了。
public class WriteFactory {
public static Writer produceGb() {
return new GangBi();
}
public static Writer produceMb() {
return new MaoBi();
}
}
测试类:
public class FactoryTest {
public static void main(String[] args) {
Writer write = WriteFactory.produceMb();
write.write();
}
}

总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且有共同的接口时,可以通过工厂模式方法进行创建。上述三那种模式中,第一种如果字符串输错了,会导致实例创建不成功,第三种相对于第二种不要创建工厂方法实例,所以,大多数情况下,推荐使用第三种静态工厂模式。

public class WriteFactory {
public static Writer produceGb() {
return new GangBi();
}
public static Writer produceMb() {
return new MaoBi();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐