• 抽象工厂模式


    模式定义

    抽象工厂模式:提供一个创建一系列相关或相关依赖对象的接口,而无需指定他们具体的类,抽象工厂模式又被称为Kit模式,属于对象创建型模式。

    模式结构

    以window和linux的按钮和文本框为例

     模式分析

    优点:

    (1)抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建,在某种程度上,改变其工厂可以改变整个运行环境。

    (2)当一个 产品族中多个对象一起工作时,它能保证客户端只使用一个产品族对象。

    (3)符合开闭原则,增加新的具体工厂和产品族很方便。

    缺点:

    (1)在添加新的产品时,难以扩展抽象工厂来生产新种类的产品,针对抽象工厂的扩展,这将涉及到对抽象工厂角色及所有子类的修改,显然带来很多不便。

    电视空调案例

    TV接口类

    package com.zck.abstractfactory;
    
    public interface TV {
        public void play();
    }

    HaierTV类

    package com.zck.abstractfactory;
    
    public class HaierTV implements TV {
    
        public void play() {
            System.out.print("海尔电视正在播放
    ");
        }
    }

    TCLTV类

    package com.zck.abstractfactory;
    
    public class TCLTV implements TV {
    
        public void play() {
            System.out.print("TCL电视正在播放
    ");
        }
    }

    空调接口类

    package com.zck.abstractfactory;
    
    public interface AirConditioner {
        public void change();
    }

    海尔空调类

    package com.zck.abstractfactory;
    
    public class HaierAirConditioner implements AirConditioner {
    
        public void change() {
            System.out.print("海尔空调正在改变温度
    ");
        }
    
    }

    TCL空调类

    package com.zck.abstractfactory;
    
    public class TCLAirConditoner implements AirConditioner {
    
        public void change() {
            System.out.print("TCL空调正在改变温度
    ");
        }
    
    }

    工厂接口类

    package com.zck.abstractfactory;
    
    public interface Factory {
        public TV produceTV();
        public AirConditioner produceAirConditioner();
    }

    海尔工厂类

    package com.zck.abstractfactory;
    
    public class HaierFactory implements Factory {
    
        public TV produceTV() {
            return new HaierTV();
        }
    
        public AirConditioner produceAirConditioner() {
            return new HaierAirConditioner();
        }
    
    }

    TCL工厂类

    package com.zck.abstractfactory;
    
    public class TCLFactory implements Factory {
    
        public TV produceTV() {
            return new TCLTV();
        }
    
        public AirConditioner produceAirConditioner() {
            return new TCLAirConditoner();
        }
    
    }

    client测试类

    package com.zck.abstractfactory;
    
    public class Client {
        public static void main(String[] args) {
            Factory factory;
            TV tv;
            AirConditioner airConditioner;
            factory = new HaierFactory();
            tv = factory.produceTV();
            airConditioner = factory.produceAirConditioner();
            tv.play();
            airConditioner.change();
        }
    }

    测试结果

  • 相关阅读:
    Nginx作为缓存服务
    Nginx作为代理服务
    ZipUtils zip压缩实现
    getman九桃小说解析油猴脚本
    maven添加代理加速jar包下载
    ffmpeg MP3 flv 视频转mp3
    ActiveMQ配置用户认证信息
    JS实现HTML标签转义及反转义
    删除registry镜像数据,以centos为例
    启动一个带登录账号密码的registry容器
  • 原文地址:https://www.cnblogs.com/2016-zck/p/13868169.html
Copyright © 2020-2023  润新知