设计模式-创建型模式-抽象工厂方法

定义

工厂的工厂,主要面对的对象为产品族

uml

代码

package abstractfactory;

/**
 * @author mrhy
 * @date 2021/1/4 13:54
 * Copyright (C), 2018-2021
 */
public class Customer {
    public static void main(String[] args) {
        MiFactory miFactory = new MiFactory();
        Phone phone = miFactory.getPhone();
        phone.open();
        phone.close();
        phone.sendMsg();
        phone.call();
        Router router = miFactory.getRouter();
        router.open();
        router.close();
        router.sendSgn();

        HuaweiFactory huaweiFactory = new HuaweiFactory();
        Phone phone2 = huaweiFactory.getPhone();
        phone2.open();
        phone2.close();
        phone2.sendMsg();
        phone2.call();
        Router router2 = huaweiFactory.getRouter();
        router2.open();
        router2.close();
        router2.sendSgn();
    }
}

package abstractfactory;

/**
 * @author mrhy
 * @date 2021/1/4 13:53
 * Copyright (C), 2018-2021
 */
public class HuaweiFactory implements IFactory {
    @Override
    public Phone getPhone() {
        return new HuaweiIPhone();
    }

    @Override
    public Router getRouter() {
        return new HuaWeiRouter();
    }
}

package abstractfactory;

/**
 * 小米手机
 *
 * @author mrhy
 * @date 2021/1/4 09:50
 * Copyright (C), 2018-2021
 */
public class HuaweiIPhone implements Phone{

    @Override
    public void open() {
        System.out.println("华为手机开机");
    }

    @Override
    public void close() {
        System.out.println("华为手机关机");
    }

    @Override
    public void sendMsg() {
        System.out.println("华为手机发短信");
    }

    @Override
    public void call() {
        System.out.println("华为手机打电话");
    }
}

package abstractfactory;

/**
 * @author mrhy
 * @date 2021/1/4 11:19
 * Copyright (C), 2018-2021
 */
public class HuaWeiRouter implements Router {
    @Override
    public void open() {
        System.out.println("华为路由器开机");
    }

    @Override
    public void close() {
        System.out.println("华为路由器关闭");
    }

    @Override
    public void sendSgn() {
        System.out.println("华为路由器广播");
    }
}

package abstractfactory;

/**
 * 工厂的基类接口
 *
 * @author mrhy
 * @date 2021/1/4 13:50
 * Copyright (C), 2018-2021
 */
public interface IFactory {
    Phone getPhone();

    Router getRouter();
}

package abstractfactory;

/**
 * 小米工厂
 *
 * @author mrhy
 * @date 2021/1/4 13:52
 * Copyright (C), 2018-2021
 */
public class MiFactory implements IFactory {
    @Override
    public  Phone getPhone() {
        return new XiaomiIPhone();
    }

    @Override
    public Router getRouter() {
        return new  XiaomiRouter();
    }
}

package abstractfactory;

/**
 * 手机接口
 *
 * @author mrhy
 * @date 2021/1/4 09:44
 * Copyright (C), 2018-2021
 */
public interface Phone {

    void open();

    void close();

    void sendMsg();

    void call();
}

package abstractfactory;

/**
 * 路由器
 *
 * @author mrhy
 * @date 2021/1/4 09:49
 * Copyright (C), 2018-2021
 */
public interface Router {
    void open();

    void close();

    void sendSgn();
}

package abstractfactory;

/**
 * 小米手机
 *
 * @author mrhy
 * @date 2021/1/4 09:50
 * Copyright (C), 2018-2021
 */
public class XiaomiIPhone implements Phone{

    @Override
    public void open() {
        System.out.println("小米手机开机");
    }

    @Override
    public void close() {
        System.out.println("小米手机关机");
    }

    @Override
    public void sendMsg() {
        System.out.println("小米手机发短信");
    }

    @Override
    public void call() {
        System.out.println("小米手机打电话");
    }
}

package abstractfactory;

/**
 * @author mrhy
 * @date 2021/1/4 11:19
 * Copyright (C), 2018-2021
 */
public class XiaomiRouter implements Router {
    @Override
    public void open() {
        System.out.println("小米路由器开机");
    }

    @Override
    public void close() {
        System.out.println("小米路由器关闭");
    }

    @Override
    public void sendSgn() {
        System.out.println("小米路由器广播");
    }
}

package abstractfactory;

/**
 * @author mrhy
 * @date 2021/1/4 13:54
 * Copyright (C), 2018-2021
 */
public class Customer {
    public static void main(String[] args) {
        MiFactory miFactory = new MiFactory();
        Phone phone = miFactory.getPhone();
        phone.open();
        phone.close();
        phone.sendMsg();
        phone.call();
        Router router = miFactory.getRouter();
        router.open();
        router.close();
        router.sendSgn();

        HuaweiFactory huaweiFactory = new HuaweiFactory();
        Phone phone2 = huaweiFactory.getPhone();
        phone2.open();
        phone2.close();
        phone2.sendMsg();
        phone2.call();
        Router router2 = huaweiFactory.getRouter();
        router2.open();
        router2.close();
        router2.sendSgn();
    }
}

posted @ 2021-01-04 15:15  小憨马  阅读(33)  评论(0)    收藏  举报