设计模式之工厂模式

基本概念

工厂模式也是一种生产对象型的设计模式。

有了工厂模式后,当需要某个类的对象时,就不再需要去new指定的类,而是调用工厂中的方法即可。

实现

假设存在某个类Phone:

public class MiPhone {
}

普通的使用:

MiPhone p = new MiPhone();
p.xx = xx;

但是,出于某些原因,也许不希望在使用时调用构造方法来创建对象,则专门创建一个生产对象的工厂类,并且由这个类中的某个方法来创建对象:

public class PhoneFactory {
    public static Phone newInstance() {
        MiPhone p = new MiPhone();
        p.xx = xx;
        return p;
    }
}

则:

MiPhone phone = PhoneFactory.newInstance();

在以上实现效果中,当需要Phone类的对象时,直接调用工厂中的方法即可,也就不需要关心对象的创建过程

甚至,有的时候,也许你需要的对象只要是某种大分类的类型的就可以,而不必是某个指定的类型:

public interface Phone {
    void dial();
    void call();
}

public class MiPhone implements Phone {
}

一旦存在这样的实现关系后,如果需要的对象能做到是接口中已经定义方法,则:

Phone phone = PhoneFactory.newInstance();
phone.dial();
phone.call();

或者,当MiPhone类已经不足以满足你的需求时,还可以:

public class HuaWeiPhone implements Phone {
}

然后:

public class PhoneFactory {
    public static Phone newInstance() {
        HuaWeiPhone p = new HuaWeiPhone();
        return p;
    }
}

然而,经过这些调整,原有具体执行的代码却不需要改变!即:

Phone phone = PhoneFactory.newInstance();
phone.dial();
phone.call();

以上代码是不需要调整的!所以,工厂模式还有一个特点就是:你可能不会过度的依赖于某个MiPhone或者HuaWeiPhone这样的类,这些类都是可以易于被替换的!以提高了整个项目的可维护性

另外提一点,这些类可以放在同一个包中:

cn.tedu.factory_demo.Phone
cn.tedu.factory_demo.MiPhone
cn.tedu.factory_demo.HuaWeiPhone
cn.tedu.factory_demo.PhoneFactory

然后,具体使用的类,例如MiPhone或者HuaWeiPhone的类本身可以使用默认的权限修饰符,例如:

class MiPhone implements Phone {
}
posted on 2018-06-12 21:54  积跬步---买房买车  阅读(121)  评论(0)    收藏  举报