Java 工厂模式学习

工厂模式分三种:简单工厂、工厂方法、抽象工厂。其中抽象工厂是用于多个产品族的情况。所谓产品族就是不同产品组成的有机整体,各不同产品之间相互依赖。打个比方,一台电脑有CPU、主板、内存和硬盘等,这些不同产品组成了一个产品族。就好比Dell和HP要把这些产品进行不同的组装,这时就需要用到抽象工厂。以下是代码演示:

简单工厂,可以用反射实现:

首先定义产品的抽象接口

package com.demo.SimpleFactory;

public interface CPU {
    public void run();
}

定义具体产品

package com.demo.SimpleFactory;

public class Intel implements CPU {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("This is Intel!");
    }

}
package com.demo.SimpleFactory;

public class Amd implements CPU {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("This is Amd!");
    }

}

定义工厂类

package com.demo.SimpleFactory;

public class Factory {
    public static CPU create(String str) {
        CPU c = null;
        try {
            c = (CPU) Class.forName("com.demo.SimpleFactory." + str)
                    .newInstance();

        } catch (Exception e) {
            e.printStackTrace();
        }
        return c;
    }
}

测试如下

package com.demo.SimpleFactory;

public class Test {
    public static void main(String[] args){
        CPU c=Factory.create("Amd");
        c.run();
    }
}

打印结果:

This is Amd!

工厂方法

首先定义产品的抽象接口

package com.demo.SimpleFactory;

public interface CPU {
    public void run();
}

定义具体产品

package com.demo.SimpleFactory;

public class Intel implements CPU {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("This is Intel!");
    }

}
package com.demo.SimpleFactory;

public class Amd implements CPU {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("This is Amd!");
    }

}

定义抽象工厂,具体现实由其子类负责

package com.demo.FactoryMethod;

public interface FactoryMethod {
    public CPU create();
}

具体子类工厂

package com.demo.FactoryMethod;

public class AmdFactory implements FactoryMethod {

    @Override
    public  CPU create() {
        // TODO Auto-generated method stub
        return new Amd();
    }

}
package com.demo.FactoryMethod;

public class IntelFactory implements FactoryMethod {
    public  CPU create() {
        return new Intel();
    }
}

测试

package com.demo.FactoryMethod;

public class Test {

    public static void main(String[] args) {
        FactoryMethod af=new IntelFactory();
        CPU c=af.create();
        c.run();
    }
}

打印结果:

This is Intel!

抽象工厂

首先定义产品的抽象接口

package com.demo.SimpleFactory;

public interface CPU {
    public void run();
}

定义具体产品

package com.demo.SimpleFactory;

public class Intel implements CPU {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("This is Intel!");
    }

}
package com.demo.SimpleFactory;

public class Amd implements CPU {

    @Override
    public void run() {
        // TODO Auto-generated method stub
        System.out.println("This is Amd!");
    }

}
package com.demo.AbstractFactory;

public interface Memory {
    public void read(String str);
}
package com.demo.AbstractFactory;

public class KingstonMemory implements Memory {

    public KingstonMemory() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void read(String str) {
        // TODO Auto-generated method stub
        System.out.println("Kingston Read data is:"+str);
    }

}
package com.demo.AbstractFactory;

public class AdataMemory implements Memory {

    public AdataMemory() {
        // TODO Auto-generated constructor stub
    }

    @Override
    public void read(String str) {
        // TODO Auto-generated method stub
        System.out.println("Adata read data is:"+str);
    }

}

定义抽象工厂

package com.demo.AbstractFactory;

public interface AbstractFactory {

    public CPU createCPU();

    public Memory createMemory();
}

不同子类产生不同产品族

package com.demo.AbstractFactory;

public class DellFactory implements AbstractFactory {

    @Override
    public CPU createCPU() {
        // TODO Auto-generated method stub
        return new Intel();
    }

    @Override
    public Memory createMemory() {
        // TODO Auto-generated method stub
        return new KingstonMemory();
    }

}
package com.demo.AbstractFactory;

public class HPFactory implements AbstractFactory {

    @Override
    public CPU createCPU() {
        // TODO Auto-generated method stub
        return new Amd();
    }

    @Override
    public Memory createMemory() {
        // TODO Auto-generated method stub
        return new AdataMemory();
    }

}

测试

package com.demo.AbstractFactory;

public class Test {
    public static void main(String[] args){
        AbstractFactory hp=new HPFactory();
        CPU cpu=hp.createCPU();
        Memory memory=hp.createMemory();
        cpu.run();
        memory.read("Pass");
    }
}

打印结果:

This is Amd!
Adata read data is:Pass

Java 工厂模式学习

时间: 2024-08-10 17:02:50

Java 工厂模式学习的相关文章

创建型-抽象工厂模式学习

1.抽象工厂模式的意图: 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类. 2.抽象工厂模式的适用性: 一个系统要独立于它的产品的创建.组合和表示时. 一个系统要由多个产品系列中的一个来配置时. 当你要强调一系列相关的产品对象的设计以便进行联合使用时. 当你提供一个产品类库,而只想显示它们的接口而不是实现时. 3.场景描述: 考虑一个生产多种不同风格的家具的工厂(FurnitureFactory),不同风格的家具系列可以提供不同的门.窗.地板等的组合,为同一所住房可以提供不同

设计模式——工厂模式学习

1.概念 工厂模式定义:实例化对象,用工厂方法代替new操作.达到解耦的目的(避免硬编码耦合).工厂方法模式是类的创建模式,又叫做虚拟构造子(Virtual Constructor)模式或者多态性工厂(Polymorphic Factory)模式. 工厂模式是我们最常用的模式了,著名的Jive论坛 ,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见.因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例

Java工厂模式

Java工厂模式 看了这么多关于工厂模式的解说,还是认为这篇文章讲的好理解,贴出来和大家分享分享. 一.引子 话说十年前,有一个****户,他家有三辆汽车--Benz奔驰.Bmw宝马.Audi奥迪,还雇了司机为他开车.只是,****户坐车时总是怪怪的:上Benz车后跟司机说"开奔驰车!",坐上Bmw后他说"开宝马车!",坐上Audi说"开奥迪车!".你一定说:这人有病!直接说开车不即可了?! 而当把这个****户的行为放到我们程序设计中来时,会发

设计模式——抽象工厂模式学习

要想正确的理解设计模式,首先必须明确它是为了解决什么问题而提出来的. 抽象工厂设计模式概念: 针对抽象工厂这个设计模式,我查找了不少资料,感觉只有涉及产品级别和产品族的才是理解了抽象工厂设计模式的精髓,工厂方法模式针对的是一个产品等级结构:而抽象工厂模式针对的是多个产品等级结构.有些观点认为抽象工厂模式是为了解决客户端代码与工厂类的耦合问题,我认为这种观点的解决方案只是简单工厂模式的一个应用,而这种观点认为的抽象工厂模式是: 工厂模式+简单工厂模式=抽象工厂模式,这是不正确. 针对的问题: 针对

Java工厂模式(Factory模式)

工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因为工厂模式就相当于创建实例对象的new,我们经常要根据类Class生成实例对象,如A a=new A() 工厂模式也是用来创建实例对象的,所以以后new时就要多个心眼,是否可以考虑实用工厂模式,虽然这样做,可能多做一些工作,但会给你系统带来更大的可扩展性和尽量少的修改量. 我们以类Sample为例,

java代理模式学习

Java动态代理模式 1. 代理:一个角色代表别一个角色来完成某些特定的功能. 比如:生产商,中间商,客户这三者这间的关系 客户买产品并不直接与生产商打交道,也不用知道产品是如何产生的,客户只与中间商打交道,而中间商就可以对产品进行一些包装,提供一些售后的服务. 代理模式有三个角色: 1. 抽象主题角色 2. 代理主题角色 3. 实际被代理角色 其它类通过访问代理主题角色来访问实际被代理角色. 2. 下面我们来个一个静态代理的实现. 我以一个坦克为例. 抽象主题角色:Moveable Java代

java 工厂模式变形的多种应用

工厂模式在项目开发中是使用效率非常高的,意思就是说定义一个用于创建对象的接口,让子类去决定实例化哪一个类.这就是一个工厂类的示意图 接着来一个简单的例子: 如上图所示,我们首先定义我们的产品抽象类接口,也可以是抽象类: package factory; public abstract class PlatForm { public void search(){ System.out.println("你搜索的结果是......"); } public abstract void mus

自己理解的java工厂模式,希望对大家有所帮助

[http://www.360doc.com/content/11/0824/17/3034429_142983837.shtml] 这两天突然想学学java源代码,不过看到一篇文章说看java源代码要先看设计模式,这样更容易理解源代码的结构,所以就准备学学java设计模式,首先当然是看java创建模式的工厂模式了,刚开始直接看抽象工厂模式是什么意思,百度百科的实在是看不懂,后来又在网上看了看其他的文章,仔细思考后,还算是理解了,现在跟大家分享下. 首先说说简单工厂模式,我用现实中的汽车工厂举例

Java工厂模式(简单工厂、工厂方法、抽象工厂)

工厂模式:主要用来实例化有共同接口的类,工厂模式可以动态决定应该实例化那一个类.工厂模式的形态工厂模式主要用一下几种形态:1:简单工厂(Simple Factory).2:工厂方法(Factory Method).3:抽象工厂(Abstract Factory). 简单工厂(Simple Factory)又叫静态工厂,是工厂模式三中状态中结构最为简单的.主要有一个静态方法,用来接受参数,并根据参数来决定返回实现同一接口的不同类的实例.我们来看一个具体的例子:假设一家工厂,几生产洗衣机,有生产冰箱