zoukankan      html  css  js  c++  java
  • 抽象工厂模式AbstractFactory

    抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。举个简单的例子,比如用"勺子"喝"牛奶",用"筷子"吃"饭"……

    package com.taobao.design;
    
    /**
     * 抽象工厂模式:创建型
     */
    public class AbstractFactory {
        public static void main(String[] args) {
            AbstractFactory client= new AbstractFactory();
            KetchenFactory kf = new AKetchen();
            client.eat(kf);
        }
         public void eat(KetchenFactory k){
             System.out.println("A person eat "+k.getFood().getEatable()+" with "+k.getTableWare().getTool()+"!");
        }
    }
    /**
     * 抽象工厂的接口
     */
    interface KetchenFactory{
        public Food getFood();
        public TableWare getTableWare();
    }
    /**
     * 抽象餐具的接口
     */
    interface TableWare{
        public String getTool();
    }
    /**
     * 抽象食物的接口
     */
    interface Food{
        public String getEatable();
    }
    /**
     * 具体工厂AKetchen
     */
    class AKetchen implements KetchenFactory{
        
        public Food getFood(){
             return new Milk();
        }
        public TableWare getTableWare(){
             return new Spoon();
        }
    }
    /**
     * 具体餐具(spoon)
     */
    class Spoon implements TableWare{
        public String getTool() {
             return "spoon";
        }
    }
    /**
     * 具体食物(milk)
     */
    class Milk implements Food{
        public String getEatable(){
             return "milk";
        }
    }

    抽象工厂模式的使用场景定义非常简单:一个对象族(或是一组没有任何关系的对象)都有相同的约束,则可以使用抽象工厂模式,什么意思呢?例如一个文本编辑器和一个图片处理器,都是软件实体,但是Lnix下的文本编辑器和WINDOWS下的文本编辑器虽然功能和界面都相同,但是代码实现是不同的,图片处理器也是类似情况,也就是具有了共同的约束条件:操作系统类型,于是我们可以使用抽象工厂模式,产生不同操作系统下的编辑器和图片处理器。即有一系列产品,可以有多种实现的方案时,可以使用抽象工厂模式。

  • 相关阅读:
    Linux服务器上监控网络带宽的18个常用命令
    centos性能监控系列三:监控工具atop详解
    centos性能监控系列二:Collectl初解
    centos查看硬件信息
    CentOS 6.4安装配置LAMP服务器(Apache+PHP5+MySQL)
    CentOS下如何完全卸载MySQL?卸载自带的mysql
    安全初始化MySql服务器
    用nginx-gridFS读取MongoDB的图片及文件(为什么你老是配不成功?)
    理解去中心化 稳定币 DAI
    如何开发一款以太坊(安卓)钱包系列2
  • 原文地址:https://www.cnblogs.com/hnhcc39/p/2606388.html
Copyright © 2011-2022 走看看