设计模式总的来说分为三大类:
(1)创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
(2)结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
(3)行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
本文就简单工厂模式进行讲解:
抽象工厂模式是对简单工厂模式的改进,在学习抽象工厂模式之前我们都需要要理解简单工厂模式是什么,有哪些弊端,是怎样进行改进的。
简单工厂模式又称静态工厂方法,在实际使用时,专门定义一个类来负责创建其他类的实例,根据输入参数不同返回不同的实例。
比如现在有一个工厂在生产电脑,可以生产戴尔,联想两种电脑,我们在向工厂拿货时不必知道具体怎么生产,直接给工厂传一个参数,比如戴尔或者联想,这样工厂就自己给我们生产出来了,
代码如下,该代码出自:参考链接
首先创建一个抽象接口类:
package factory; /** * 抽象接口 * @author wf */ public interface Computer { void creatComputer(); }
然后创建具体产品类:
1,戴尔电脑:
package factory; /** * Dell电脑 * @author wf */ public class DellComputer implements Computer { @Override public void creatComputer() { System.out.println("Create a dell computer..."); } }
二,联想电脑
package factory; /** * Lenovo电脑 * @author wf */ public class LenovoComputer implements Computer { @Override public void creatComputer() { System.out.println("CreateFactory a lenovo computer..."); } }
三,创建工厂角色
package factory; /** * 根据传进来的参数的产品类型来 生产/创建 真实的产品实体对象 * @author wf */ public class CreateFactory { public static Computer createComputer(String type) { if(type.equals("dellcomputer")) return new DellComputer(); else if (type.equals("haseecomputer")) return new HaseeComputer(); else if(type.equals("lenovocomputer")) return new LenovoComputer(); else System.out.println("no "+type +" computer"); return null; } }
四,调用代码创建产品:
package factory; public class Client { public static void main(String[] args) { Computer computer = CreateFactory.createComputer("haseecomputer"); computer.creatComputer(); } }
可以看到,在第三部分代码中,我们根据传进来的参数来判断需要调用哪个类来创建合适的电脑。
但是此方法有很大的弊端
比如我们现在有了更多种类的电脑需要生产,我们不仅要重新写一个新的类来创建该牌子电脑,并且在第三部分中也需要修改之前的代码,并不符合程序设计的开闭原则。并且如果我们在实际的使用过程中,假如需要增加的电脑种类数量庞大,那么工作量也会特别大。