设计模式-简单工厂模式

          最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。

        今天先介绍一下简单工厂模式。

 

简单工厂模式概述:

       定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类(一般为抽象类或接口),简单工厂(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();
		}
	}
}


 

你可能感兴趣的:(java,设计模式,工厂模式)