抽象工厂模式

来源:互联网 发布:熊猫网络电视 编辑:程序博客网 时间:2024/05/29 18:02

上一篇写了简单工厂和工厂方法,简单工厂和工厂方法点这里,面向对象的23种设计模式点这里。我们还用上篇美女的例子,直接上代码:

public class Factory {//抽象工厂模式,还是一个类。觉得适合看的人拷过去运行修改//抽象工厂是种匹配关系,这才是核心所在,说没用的只看了形式。    abstract static class 美女 {        身材 身材;//这里为了简单,我们感兴趣的只是身材        void 美女(){            System.out.println("身材:" + 身材.getName());        }    }    public interface 身材 {        String getName();    }    public static class 大长腿 implements 身材{        @Override        public String getName() {            return "大长腿";        }    }    public static class 小短腿 implements 身材{        @Override        public String getName() {            return "小短腿";        }    }    private static class 萝莉美女 extends 美女 {        public void 设置身材(Factory.小短腿 身材) {            this.身材 = 身材;        }        public void 美女() {            System.out.println("获得一个萝莉美女");            super.美女();        }    }    private static class 御姐美女 extends 美女 {        public void 美女() {            System.out.println("获得一个御姐美女");            super.美女();        }        public void 设置身材(Factory.大长腿 身材) {            this.身材 = 身材;        }    }    public static void main(String[] args) {        萝莉美女工厂 萝莉工厂 = new 萝莉美女工厂();        萝莉美女 萝莉 = 萝莉工厂.获取美女();        萝莉.设置身材(new 小短腿());        萝莉.美女();        御姐美女工厂 御姐工厂 = new 御姐美女工厂();        御姐美女 御姐 = 御姐工厂.获取美女();        御姐.设置身材(new 大长腿());        御姐.美女();    }    interface 抽象美女工厂 {        美女 获取美女();    }    public static class 萝莉美女工厂 implements 抽象美女工厂 {        @Override        public 萝莉美女 获取美女() {            return new 萝莉美女();        }    }    public static class 御姐美女工厂 implements 抽象美女工厂 {        @Override        public 御姐美女 获取美女() {            return new 御姐美女();        }    }}输出:获得一个萝莉美女身材:小短腿获得一个御姐美女身材:大长腿

可以看出抽象工厂解决的是萝莉美女与小短腿匹配的问题,其实这里用真正的产品如电脑更好,商务本配固态硬盘和普通显卡、游戏本配普通硬盘和独立显卡。用美女仅仅是为了好玩,也祝愿单身程序员脱单像写代码一样容易。
总结:工厂模式就是不用自己new,而交给简单工厂。当产品复杂时,就需要不止一种工厂于是有了工厂方法。最后产品和组成产品的属性有种匹配,于是有了抽象工厂。所以,没有最好的,只有最适合的。

原创粉丝点击