23种设计模式——抽象工厂模式

23种设计模式——抽象工厂模式

  • 定义:抽象工厂模式提供了一个创建一系列相关或者相互依赖对象的接口,无需指定他们具体的类

  • 适用场景

    • 客户端(应用层)不依赖与产品类实例如何创建、实现细节
    • 强调一系列相关的产品对象(属于同一产品簇)一起使用创建对象需要大量的重复代码
    • 提供一个产品类的库,所有的产品一同样的接口实现,从而使得客户端不依赖于具体的实现
  • 优点

    • 具体茶农在应用层的代码隔离,无需关心创建细节
    • 将一个系列的产品统一到一起创建
  • 缺点

    • 规定了所有可能被创建的产品集合,产品簇中扩展新的产品困难
    • 增加了系统的抽象性和理解难度

1)首先创建一个超级工厂,里面有两个产品(电话和路由)

package com.mjh.chouxaingfactory;

public interface IproductFactory {
    IPhonProduct  iPhonProduct();
    IRouterProduct iRouterProduct();

}

2)分别创建电话产品和路由产品接口

package com.mjh.chouxaingfactory;

public interface IPhonProduct {
    void start();
    void shoutDown();
    void  callUp();
    void  sendMS();

}
package com.mjh.chouxaingfactory;

public interface IRouterProduct {
    void start();
    void shoutDown();
    void openWIFI();
    void  setting();
}

3)根据超级工厂实现小米系列的功能(小米电话和小米路由)

package com.mjh.chouxaingfactory;

public class XiaoMiProduct implements IproductFactory {
    @Override
    public IPhonProduct iPhonProduct() {
        return new XiaoMIPhone();
    }

    @Override
    public IRouterProduct iRouterProduct() {
        return new XiaoMiRouter();
    }
}

4)依次实现小米电话的具体功能和小米路由的具体功能

package com.mjh.chouxaingfactory;

public class XiaoMIPhone implements IPhonProduct {
    @Override
    public void start() {
        System.out.println("小米开机");
    }

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

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

    @Override
    public void sendMS() {
        System.out.println("小米发信息");
    }
}
package com.mjh.chouxaingfactory;

public class XiaoMiRouter implements IRouterProduct {
    @Override
    public void start() {
        System.out.println("小米打开路由");
    }

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

    @Override
    public void openWIFI() {
        System.out.println("小米打开WIFI");

    }

    @Override
    public void setting() {
        System.out.println("小米打开设置");
    }
}

5)测试

public class Client {
    public static void main(String[] args) {
        System.out.println("=================小米系列===============");
        XiaoMiProduct xiaoMiProduct = new XiaoMiProduct();
        IPhonProduct iPhonProduct = xiaoMiProduct.iPhonProduct();
        iPhonProduct.start();
        iPhonProduct.callUp();
        iPhonProduct.sendMS();

        XiaoMiRouter xiaoMiRouter = new XiaoMiRouter();
        xiaoMiRouter.openWIFI();
        xiaoMiRouter.setting();

posted @ 2020-07-13 21:39  林森001  阅读(118)  评论(0编辑  收藏  举报