黑马程序员技术交流社区

标题: 【武汉校区】讲师分享:简单工厂模式 [打印本页]

作者: 武汉分校-小舞    时间: 2016-3-25 16:56
标题: 【武汉校区】讲师分享:简单工厂模式
本帖最后由 武汉分校-小舞 于 2016-3-25 17:04 编辑

【武汉校区】讲师分享:简单工厂模式
1、 为什么要使用简单工厂模式
案例:Person做不同的交通工具回家
接口TrafficTool
publicinterface TrafficTool {
publicvoid run();
}

实现类Car
public class Car implements TrafficTool {
       public void run() {
              System.out.println("轿车正在行驶...");
       }
}

实现类Bus
public class Bus implements TrafficTool {
       public void run() {
              System.out.println("公交车正在行驶...");
       }
}

类Person
public class Person {     
       public void goHome(TrafficTool tool){
              tool.run();
       }
}

测试类Test
public class Test {
       public static void main(String[] args) {
              Person person=new Person();   
              //构建交通对象
              TrafficTool tool=new Car();        
              person.goHome(tool);
       }
}

上述的问题:
交通工具的构建不应该是客户端自己构建,而应该有生产交通工具的工厂进行统一创建。
这就好像我们的穿的鞋是鞋厂统一生产,而不是自己编织的
所用要上面的程序要使用简单工厂模式进行改进

2、什么是工厂类
创建功能一定要明确工厂的功能是创建对象的
1)        工厂的类名TafficToolFactroy(生产什么就叫XXXFactroy)
2)        工厂的类中创建对象的方法

public static TrafficTool createTrafficTool(String type){         
                 return null;        
}

方法的解释
static:使用静态的好处是可以使用类名直接调用,一般工厂类中的方法都给静态的
参数type:代表根据不同的需求生产不同的对象。 比如type="car"代表要生产轿车,type="bus"代表要公共汽车轿车
返回值TrafficTool:根据不同的需求会创建不同的交通工具,所以使用父类接收返回值才比较合适

3、 方法的具体实现
public static  TrafficTool createTrafficTool(String type){
TrafficTool tool=null;//声明一个父类对象
//根据参数判断有生产什么对象
if ("car".equals(type)) {
                     tool=new Car();
              }else if ("bus".equals(type)) {
                     tool=new Bus();
              }
              return tool;
}
   
4、测试类的改进
public class Test {
       public static void main(String[] args) {
              Person person=new Person();   
              //构建交通对象
//TrafficTool tool=new Car();
//使用工厂创建对象
TrafficTool tool
=TafficToolFactroy.createTrafficTool("car");
               person.goHome(tool);
       }

}     

5、简单工厂模式的缺点:
单工厂模式把生产对象的功能放在一个实类上,如果是在添加一个交通功能的对象,必然会导致工厂类的修改。所有后期可以使用工厂方法模式进行改进

想获取最新传智播客武汉中心分享技术文章请加QQ  1641907557 ,后期会分享更多与实体班同步教程,助你冲击月薪20K!



推荐阅读:

《【武汉分校】UI实体班同步教程+海量素材,打造年薪20W全能设计师》
《黑马程序员Android实体班同步项目Demo源码汇总,挑战月薪20K!

作者: liang1995918    时间: 2016-3-26 09:26
这世界上本没有乌龟或兔子,说的人多了,也才有了乌龟或兔子。我们都跋山涉水,风尘仆仆地向前奔跑,不是为了证明我们到底是不是兔子,是因为我们相信, 跑着跑着,我们就变成了别人眼中的兔子。
作者: 公孙国禄    时间: 2016-3-26 10:49
看了很久没有看的太懂 还是以后努力吧
作者: 武汉分校-小舞    时间: 2016-3-28 16:20
liang1995918 发表于 2016-3-26 09:26
这世界上本没有乌龟或兔子,说的人多了,也才有了乌龟或兔子。我们都跋山涉水,风尘仆仆地向前奔跑,不是为 ...

世界上本没有路,走的人多了就变成了路
作者: 武汉分校-小舞    时间: 2016-3-28 16:21
公孙国禄 发表于 2016-3-26 10:49
看了很久没有看的太懂 还是以后努力吧


作者: liang1995918    时间: 2016-3-28 23:17
天生就是兔子或者天生就是乌龟的人,就算有,也是少数。
        更多的时候,兔子之所以是兔子,就是因为他跑了。
        而乌龟没跑,所以以为自己是乌龟。

作者: xiaoyimiao    时间: 2016-3-28 23:26
真牛点个赞




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2