设计模式-工厂模式
程序员文章站
2024-01-20 20:44:34
...
工厂模式,顾名思义就是一个工厂要能根据不同原料来生产不同的产品,我们把工厂中的生产线叫产品生产者,很明显工厂有很多的生产线,工厂会根据提供的原料,选择那条产线来生产出对应的产品。
1.首先所有的生产线都有一个公用方法那就是生产动作,我们写接口
/**
* Created with IntelliJ IDEA.
* User: hank
* Date: 2016/5/26
* Time: 11:22
* 生产类接口 ”生产出各种类型的产品“
* To change this template use File | Settings | File Templates.
*/
public interface Productor {
/**
* 生产方法
*/
public void product();
}
* Created with IntelliJ IDEA.
* User: hank
* Date: 2016/5/26
* Time: 11:22
* 生产类接口 ”生产出各种类型的产品“
* To change this template use File | Settings | File Templates.
*/
public interface Productor {
/**
* 生产方法
*/
public void product();
}
2.实现生产接口,因为我们要生产不同的产品
/**
* Created with IntelliJ IDEA.
* User: hank
* Date: 2016/5/26
* Time: 11:25
* 生产TV 的生产者
* To change this template use File | Settings | File Templates.
*/
public class TVProductor implements Productor {
@Override
public void product() {
System.out.println("TVProductor.product===>生产TV");
}
}
/**
* Created with IntelliJ IDEA.
* User: hank
* Date: 2016/5/26
* Time: 11:25
* 生产PC的生产者
* To change this template use File | Settings | File Templates.
*/
public class PCProductor implements Productor {
@Override
public void product() {
System.out.println("PCProduct.product===>生产PC");
}
}
3.写工厂类:
/**
* Created with IntelliJ IDEA.
* User: ${xiangdong.he}
* Date: 2016/5/26
* Time: 11:27
* 工厂会根据提供的原料“strType”,自助选择那条产线来生产,来生产出对应的产品
*/
public class ProductorFactory {
public Productor getProductor(String strType){
if("TV".equals(strType)){
return new TVProductor();
}else if("PC".equals(strType)){
return new PCProductor();
}else{
System.out.println("对不起!我们工厂不能生产这种产品!~");
return null;
}
}
}
这样我们就会有“工厂了”,根据我们自己的实力,依来源材料来做各种不同的产品。
再比如我们的客户不知道我们自己能生产什么,突然送过来原材料让我们生产我们无法生产的产品那就只能说System.out.println("对不起!我们工厂不能生产这种产品!~");
那我们优化下给我们的工厂打广告告知大众能生产什么.
改写工厂类的方法:
public PCProductor getPcProductor(){
return new PCProductor();
}
public TVProductor getTvProductor(){
return new TVProductor();
}
这样我们就告诉客户我们只生产这两种类型的产品。
test:
public class MyTest {
public static void main(String[] args) {
//1.
//实例化工厂
ProductorFactory pf = new ProductorFactory();
//获得工厂具体的生产者
Productor p = pf.getProductor("TV");
//生产者生产
p.product();
//2.
//获得工厂具体的生产者
PCProductor pcpd = pf.getPcProductor();
pcpd.product();
}
}
显然第二种我们不会犯加工不得错误。
这样如果我们有钱了在添加一条生产DV的生产线,只要在在写一个实现方法,再在工厂类中加入。
这样我们要改动工厂类。
还有一种抽象工厂模式模式,让我们不用修改的太多。
就是将工厂抽象出一个接口,由具体的工厂类实现,生产者还是之前的实现原理,相当于我们将之前的生产线升级成一个工厂一条产线。这样我们在增加生产其他产品的时候就会在建立一个工厂,对应的在建立一条产线,不会再修改任何东西。
上一篇: Pure JS (7):小结
下一篇: js小结