简单工厂模式
- 定义一个类负责创建其他类的实例
- 被创建的类实现共同接口
文章待改进……
interface Work {
public void doWork();
}
class WorkA implements Work {
public void doWork() {
System.out.println("do work A");
}
}
class WorkB implements Work {
public void doWork() {
System.out.println("do work B");
}
}
//简单工厂 提供一个方法创建工作实例
class Factory {
public Work createWork(int i) {
switch (i) {
case 0:
return new WorkA();
case 1:
return new WorkB();
}
return null;
}
}
测试:
Factory factory = new Factory();
Work work = factory.createWork(1);
work.doWork();
Tips:简单工厂模式不是23种里的一种
实现封装
扩展性差:
- 添加或修改工作需修改工厂类方法
- 不同的任务需要不同额外参数的时候
- 传递参数出错将不能得到正确的对象
假如要添加Rest方法
interface Rest {
public void doRest();
}
class RestA implements Rest {
public void doRest() {
System.out.println("do rest A");
}
}
class RestB implements Rest {
public void doRest() {
System.out.println("do rest B");
}
}
工厂方法模式
//抽象工厂类
abstract class Factory{
public abstract Work createWork();
}
class WorkFactory extends Factory{
public Work createWork() {
if(1==1)
return new WorkA();
if(1==2)
return new WorkB();
}
}
class RestFactory extends Factory{
public Work createRest() {
if(1==1)
return new RestA();
if(1==2)
return new RestB();
}
}
优点
- 当需求变化,只需要增删相应的类,不需要修改已有的类
缺点
- 每次新增一个具体任务类,也要同时新增一个具体工厂类
抽象工厂模式
以上介绍的工厂都是单任务系,只能执行Work。
抽象工厂是多任务系,除Work外还可执行Rest。
interface Rest {
public void doRest();
}
class RestA implements Rest {
public void doRest() {
System.out.println("do rest A");
}
}
class RestB implements Rest {
public void doRest() {
System.out.println("do rest B");
}
}
abstract class Factory{
public abstract Work createWork();
public abstract Rest createRest();
}
class AFactory extends Factory{
public Work createWork() {
return new WorkA();
}
public Rest createRest() {
return new RestA();
}
}
class BFactory extends Factory{
public Work createWork() {
return new WorkB();
}
public Rest createRest() {
return new RestB();
}
}
违反低耦合
修改抽象工厂类,所有的具体工厂子类都需要被修改