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();
        }
    }
    
    
    
  • 相关阅读:
    阿里云主机和RDS使用心得
    iOS_2_button控制物体形变
    js 继承概述
    Android 代码混淆
    “...”是字段,但此处被当作类型来使用
    Mali GPU OpenGL ES 应用性能优化--測试+定位+优化流程
    uva 213
    XML基础以及用DOM4j读取数据
    【Hibernate】Hibernate3.x独立执行时的Failed to load class "org.slf4j.impl.StaticLoggerBinder"错误
    《Pro Android Graphics》读书笔记之第六节
  • 原文地址:https://www.cnblogs.com/jinronga/p/12753913.html
Copyright © 2011-2022 走看看