设计模式-简单工厂模式

来源:互联网 发布:php判断会员登录 编辑:程序博客网 时间:2024/06/03 17:04

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

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

 

简单工厂模式概述:

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


 

0 0
原创粉丝点击