关于工厂模式的探究

关于工厂模式的探究:
工厂模式分为三种:
1.简单工厂模式
2.工厂模式
3.抽象工厂模式

1.简单工厂模式的具体特征是 只有三个对象。 1. 工厂 2. 抽象的产品  3. 真实产品

public class Test {
    //抽象的产品
    public interface InterfaceProduct{
        void run();
    }
    //真实产品
    public static class   Product implements InterfaceProduct{
        public void run(){
            System.out.print("Product RUN");
        }
    }
    //工厂
    public static class Factor{
        InterfaceProduct getProduct(){
            return new Product();
        }
    }
    
    public static void main(String[] args) {
        Factor f = new Factor();
        InterfaceProduct ip = f.getProduct();
        ip.run();
    }
}

2.工厂模式
将上述的简单工厂进行拓展可以得到 如果将工厂也抽象画 产品由抽象的工厂产生呢

public class Test {
    //抽象的产品
    public  interface  InterfaceProduct{
         void run();
    }
    //真实产品
    public static class   Product implements InterfaceProduct{
        public void run(){
            System.out.print("Product RUN");
        }
    }
    
    //抽象工厂
    public static abstract class InterfaceFactor{
        abstract InterfaceProduct getProduct();
    }
    
    //工厂
    public  static class Factor extends InterfaceFactor{
        public InterfaceProduct getProduct(){
            return new Product();
        }
    }
    
    
    public static void main(String[] args) {
        InterfaceFactor f = new Factor();
        InterfaceProduct ip = f.getProduct();
        ip.run();
    }
}

总结:简单工厂模式和工厂模式的区别在于 简单工厂模式的产品由工厂直接产生,不经过一个子工厂的概念。
而如果工厂模式子工厂就一个的情况下,也可以直接使用简单工厂模式来完成。
工厂模式的核心为:抽象商品和商品的关系为实现,抽象工厂和工厂的关系为继承。

思考1: 在使用工厂模式的时候 为什么使用子工厂来代替工厂产生商品。 这样可以拓展出很多的工厂来生产不同的产品 提高抽象工厂这段代码的复用率。
思考2:在使用工厂模式的时候 为什么产品都被定为为抽象的。  这样当这个工厂生产Product2,Product3 的时候 我们就不需要修改实现中的代码了。
代码始终为InterfaceProduct ip = f.getProduct();  否则 当产品为产品2的时候 代码应该为 Product2 product2, = f.getProduct(); 仅仅需要在工厂类
修改代码 public InterfaceProduct getProduct(){return new Product2();}  可以极大的减少代码修改量。

3.抽象工厂

抽象工厂为工厂的一个特殊模式 。当一个工厂可以生产很多的产品的时候,如果用工厂模式拓展的话,可以出现很多工厂1,工厂2,工厂3去生产不同的产品。
还有一种解决方案为使用抽象工厂
public class TestAbstractFactor {
    static interface Product{
        void use();
    }
    //食物
    static class Food implements Product{
        public void use() {
            System.out.println("eat");
        }
    }
    //玩具
    static class Toy implements Product{
        public void use() {
            System.out.println("play");
        }
    }
    //武器
    static class Weapon implements Product{
        public void use() {
            System.out.println("kill people");
        }
    }
    static abstract class AbstractFactor{
        public abstract Food createFood();
        public abstract Toy createToy();
        public abstract Weapon createWeapon();
    }
    
    static class Factor extends AbstractFactor{
        @Override
        public Food createFood() {
            return new Food();
        }
        @Override
        public Toy createToy() {
            return new Toy();
        }
        @Override
        public Weapon createWeapon() {
            return new Weapon();
        }
        
    }

public static void main(String[] args) {
        AbstractFactor af = new Factor();
        Product p1 = af.createFood();
        p1.use();
        Product p2 = af.createToy();
        p2.use();
        Product p3 = af.createWeapon();
        p3.use();
    }

}

输出结果为
eat
play
kill people

总结:抽象工厂模式适用于工厂可以产生很多的产品,并且不想产生太多的工厂类的情况下。理论上抽象工厂模式可以和工厂模式相互转化。

时间: 2024-10-12 04:06:26

关于工厂模式的探究的相关文章

工厂模式与抽象工厂模式小览(一)

一.文章来由 一天看完 hf设计模式 中的工厂模式,略微还有点消化不了,于是打算好好探究一下.其实不仅仅是这两个模式之间容易混淆,他们各自的定义也是挺绕的,下面我就仔细回过头翻书+查阅资料,重新捋一捋,研究一下这两个"工厂".同时还是保持一个开放的心态,设计模式博大精深,很难一文以蔽之,于是<xx小览>系列文章又添新作. Ps. 鉴于类容过长,我分成两部分来写,第一部分主要是自己对于看 hf设计模式 的总结,第二部分是来自书本和查找资料详细对比二者的不同~~ 二.简单工厂模

抽象工厂模式

思考:工厂方法模式:http://www.cnblogs.com/maggiejyt/p/7561253.html 工厂方法模式UML: 问题:如果这家工厂不止要生产Ball(球),还要还有Sneakers(球鞋)等 则UML图为 当Product有多种类时则是抽象工厂模式 代码(Ball的代码见简单工厂模式:http://www.cnblogs.com/maggiejyt/p/7561253.html) Sneakers(球鞋抽象类) package com.maggie.FactoryMet

设计模式 2/23 工厂模式

工厂模式是最常用的设计模式之一,用好了,代码优雅,可维护性高,对系统设计会上一个台阶 为什么这么说,因为工厂模式可以牵扯出抽象工厂模式,也有大家都会聊到的简单工厂模式 我们要了解一点,23中设计模式中,不包含简单工厂模式,之所以大家会去聊这个,四个字,渐进明细 通过对简单工厂模式的了解,我们引入工厂这个词,不然一个写代码的,天天给他讲工厂,工厂,工厂,西厂,东厂,会晕 同时,通过逐步的深入,从简单工厂,到工厂模式,再到抽象工厂,渐进明细的过程,逐步深入的理解,比较优劣,择优而为我们所用. 试想我

简单工厂模式

目前正在看<大话设计模式>,写此系列的文章记录下学习的经过. 简单工厂模式 先看如下代码,使用面向对象的原理实现计算器功能 Operation运算类 1 public class Operation 2 { 3 private double numberA = 0; 4 private double numberB = 0; 5 6 public double NumberA 7 { 8 get { return numberA; } 9 set { numberA = value; } 10

设计模式——介绍与工厂模式(扁平管理模式VS职业经理人模式)

本文主要对设计模式进行大概解说.特别是对工厂模式进行简明的解析: 一.设计模式的分类 创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. 结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. 行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.訪问者模式.中介者模式.解释器模式. 事实上还有两类:并发型模式和线程池模式. 二.设计模式的六大原则 1.开闭原则(Op

工厂模式

工厂模式属于创建型模式,由一个工厂对象决定创建出哪一种产品类的实例. 角色: IProduct: 产品共同的接口 Product1:具体的产品类 Creator:工厂类,可根据参数决定创建的产品类型 示例: public interface IProduct { void myfunction(); } --- class Product1 implements IProduct{ public void myfunction(){ System.out.println("function1&q

Java设计模式—工厂方法模式&amp;抽象工厂模式

工厂方法模式与抽象工厂模式都是设计模式中重要而且常见的模式.       工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类.工厂方法使一个类的实例化延迟到其子类. 通用类图如下: 在工厂方法模式中,抽象产品类Product负责定义产品的共性,实现对事物最抽象的定义:Creator为抽象创建 类,也就是抽象工厂,具体如何创建产品类是由具体的实现工厂ConcreteCreator完成的. 工厂方法模式的扩展方式有很多种,下边是工厂方法模式一个比较实用的源代码: 抽象产品类: pub

java设计模式--工厂模式

总结 (1)简单工厂模式是由一个具体的类去创建其他类的实例,父类是相同的,父类是具体的. (2)工厂方法模式是有一个抽象的父类定义公共接口,子类负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成. (3)抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无须指定他们具体的类.它针对的是有多个产品的等级结构.而工厂方法模式针对的是一个产品的等级结构. 一.工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的. 工厂模式在<Java

大话设计模式:简单工厂模式

由于面向过程编程造成的代码膨胀问题越来越严重,使其维护的代价高,灵活性很低.为了使代码易维护.易扩展.易复用和灵活性好,所以我们在采用面向对象编程的时候,防止采用面向对象的语言实际上却做着面向过程的事儿,更需要采用某种设计模式,核心就是使程序变得高内聚,低耦合,这样的程序才能达到上面的四个优点.而简单工厂模式的出现也正是为了达到这样一种效果,将工厂和产品分块,具体解决了实例化那个对象(具体产品)的需求.从而实现了高内聚,低耦合.使程序易维护.易扩展.易复用和灵活性好.同时也用到了面向对象编程的三