简单工厂模式
简单工厂模式就是使用java多态的属性,实现父类对子类对象的调用,实现需要一个抽象父类,继承抽象类的子类,工厂类即可
例子:
/**
* <p>Title: Car.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: Car</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public abstract class Car {
public abstract void testCar();
}
/**
* <p>Title: BMCar.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: BMCar</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public class BMCar extends Car{
/* (non-Javadoc)
* @see com.mvc.test.designModel.Car#testCar()
*/
@Override
public void testCar() {
// TODO Auto-generated method stub
System.out.println("这个是BMCar");
}
}
/**
* <p>Title: BYDCar.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: BYDCar</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public class BYDCar extends Car {
/* (non-Javadoc)
* @see com.mvc.test.designModel.Car#testCar()
*/
@Override
public void testCar() {
// TODO Auto-generated method stub
System.out.println("这个是BYDCar");
}
public void testBMCar(){
System.out.println("这个是testBMCar");
}
}
/**
* <p>Title: Main.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月4日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: Main</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月4日
*/
public class Main {
public static void main(String[] args) {
Car car = CarFactory.getBean(1);// 根据数字调用
car.testCar();
}
}
/**
* <p>Title: CarFactory.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: CarFactory</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public class CarFactory {
public static Car getBean(int i){
Car car = null;
switch(i){
case 1:
car = new BMCar();
break;
case 2:
car = new BYDCar();
break;
}
return car;
}
}
工厂模式
工厂模式是在上面简单工厂模式中改进 工厂方法,不用switch 进行判断获取对象了,使用接口,将对象的生产放在接口中产生。
/**
* <p>Title: CarBean.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: CarBean</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public interface CarBean {
public Car getBMCar();
public Car getBYDCar();
}
/**
* <p>Title: CarBeanImpl.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: CarBeanImpl</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public class CarBeanImpl implements CarBean{
/* (non-Javadoc)
* @see com.mvc.test.designModel.CarBean#getBMCar()
*/
@Override
public Car getBMCar() {
// TODO Auto-generated method stub
return new BMCar();
}
/* (non-Javadoc)
* @see com.mvc.test.designModel.CarBean#getBYDCar()
*/
@Override
public Car getBYDCar() {
// TODO Auto-generated method stub
return new BYDCar();
}
}
/**
* <p>Title: Main.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月4日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: Main</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月4日
*/
public class Main {
public static void main(String[] args) {
CarBean bean = new CarBeanImpl();
bean.getBMCar().testCar();
bean.getBYDCar().testCar();
}
}
抽象工厂模式
工厂里面生产的不在是一个个对象而是接口,让我们通过这些接口去获取对象
这个代码多贴一部分:
/**
* <p>Title: Factory.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: Factory</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public interface Factory {
public BikeBean getBikeBean();
public CarBean getCarBean();
}
/**
* <p>Title: Factory.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: Factory</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public interface Factory {
public BikeBean getBikeBean();
public CarBean getCarBean();
}
/**
* <p>Title: FactoryImpl.java</p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2017</p>
* <p>Company:kehui</p>
* @author jiangcl
* @date 2018年10月14日
* @version 1.0
*/
package com.mvc.test.designModel;
/**
* <p>Title: FactoryImpl</p>
* <p>Description: </p>
* @author jiangcl
* @date 2018年10月14日
*/
public class FactoryImpl implements Factory{
/* (non-Javadoc)
* @see com.mvc.test.designModel.Factory#getBikeBean()
*/
@Override
public BikeBean getBikeBean() {
// TODO Auto-generated method stub
return new BikeBeanImpl();
}
/* (non-Javadoc)
* @see com.mvc.test.designModel.Factory#getCarBean()
*/
@Override
public CarBean getCarBean() {
// TODO Auto-generated method stub
return new CarBeanImpl();
}
}