Java设计模式---抽象工厂模式

Java设计模式---抽象工厂模式,第1张

1、抽象工厂模式

抽象工厂模式:围绕一个超级工厂创建其他工厂,然后工厂又可以创建一系列产品。抽象工厂模式不可以增加产品,但是能增加产品族

适用场景:
1、客户端(应用层)不依赖于产品类如何被创建和实现等细节
2、强调一系列相关的产品对象(比如 小米品牌的各种产品) 一起使用创建对象需要大量的重复代码
3、提供一个产品类的库,所有的产品以同样的接口出现,从而使得客户端不依赖于具体的实现。

①创建一个手机接口 , 创建一个路由器接口(相当于两个产品)

public interface Iphone {
     void start();//开机
     void shutdown();//关机
     void sendMsg();//发短信
}
public interface Irouter {
    void start();//开机
    void shutDown();//关机
}

②创建一个小米手机和小米路由器,创建一个华为手机和华为路由器

public class XiaomiIphone implements Iphone {
    @Override
    public void start() {
        System.out.println("小米手机开机");
    }
    @Override
    public void shutdown() {
        System.out.println("小米手机关机");
    }
    @Override
    public void sendMsg() {
        System.out.println("小米手机发短信");
    }
}
public class XiaomiIrouter implements Irouter {
    @Override
    public void start() {
        System.out.println("小米路由器开机");
    }
    @Override
    public void shutDown() {
        System.out.println("小米路由器关机");
    }
}
public class HuaweiIphone implements Iphone {
    @Override
    public void start() {
        System.out.println("华为手机开机");
    }
    @Override
    public void shutdown() {
        System.out.println("华为手机关机");
    }
    @Override
    public void sendMsg() {
        System.out.println("华为手机发送短信");
    }
}
public class HuaweiIrouter implements Irouter {
    @Override
    public void start() {
        System.out.println("华为路由器开机");
    }
    @Override
    public void shutDown() {
        System.out.println("华为路由器关机");
    }
}

③创建一个工厂(这个工厂则为超级工厂)

public interface IProductFactory {
    Iphone iphone();
    Irouter irouter();
}

④现在则可创建具体的品牌的工厂了 创建一个小米工厂和华为工厂

public class XiaomiFactory implements IProductFactory {
    @Override
    public Iphone iphone() {
        return new XiaomiIphone();
    }
    @Override
    public Irouter irouter() {
        return new XiaomiIrouter();
    }
}
public class HuaweiFactory implements IProductFactory {
    @Override
    public Iphone iphone() {
        return new HuaweiIphone();
    }
    @Override
    public Irouter irouter() {
        return new HuaweiIrouter();
    }
}

⑤创建一个客户端 通过工厂拿到具体系列的产品

public class Client {

    public static void main(String[] args) {
        System.out.println("================华为系列产品================");
        HuaweiFactory huaweiFactory = new HuaweiFactory();
        Iphone huaweiIphone = huaweiFactory.iphone();
        Irouter huaweiIrouter = huaweiFactory.irouter();
        huaweiIphone.sendMsg();
        huaweiIrouter.start();

        System.out.println("================小米系列产品================");
        XiaomiFactory xiaomiFactory = new XiaomiFactory();
        Iphone xiaomiIphone = xiaomiFactory.iphone();
        Irouter xiaomiIrouter = xiaomiFactory.irouter();
        xiaomiIphone.sendMsg();
        xiaomiIrouter.start();
    }

}

一个工厂 生产一系列产品

优点:
1、具体产品在应用层代码隔离,无需关心创建的细节
2、将一个系列的产品统一到一起创建

缺点:
1、规定了所有可能为创建的产品集合,产品簇中扩展新的产品困难
2、增加了系统的抽象性和理解难度

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/798809.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存