• 抽象工厂模式


    模式定义

    抽象工厂模式:提供一个创建一系列相关或相关依赖对象的接口,而无需指定他们具体的类,抽象工厂模式又被称为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();
        }
    }

    测试结果

  • 相关阅读:
    c#中的对象生命周期
    数据抓取的艺术(三):抓取Google数据之心得
    redmine3.3.0安装问题
    wget 无法建立ssl连接 [ERROR: certificate common name ?..ssl.fastly.net?.doesn?. match requested host name ?.ache.ruby-lang.org?. To connect to cache.ruby-lang.org insecurely, use ?.-no-check-certificate?]
    Centos安装ruby
    Redmine插件的安装与卸载,知识库插件安装。
    Nexus网页直接上传jar包
    mvn deploy命令上传包
    一辈子只有1次成为BAT的机会,你如何把握?
    redmine创建新闻,自动发邮件给项目组所有成员
  • 原文地址:https://www.cnblogs.com/2016-zck/p/13868169.html
Copyright © 2020-2023  润新知