前言:经过前篇文章的学习,大家应该形成一种潜意识,那就是不管什么设计模
式,它的核心目的是为了解决开发中遇到的问题。完美的解决问题则需要遵循一些原则
比如开闭原则、单一原则、里氏替换原则、依赖倒转原则、接口隔离原则、迪米特法则
和合成复用原则,一句话设计模式为了程序的扩展性好,易于维护和升级。
开发就像打仗一样,如果双方实力一样最开始会硬钢,但是如果一边人少还想赢
得战争只能想套路了,于是就有了《孙子兵法》《三十六计》,书里面告诉了我们应
该用什么计谋应对特定的情况,比如《三十六计》就有胜战计、敌战计、攻战计、混
战计、并战计、败战计,其实更多的时候是多种计谋一起使用,比如王允使用美人计
+连环计巧杀董卓。学习更多设计模式之后你还会面临设计模式选择的问题,比如金蝉
脱壳和走为上策有什么区别,关于这些就属于设计模式高深的内容了,请持续关注我
们设计模式后续的内容。。。
问题描述:上次小张使用简单工厂模式完美的解决了埃及猫与波斯猫的创建问
题,而且小张感觉自己的代码是可以完美扩展的.
public class TestEasyFactory {
public static void main(String[] args) {
//向工厂模式传参并创建对象
Cat cat = CatFactory.create(CatType.PersianCat);
}
}
class CatFactory {
public static Cat create(CatType type) {
Cat cat = null;
//判断猫的类型创建对象
if (CatType.PersianCat == type) {
cat = new PersianCat();
} else if (CatType.Egypt == type) {
cat = new EgyptCat();
}
return cat;
}
}
interface Cat {
}
class EgyptCat implements Cat {
public void run() {
System.out.println("EgyptCat.run()");
}
}
class PersianCat implements Cat {
public void run() {
System.out.println("PersianCat.run()");
}
}
enum CatType {
PersianCat, Egypt
}
但是随着越来越多猫的类型加入,小张发现自己的工厂判断代码要不断的更新
判断逻辑,其实这暴露出两个问题:
1、我们开发过的代码不应该被大量修改,如果三个程序员同时修改一个文件难
免出现不熟悉鄙人的业务而出现错误
2、如果产品太多不应该让一个工厂处理所有的创建,这会让这个工厂类变的
臃肿而增加控制成本,比如你不能依靠一个工厂创建奔驰的跑车和商务
车,而应该多个工厂各司其职。
小张意识到这个问题之后于是将代码修改如下
public class TestMethodFactory {
public static void main(String[] args) {
//向工厂模式传参并创建对象
CatFactory factory = new EgyptCatFactory();
//创建猫对象
Cat cat = factory.create();
}
}
interface Cat {
}
interface CatFactory {
public Cat create();
}
class EgyptCat implements Cat {
public void run() {
System.out.println("EgyptCat.run()");
}
}
class EgyptCatFactory implements CatFactory {
@Override
public Cat create() {
return new EgyptCat();
}
}
class PersianCat implements Cat {
public void run() {
System.out.println("PersianCat.run()");
}
}
class PersianCatFactory implements CatFactory {
@Override
public Cat create() {
return new PersianCat();
}
}
通过对上述代码的观察,我们大概可以发现两件事情:
1、核心工厂类不会被别人修改,以后无论增加什么子类,只需要创建子类并
创建子类的工厂类即可
2、以后每个对象创建都会由自己的工厂类实现,即使创建过程再复杂也不会
对别人的代码产生干扰,而且分工明确,扩展性极好
以上两点就是方法工厂模式的核心思想。
天要下雨需求要变是阻拦不了的,现在宠物医院规模变大,增加了小狗类和小猫
类,而且还分为观赏型和运动型宠物,将来有可能还会把老鼠加进来,那么你感觉这会给
小张的开发带来什么难点呢? 请继续关注我们后续的文章《工厂模式(4)抽象工厂模式》