zoukankan      html  css  js  c++  java
  • 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();
    

  • 相关阅读:
    第35条:注解优先于命名模式
    Apache Shiro入门实例
    第34条:用接口模拟可伸缩的枚举
    Lua数组排序
    C++多态性的理解
    爱推软件
    VMProtect使用小计【一】
    android软件开发之webView.addJavascriptInterface循环渐进【二】
    cocos2dx如何添加popScene的场景动画
    Cocos2d-x 3.0 cocostudio骨骼动画的动态换肤
  • 原文地址:https://www.cnblogs.com/mjjh/p/13296024.html
Copyright © 2011-2022 走看看