名词解释:
顾名思义,工厂模式就是创建对象的时候使用面向接口形式的开发,具体的实现都是由接口的实现类来做,而在调用的时候不用去关心具体的实现细节,只需要通过入参来决定创建怎么样的一个对象。
解决问题:
1.这样就解决了调用者在创建对象的时候不用去关心实现的细节
2.对客户端调用者隐藏了具体的细节
说白了这两个问题都是在调用的时候通过选择的方式达到客户端调用的目的,而向客户端隐藏具体的细节。
适应场景:
各种面临选择的问题,比如1、日志记录器:记录可能记录到本地硬盘、系统事件、远程服务器等,用户可以选择记录日志到什么地方。 2、数据库访问,当用户不知道最后系统采用哪一类数据库,以及数据库可能有变化时。 3、设计一个连接服务器的框架,需要三个协议,"POP3"、"IMAP"、"HTTP",可以把这三个作为产品类,共同实现一个接口……
具体实现:
1.定义业务接口
public interface Car {
public void makeCar();
}
2.定义不同的实现
public class BmwCar implements Car {
@Override
public void makeCar() {
// TODO Auto-generated method stub
System.out.println("生产Bmw车");
}
}
public class AudiCar implements Car {
@Override
public void makeCar() {
// TODO Auto-generated method stub
System.out.println("生产Audi车");
}
}
3.定义工厂和简单的客户端实现
public class CarFactory {
public Car maker(String brand) {
if (brand.equals("Audo")) {
return new AudiCar();
} else if (brand.equals("Bmw")) {
return new BmwCar();
}
return null;
}
//模拟客户端调用
public static void main(String[] args) {
CarFactory carFactory = new CarFactory();
Car car1 = carFactory.maker("Audo");
car1.makeCar();
Car car2 = carFactory.maker("Bmw");
car2.makeCar();
}
}