简单工厂模式

来源:互联网 发布:mac brew install pip 编辑:程序博客网 时间:2024/06/04 17:59
 *1.为什么会出现简单工厂类?
 * 答:在GOF那本开山之作中是没有“简单工厂模式”的,之所以坊间流行简单工厂模式,是因为它太基础了!
 * 太基础的东西就应该值得铭记。
 * 例如在现实生活中,有专门的工厂生产产品,而不是由我们在使用时才来由我们自己生产。注意了,这里面就涉及到了涉及模式的几个原则,
 * “有专门的工厂生产产品“表明该工厂只是用来生产产品,即单一职责原则,
 * “而不是在我们使用时由自己生产”指的是,我们需要将创建对象和使用对象分开,符合单一职责原则。
 * 为此,出现了“简单工厂模式“
 *
 * 2.什么是简单工厂类?
 * 答:简单工厂类就是为了生产对象而专门设计的类


 * 3.简单工厂类该怎么实现?

 * 答:直接上例子:
 * 假设 我们要生产20元,100元人民币。对于这个过程,我们即可使用简单工厂模式。
 * 抽象类:Rmb,代表的是广大人民币都具有的属性
 * 具体产品类:TwentyYuan,HundredYuan,代表的是具体的每一种对象产品
 * 工厂类:Factory,用来生产Rmb这个对象的。
 * 客户端类:Client,用来测试


 * 4.简单工厂类实现过程

我还是觉得直接上代码比较好,如下:

(1)Rmb类:

package liu.shen.util;/** * Rmb抽象类 * @author Object * */public abstract class Rmb {    //表示纸币的价值属性    abstract void value();//abstract 与{}不能共存    //abstract void display();//}

(2)TwentyYuan类

package liu.shen.util;/** * TwentyYuan * @author Object * */public class TwentyYuan extends Rmb{@Overridevoid value() {// TODO Auto-generated method stubSystem.out.println("I'm a ¥20!");}}

(3)HundredYuan类

package liu.shen.util;/** * HundredYuan * @author Object * */public class HundredYuan extends Rmb{@Overridevoid value() {// TODO Auto-generated method stubSystem.out.println("I'm a ¥100!");}}

(4)SimpleFactory类

package liu.shen.util;/** *1. 简单工厂类 *2. @author Object *3.简单工厂模式,其实就是在SimpleFactory中使用new语句来生成产品对象而已。 *  * */public class SimpleFactory {Rmb rmb1, rmb2;//设置并取值public Rmb getRmb1() {rmb1 = new TwentyYuan();return rmb1;}//设置并取值public Rmb getRmb2() {rmb2 = new HundredYuan();return rmb2;}}

(5)Client类

package liu.shen.util;/** * 客户端类 * @author Object * */public class Client {public static void main(String [] args){SimpleFactory factory = new SimpleFactory();Rmb rmb1 ,rmb2;//这里是面向抽象编程的精粹rmb1 = factory.getRmb1();rmb2 = factory.getRmb2();//通过调用方法显示出两个成员变量的不同rmb1.value();rmb2.value();}}

 *5.运行结果


 * 6.总结

我们可以看到简单工厂模式就是

(1)将产品抽象化,使其可以作为复用类。满足我们所说的面向抽象编程。即依赖倒转原则:抽象不应该依赖于细节,细节应该依赖于抽象。换言之,应该面向抽象编程,而不是针对细节编程。

(2)使用工厂类类专门生产产品。

 */
0 0