1:简单工厂模式
package com.andrew.designpattern.simplefactory;
//抽象产品角色
interface Car{
public void driver();
}
//具体产品角色
class Benz implements Car{
@Override
public void driver() {
System.out.println("我要开奔驰。。。");
}
}
class BMW implements Car{
@Override
public void driver() {
System.out.println("我要开宝马。。。");
}
}
//工厂类角色
class Driver {
//工厂方法,注意返回类型是抽象产品角色
public static Car driverCar(String type){
if("benz".equalsIgnoreCase(type)){
return new Benz();
}else if("bmw".equalsIgnoreCase(type)){
return new BMW();
}else{
System.out.println("抱歉,工厂暂时不生产" + type +"类型汽车。");
return null;
}
}
}
public class SimpleFactory {
public static void main(String args[]){
Car car = Driver.driverCar("benz");
if(null != car){
car.driver();
}
}
}
2:工厂方法模式
对于上面简单工厂模式的产品部分来说,它是符合开闭原则的--对扩展开放、对修改关闭
但是工厂部分好像不太理想,因为每增加一辆车,都要在工厂类中增加相应的商业逻辑和判断逻辑
这是违背开闭原则的,所以这里用到了工厂方法模式
package com.andrew.designpattern.factorymethod;
//抽象产品角色
interface Car{
public void driver();
}
//具体产品角色
class Benz implements Car{
@Override
public void driver() {
System.out.println("我要开奔驰。。。");
}
}
class BMW implements Car{
@Override
public void driver() {
System.out.println("我要开宝马。。。");
}
}
//抽象工厂角色
interface Driver{
public Car driverCar();
}
//具体工厂角色
class BenzDriver implements Driver{
@Override
public Car driverCar() {
return new Benz();
}
}
class BMWDriver implements Driver{
@Override
public Car driverCar() {
return new BMW();
}
}
public class FactoryMethod {
public static void main(String args[]){
Driver driver = new BenzDriver();
Car car = driver.driverCar();
car.driver();
}
}
3:抽象工厂模式
http://laughingchs.iteye.com/blog/1169986
总结:
待续。。。