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

    一、介绍

    什么是抽象工厂模式呢?《研磨设计模式》中是这样定义的:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类

    本质是——切换产品簇的实现。

    这里的描述挺含糊的,产品簇是什么呢,就是一系列有关联的对象。其实呢,说白了,就是这个工厂接口是用来创建一系列对象的,其实现类保证了其创建的一系列对象直接都是有联系的。

    二、我的实现

    1、我们假设现在要分配校服给学生,衣服、裤子、鞋子都分别有小、中、大码。代码如下:

    package abstractFactory;
    //衣服接口
    public interface Clothes {
    
    }
    package abstractFactory;
    //鞋子接口
    public interface Shoes {
    
    }
    package abstractFactory;
    //裤子接口
    public interface Trousers {
    
    }

    其中,衣服、裤子、鞋子分别有3个实现类,即BigClothes、MiddleClothes、SmallClothes,BigShoes、MiddleShoes、SmallShoes和BigTrousers、MiddleTrousers、SmallTrousers。这里就不用列出了。

    2、最初,为了方便分配,我们决定小码配小码、中码配中码、大码配大码。

    为此我们先建立一个简单的工厂接口,如下:

    package abstractFactory;
    
    //抽象工厂方法接口
    public interface Factory {
    
        //衣服
        Clothes getCloth();
        //裤子
        Trousers getTrouser();
        //鞋子
        Shoes getShoe();
    }

    3、于是,我们就可以通过子类来构造产品簇了。为了实现小码配小码、中码配中码、大码配大码,我们初步构建3个工厂,如下BigSizeFactory:

    package abstractFactory;
    
    public class BigSizeFactory implements Factory {
    
        //返回大码衣服
        public Clothes getCloth() {
            // TODO Auto-generated method stub
            return new BigClothes();
        }
        //返回大码鞋子
        public Shoes getShoe() {
            // TODO Auto-generated method stub
            return new BigShoes();
        }
        //返回大码裤子
        public Trousers getTrouser() {
            // TODO Auto-generated method stub
            return new BigTrousers();
        }
    
    }

    SmallSizeFactory、MiddleSizeFactory亦如是,这里不列出。

    4、我们分配的过程中,发现有很多孩子都是穿中码衣服、小码裤子和大码鞋子的,为了分配方便,于是我们构建了这样一个工厂,如下:

    package abstractFactory;
    
    //这里产品MSM代表MiddleSmallBig,为了称呼方便
    public class MSBFactory implements Factory{
    
        //返回中码衣服
        public Clothes getCloth() {
            // TODO Auto-generated method stub
            return new MiddleClothes();
        }
        //返回小码裤子
        public Trousers getTrouser() {
            // TODO Auto-generated method stub
            return new SmallTrousers();
        }
        //返回大码鞋子
        public Shoes getShoe() {
            // TODO Auto-generated method stub
            return new BigShoes();
        }
    }

    5、可知,只要知道套餐,就无需关心具体的产品细节。当然了,这里,我们的产品工厂构造的产品之间联系并不十分紧密,这里只是为了简单演示。

    另外,我们可以发现,使用抽象工厂模式来创建一系列相关联的对象非常有用,而且可以很方便的切换产品簇。

    /**
    *   ————————如果觉得本博文还行,别忘了推荐一下哦,谢谢!
    *   作者:钱书康
    *   欢迎转载,请保留此段声明。
    *   出处:http://www.cnblogs.com/zrtqsk/
    */
  • 相关阅读:
    MySQL热备脚本
    从库查看状态的时候显示“ Last_Error”
    Jenkins+svn+maven
    confluence的安装、备份和恢复(wiki)
    RAP在centos上的部署
    不停止MySQL服务的情况下修改root的密码
    给Linux装图形化界面
    大文件传输工具
    MySQL server PID file could not be found!
    find常见用法
  • 原文地址:https://www.cnblogs.com/zrtqsk/p/3624465.html
Copyright © 2011-2022 走看看