最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。
今天先介绍一下简单工厂模式。
简单工厂模式概述:
定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类(一般为抽象类或接口),简单工厂(Simple Factory)模式又称为静态工厂方法(Static Factory Method)模式。
流程:
第一步:抽象产品父类(接口或抽象类作为父类)
第二步:具体产品子类(实现类,实现接口)
第三步:工厂类(核心,返回对象)
优缺点:
在简单工厂模式中,工厂类是整个模式的关键,其包含必要的判断逻辑,能够根据外界给定的信息,决定究竟创建哪个类的实例,外界可以不用去关注对象的创建,仅需要负责“消费”对象就可以了,明确区分了责任,有利于结构的优化。
不过,简单工厂模式的缺点也提现在其工厂类上,该类集中了所有实例的创建逻辑,违反了高内聚的责任分配原则,当系统的具体产品类不断增多时,工厂类中条件判断过多,不利于扩展及维护,简单工厂模式的这些缺点,利用工厂方法模式可以得到一定的克服。(感觉很有道理,摘抄自http://www.cnblogs.com/kdalan/archive/2012/05/30/2524979.html,在此致谢!)
示例代码:
下面给出一段Java代码
package Pattern;
interface Car// 父类接口
{
public void CarName();
}
class DaZhong implements Car {
public void CarName() {
System.out.println("这是大众车!");
}
}
class BenChi implements Car {
public void CarName() {
System.out.println("这是奔驰车!");
}
}
class BaoMa implements Car {
public void CarName() {
System.out.println("这是宝马车!");
}
}
class FactoryMethod {
public static Car WhichCar(String s) throws Exception {
if (s.equals("DaZhong")) {
return new DaZhong();
} else if (s.equals("BenChi")) {
return new BenChi();
} else if (s.equals("BaoMa")) {
return new BaoMa();
} else {
throw new Exception();
}
}
}
public class Pattern {
public static void main(String[] args) {
try {
Car car = FactoryMethod.WhichCar("BenChi");
car.CarName();
} catch (Exception e) {
e.printStackTrace();
}
}
}