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();
    

  • 相关阅读:
    Java EE
    C++基础学习(二)之判断
    C++基础学习(一)之循环
    AutoCAD完全卸载
    point-cloud-annotation-tool编译发烧记_UBUNTU
    Ubuntu18.04安装QT5
    Ubuntu安装VTK-8.1
    常用Latex公式代码表[持续更新]
    shp矢量文件批处理裁剪栅格影像_IDL/ENVI
    摄影测量基本原理
  • 原文地址:https://www.cnblogs.com/mjjh/p/13296024.html
Copyright © 2011-2022 走看看