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

抽象工厂模式(屌丝专用)

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

上一篇屌丝有了人民币工厂,当时屌丝突然想去美国兜一圈怎么办。

意图:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。 

适用性:

1、屌丝决定金额的大小

2、屌丝可以根据在不同的国度选择对应的货币

大家先看个类图

1.AbstractFactory
声明一个创建抽象产品对象的操作接口。
2.ConcreteFactory
实现创建具体产品对象的操作。
3.AbstractProduct
为一类产品对象声明一个接口。
4.ConcreteProduct
定义一个将被相应的具体工厂创建的产品对象。实现abstractProduct接口。
5.Client
仅使用由AbstractFactory和AbstractProduct类声明的接口

具体实现:

package creatingtype.abstractfactory;

public interface Money {

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

package creatingtype.abstractfactory;

public interface MoneyFactory {

    //实例化RMB
    public Money getRMB();

    //实例化USD
    public Money getUSD();
}

package creatingtype.abstractfactory;

public abstract class RMB implements Money {

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

}

package creatingtype.abstractfactory;

public abstract class USD implements Money {

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

package creatingtype.abstractfactory;

public class HundredFactory implements MoneyFactory {

    public Money getRMB() {
        return new RMB100();
    }

    public Money getUSD() {
        return new USD100();
    }

}

package creatingtype.abstractfactory;

public class RMB100 extends RMB {

    public void printMoney() {
        System.out.println("你获得了100的人民币一张");
    }

}

package creatingtype.abstractfactory;

public class USD100 extends RMB {

    public void printMoney() {
        System.out.println("你获得了100的美元一张");
    }

}

package creatingtype.abstractfactory;

public class FiftyFactory implements MoneyFactory {

    public Money getRMB() {
        return new RMB50();
    }

    public Money getUSD() {
        return new USD50();
    }

}

package creatingtype.abstractfactory;

public class RMB50 extends USD {

    public void printMoney() {
        System.out.println("你获得了50的人民币一张");
    }

}

package creatingtype.abstractfactory;

public class USD50 extends USD {

    public void printMoney() {
        System.out.println("你获得了50的美元一张");
    }

}

package creatingtype.abstractfactory;

// 抽象工厂模式
public class MainClass {

    //    抽象工厂模式是所有形态的工厂模式中最为抽
    //    象和最其一般性的。抽象工厂模式可以向客户端
    //    提供一个接口,使得客户端在不必指定产品的具
    //    体类型的情况下,能够创建多个产品族的产品对
    //    象。
    public static void main(String[] args) {
        MoneyFactory ohf = new HundredFactory();
        Money rmb100 = ohf.getRMB();
        rmb100.printMoney();
        Money usd100 = ohf.getUSD();
        usd100.printMoney();

        MoneyFactory ff = new FiftyFactory();
        Money rmb50 = ff.getRMB();
        rmb50.printMoney();
        Money usd50 = ff.getUSD();
        usd50.printMoney();

    }
}

抱歉!评论已关闭.