zoukankan      html  css  js  c++  java
  • java抽象工厂模式

    抽象 工厂模式

    抽象工厂模式:

    围绕一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂

    定义:

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

    使用场景:

    1.客户端(应用层)不依赖产品类实例如何被创建,实现等细节

    2.强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量的重复的代码

    3.提供一个产品类的库,所有的产品以同样的接口出来,从而使得客户端不依赖于实现

    优点:

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

    缺点:

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

    案例:

    IphoneProduct 接口:

    //手机产品接口
    public interface IphoneProduct {
        void start();
        void shutdown();
        void callup();
        void sendSMS();
    }
    

    IRouterProduct接口:

    //路由产品接口
    public interface IRouterProduct {
        void start();
        void shutdown();
        void openWifi();
        void setting();
    }
    

    IProductFactory 接口:

    抽象的工厂,其他工厂的工厂(既是华为的工厂,也是小米的工厂)

    public interface IProductFactory {
        //手机产品
        IphoneProduct iphoneProduct();
    
        //路由器产品
        IRouterProduct irouterProduct();
    
    }
    

    Miphone:小米手机

    //小米手机
    public class Miphone implements IphoneProduct{
        @Override
        public void start() {
            System.out.println("开启小米手机");
        }
    
        @Override
        public void shutdown() {
            System.out.println("关闭小米手机");
        }
    
        @Override
        public void callup() {
            System.out.println("小米手机打电话");
        }
    
        @Override
        public void sendSMS() {
            System.out.println("小米手机发短信");
        }
    }
    

    MiRouter:小明路由器

    public class MiRouter implements IRouterProduct{
        @Override
        public void start() {
            System.out.println("启动小米路由器");
        }
    
        @Override
        public void shutdown() {
            System.out.println("关闭小米路由器");
        }
    
        @Override
        public void openWifi() {
            System.out.println("打开小米WiFi");
        }
    
        @Override
        public void setting() {
            System.out.println("设置小米WiFi");
        }
    }
    

    MiFactory:小米工厂

    public class MiFactory implements IProductFactory{
        @Override
        public IphoneProduct iphoneProduct() {
            return new Miphone();
        }
    
        @Override
        public IRouterProduct irouterProduct() {
            return new MiRouter();
        }
    }
    

    HuaweiPhone华为手机

    public class HuaweiPhone implements IphoneProduct{
        @Override
        public void start() {
            System.out.println("开启华为手机");
        }
    
        @Override
        public void shutdown() {
            System.out.println("关闭华为手机");
        }
    
        @Override
        public void callup() {
            System.out.println("华为手机打电话");
        }
    
        @Override
        public void sendSMS() {
            System.out.println("华为手机发短信");
        }
    }
    
    

    华为路由器:HuaweiRouter

    public class HuaweiRouter implements IRouterProduct {
        @Override
        public void start() {
            System.out.println("启动华为路由器");
    
        }
    
        @Override
        public void shutdown() {
            System.out.println("关闭华为路由器");
        }
    
        @Override
        public void openWifi() {
            System.out.println("打开华为WiFi");
        }
    
        @Override
        public void setting() {
            System.out.println("设置华为WiFi");
        }
    }
    

    HuaweiFactory:华为工厂

    public class HuaweiFactory implements IProductFactory{
        @Override
        public IphoneProduct iphoneProduct() {
            return new HuaweiPhone();
        }
    
        @Override
        public IRouterProduct irouterProduct() {
            return new HuaweiRouter();
        }
    }
    
    

    客户:Client

    public class Client {
    
        public static void main(String[] args) {
            System.out.println("======小米系列产品======");
            MiFactory miFactory = new MiFactory();
            //小米手机
            System.out.println("小米手机产品");
            IphoneProduct iphoneProduct = miFactory.iphoneProduct();
            iphoneProduct.start();
            iphoneProduct.shutdown();
            iphoneProduct.callup();
            iphoneProduct.sendSMS();
            //小米路由器
            System.out.println("小米路由器");
            IRouterProduct iRouterProduct = miFactory.irouterProduct();
               iRouterProduct.openWifi();
               iRouterProduct.start();
               iRouterProduct.setting();
               iRouterProduct.shutdown();
            System.out.println("======华为系列产品======");
            //创建华为工厂
            HuaweiFactory huaweiFactory = new HuaweiFactory();
    
            System.out.println("华为手机");
            //得到抽象工厂的华为手机工厂
            IphoneProduct huaweiIphone = huaweiFactory.iphoneProduct();
            huaweiIphone.start();
            huaweiIphone.callup();
            huaweiIphone.sendSMS();
            huaweiIphone.shutdown();
            System.out.println("华为路由器");
            IRouterProduct iRouter = huaweiFactory.irouterProduct();
             iRouter.start();
             iRouter.openWifi();
             iRouter.setting();
             iRouter.shutdown();
        }
    }
    
    
    
  • 相关阅读:
    Struts2+Spring3+Mybatis3开发环境搭建
    spring+struts2+mybatis
    【LeetCode】Populating Next Right Pointers in Each Node
    【LeetCode】Remove Duplicates from Sorted Array
    【LeetCode】Remove Duplicates from Sorted Array II
    【LeetCode】Binary Tree Inorder Traversal
    【LeetCode】Merge Two Sorted Lists
    【LeetCode】Reverse Integer
    【LeetCode】Same Tree
    【LeetCode】Maximum Depth of Binary Tree
  • 原文地址:https://www.cnblogs.com/jinronga/p/12753913.html
Copyright © 2011-2022 走看看