现在的位置: 首页 > 综合 > 正文

工厂模式(屌丝专用)

2018年05月16日 ⁄ 综合 ⁄ 共 1557字 ⁄ 字号 评论关闭

钱是屌丝最缺的东西,为大家提供造钱工厂让你们嗨翻天。

意图:定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method 使一个类的实例化延迟到其子类。

适用性:

1、屌丝用钱的时候才去造钱

2、屌丝决定造出什么毛爷爷

大家先看个类图

1.Product
定义工厂方法所创建的对象的接口。
2.ConcreteProduct
实现Product接口。
3.Creator
声明工厂方法,该方法返回一个Product类型的对象。
4.ConcreteCreator
重定义工厂方法以返回一个ConcreteProduct实例。

具体实现:

package creatingtype.factorymethod;

public interface Money {

    /** 
     * 打印钞票
     */
    public void printMoney();
}

package creatingtype.factorymethod;

public interface MoneyFactory {

    /**
     * 获得Money
     */
    public Money getMoney();
}

package creatingtype.factorymethod;

public class BlueMoney implements Money {

    /** 
     * 打印钞票
     */
    public void printMoney() {
        System.out.println("你获得了蓝色的50元毛爷爷一张");
    }
}

package creatingtype.factorymethod;

public class BlueMoneyFactory implements MoneyFactory {

    /**
     * 获得Money
     */
    public Money getMoney() {
        return new BlueMoney();
    }

}

package creatingtype.factorymethod;

public class RedMoney implements Money {

    /** 
     * 打印钞票
     */
    public void printMoney() {
        System.out.println("你获得了红色的100元毛爷爷一张");
    }
}

package creatingtype.factorymethod;

public class RedMoneyFactory implements MoneyFactory {

    /**
     * 获得Money
     */
    public Money getMoney() {
        return new RedMoney();
    }
}

package creatingtype.factorymethod;

// 工厂方法模式
public class MainClass {

    //    工厂方法模式同样属于类的创建型模式又被称
    //    为多态工厂模式 。工厂方法模式的意义是定义一个创建
    //    产品对象的工厂接口,将实际创建工作推迟到子类当中。
    //    核心工厂类不再负责产品的创建,这样核心类成为一个
    //    抽象工厂角色,仅负责具体工厂子类必须实现的接口,
    //    这样进一步抽象化的好处是使得工厂方法模式可以使系
    //    统在不修改具体工厂角色的情况下引进新的产品。
    public static void main(String[] args) {
        //获得BlueMoneyFactory
        MoneyFactory bmf = new BlueMoneyFactory();
        //通过BlueMoneyFactory来获得BlueMoney实例对象
        Money bm = bmf.getMoney();
        bm.printMoney();

        //获得RedMoneyFactory
        MoneyFactory rmf = new RedMoneyFactory();
        //通过RedMoneyFactory来获得RedMoney实例对象
        Money rm = rmf.getMoney();
        rm.printMoney();

    }
}

抱歉!评论已关闭.