简单工厂模式
简介
* 定义:
* 只有一个工厂, 且所有产品都由这一个工厂生产;
* 缺点:
* 工厂职责过重, 不利于扩展复杂的产品结构;
* 添加产品时, 修改工厂类, 不符合开闭原则;
* 使用场景:
* 产品种类较少时;
代码
思路
* 实现简单工厂基础功能;
* 有一个汽车工厂:
* 该工厂可以生产: Audi家用车, Audi商务车, Benz家用车, Benz民用车
code
public class CarFactory {
public void createCar(String carName) {
if (carName.equals("BenzFamily")) {
System.out.println("create BenzFamily");
} else if (carName.equals("AudiFamily")) {
System.out.println("create AudiFamily");
} else if (carName.equals("BenzBusiness")) {
System.out.println("create BenzBusiness");
} else if (carName.equals("AudiBusiness")) {
System.out.println("create AudiBusiness");
} else {
System.out.println("can not create");
}
}
}
工厂方法模式
简介
* 定义:
* 定义了一个接口, 所有工厂都实现这个接口;
* 一个工厂只生产一种产品;
* 优点:
* 如果添加新产品, 只需要增加实现工厂即可;
* 符合开闭原则;
* 缺点:
* 类的数量可能过多;
* 适用场景:
* 产品种类较少;
代码
思路
* 定义一个工厂接口, 可以生产汽车;
* 有一个AudiFamilyFactory 和 一个 BenzBusinessFactory , 分别生产奥迪家用和奔驰商务车;
code
public interface ICarFactory {
public void create();
}
public class AudiBusinessFactory implements ICarFactory{
@Override
public void create() {
// TODO Auto-generated method stub
System.out.println("create audiBusiness Car");
}
}
public class BenzFamilyFactory implements ICarFactory{
@Override
public void create() {
// TODO Auto-generated method stub
System.out.println("create benzFamily car");
}
}
public class Test {
public static void main(String[] args) {
ICarFactory cf = new AudiBusinessFactory();
cf.create();
}
}
抽象工厂模式
简介
* 定义:
* 工厂方法模式向上抽取一个维度;
* 实现 不同工厂 , 生产相同类型产品;
* 比如:
* benz工厂和audi工厂 都生产商务和家用车;
* 优点:
* 减少了方法工厂模式类过多的问题;
* 缺点:
* 需要提前设计好产品模型, 因为增加产品时, 所有实现工厂都需要做修改;
* 场景:
* 多个工厂, 用不同算法实现相同种类的产品时;
代码
思路
* 定义汽车工厂接口:
* 生产家用车和商务车;
* benz汽车工厂实现类:
* Audi汽车工厂实现类;
CODE
public interface ICarFactoryForAbstract {
public void createBusiness();
public void createFamily();
}
public class BenzFactoryForAbstract implements ICarFactoryForAbstract{
@Override
public void createBusiness() {
// TODO Auto-generated method stub
System.out.println("create benzBusiness");
}
@Override
public void createFamily() {
// TODO Auto-generated method stub
System.out.println("create benzFamily");
}
}
public class AudiFactoryForAbstract implements ICarFactoryForAbstract{
@Override
public void createBusiness() {
// TODO Auto-generated method stub
System.out.println("create audiBusiness");
}
@Override
public void createFamily() {
// TODO Auto-generated method stub
System.out.println("create audiFamily");
}
}
public static void main(String[] args) {
ICarFactoryForAbstract cf = new BenzFactoryForAbstract();
cf.createBusiness();
}