本文从以下方面介绍工厂模式
一、总述
二、工厂方法
三、抽象工厂
一、总述
1、分类:
(1)简单工厂(静态工厂)
(2)工厂方法模式
(3)抽象工厂模式
2、工厂模式意义:
将程序中创建对象的部分单独抽取出来,实现与主程序之间的解耦。具有更好的扩展性及维护性。
3、工厂方法模式与抽象工厂模式异同点
(1)相同点:都是将对象(产品)单独抽取形成一个产品族,然后将创建对象的工厂也向上抽取形成一个工厂族
(2)异同点:
①抽象工厂中会有一系列的产品,而工厂方法中只有一个抽象的产品;
②抽象工厂模式的具体工厂中可以创建多个产品的实例,而工厂方法的具体工厂中只能创建一个产品的实例
(3)工厂方法模式中的角色:
①一个单一的抽象的产品类,该类可以创建出多个同类型的具体产品类;
②一个抽象工厂类,可以创建出多个具体的工厂类,每个工厂类也只能生产一种产品
(4)抽象工厂模式的角色:
①多个抽象的产品类,可以创建出多种类型的多个具体产品;
②一个抽象工厂类,可以创建出多个具体的工厂,每个工厂可以生产出多种产品
二、工厂方法
引入:任意定制交通工具的类型(一种产品)和生产过程
1、类图
2、代码示例
2.1、交通工具接口
package net.oschina.design.factory1.factorymethod; /** * 交通工具的接口类,定制任何一种与交通工具相关的产品 * * @author Freedom * */ public interface Vehicle { /** * vehicel run */ void run(); }
2.1.1交通工具的具体实现
package net.oschina.design.factory1.factorymethod; public class Air implements Vehicle { @Override public void run() { System.out.println("Air like lightning fly...--飞机。"); } }
package net.oschina.design.factory1.factorymethod; public class Car implements Vehicle { @Override public void run() { System.out.println("Car quickly run...--汽车。"); } }
package net.oschina.design.factory1.factorymethod; public class Train implements Vehicle { @Override public void run() { System.out.println("Train wu wu wu run...--火车。"); } }
2.2 交通工具的工厂接口
package net.oschina.design.factory1.factorymethod; /** * * @author Freedom * */ public interface VehicleFactory { Vehicle createVehicle(); }
2.2.1具体的工厂实现类、
package net.oschina.design.factory1.factorymethod; /** * * @author Freedom * */ public class AirFactory implements VehicleFactory { @Override public Vehicle createVehicle() { return new Air(); } }
package net.oschina.design.factory1.factorymethod; /** * @author Freedom * */ public class CarFactory implements VehicleFactory { @Override public Vehicle createVehicle() { /* * 此处,可以定制小汽车的生产过程等等,此方法只是简单实现 */ return new Car(); } }
package net.oschina.design.factory1.factorymethod; /** * * @author Freedom * */ public class TrainFactory implements VehicleFactory { @Override public Vehicle createVehicle() { return new Train(); } }
2.3、测试方法
package net.oschina.design.factory1.factorymethod; /** * 测试工厂方法模式 *工厂方法模式的优点:将对象的创建过程交给一个工厂去完成,实现了程序主流程创建对象时低耦合 * 缺点:每新增一种产品的时候,产品类需要新增加,具体生产该产品的工厂也要新增加,这样会导致工厂泛滥 * 可以将一系列产品放到同一个工厂中,这样如果该产品的系列不变化,只是增加产品的种类就不会引起工厂泛滥,要用到抽象工厂的方法 * @author Freedom * */ public class Main { public static void main(String[] args) { VehicleFactory f = new CarFactory(); Vehicle c = f.createVehicle(); c.run(); f = new AirFactory(); Vehicle air = f.createVehicle(); air.run(); } }
2.4、工厂方法模式的组成
1)抽象工厂:工厂方法模式的核心。是具体工厂角色必须实现的接口或者必须继承的父类;
2)具体工厂:它含有和具体业务逻辑有关的代码。由应用程序调用以创建对应的具体产品的对象;
3)抽象产品:它是具体产品继承的父类或者是实现的接口;
4)具体产品:具体工厂角色所创建的对象就是此角色的实例,在java中由具体的类来实现。
三、抽象工厂
引入:任意定制系列产品(如:交通工具...多种产品)
1、类图
2、代码示例
2.1、产品接口
package net.oschina.design.factory1.abstractFactory; /** * 交通工具类 * * @author Freedom * */ public interface Vehicle { void run(); }
package net.oschina.design.factory1.abstractFactory; /** * 武器类 * * @author Freedom * */ public interface Weapon { void shoot(); }
2.1.1产品具体实现
package net.oschina.design.factory1.abstractFactory; public class Car implements Vehicle { @Override public void run() { System.out.println("Car quickly run...--汽车。"); } }
package net.oschina.design.factory1.abstractFactory; public class Train implements Vehicle { @Override public void run() { System.out.println("Train wu wu wu run...--火车。"); } }
package net.oschina.design.factory1.abstractFactory; public class Gun implements Weapon { @Override public void shoot() { System.out.println("Gun shotting...--枪。"); } }
package net.oschina.design.factory1.abstractFactory; public class Tank implements Weapon { @Override public void shoot() { System.out.println("Tank shooting...--坦克。"); } }
2.2、抽象工厂抽象类
package net.oschina.design.factory1.abstractFactory; /** * 抽象工厂用于生产一系列产品 * * @author Freedom * */ public abstract class AbstractFactory { public abstract Vehicle createVehicle(); public abstract Weapon createWeapon(); }
2.2.1抽象工厂的具体实现
package net.oschina.design.factory1.abstractFactory; /** * 生产大型工具的工厂 * * @author Freedom * */ public class BigToolsFactory extends AbstractFactory { @Override public Vehicle createVehicle() { return new Train(); } @Override public Weapon createWeapon() { return new Tank(); } }
package net.oschina.design.factory1.abstractFactory; /** * 小型工具的工厂 * * @author Freedom * */ public class SmallToolsFactory extends AbstractFactory { @Override public Vehicle createVehicle() { // TODO Auto-generated method stub return new Car(); } @Override public Weapon createWeapon() { // TODO Auto-generated method stub return new Gun(); } }
2.3、运行类
package net.oschina.design.factory1.abstractFactory; /** * 测试抽象工厂 * * @author Freedom * */ public class Main { public static void main(String[] args) { /** * 如果想替换工厂的时,直接将工厂的实现对象替换即可,程序的代码不需要修改 */ AbstractFactory f = new SmallToolsFactory(); Vehicle v = f.createVehicle(); v.run(); Weapon w = f.createWeapon(); w.shoot(); } }
2.4、抽象工厂优缺点
(1)抽象工厂模式的优点
①分离接口和实现
客户端使用抽象工厂来创建需要的对象,而客户端根本就不知道具体的实现是谁,客户端只是面向产品的接口编程而已。也就是说,客户端从具体的产品实现中解耦。
②使切换产品族变得容易
因为一个具体的工厂实现代表的是一个产品族,比如上面例子的从Intel系列到AMD系列只需要切换一下具体工厂。
(2)抽象工厂模式的缺点
①不太容易扩展新的产品系列
如果需要给整个产品族添加一个新的产品系列,那么就需要修改抽象工厂,这样就会导致修改所有的工厂实现类。
相关推荐
工厂设计模式是软件工程中广泛使用的一种创建型设计模式,它的主要目的是为了隔离对象的创建过程,使得客户端代码不直接创建对象,而是通过一个专门的工厂类来负责对象的实例化。这种模式使得系统在面对产品扩展时...
工厂设计模式是面向对象编程中的一种经典设计模式,它的主要目的是为了解耦对象的创建与使用,使得系统在不关心具体实现的情况下能够灵活地创建所需的对象。在这个名为"工厂设计模式简单实例"的资料中,我们可以期待...
抽象工厂设计模式抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式 抽象工厂设计模式
简单工厂设计模式是其中一种创建型设计模式,它提供了一个创建对象的接口,但允许子类决定实例化哪一个类。这个接口就像一个工厂,根据输入条件生产不同类型的实例。 简单工厂模式的核心在于一个“工厂”类,这个类...
C#工厂设计模式简单实例——计算器 public class Factory { //创建一个静态方法 public static Operation CreateOper(int a, int b, string oper) { //创建一个Operation对象 Operation op = null; switch ...
抽象工厂设计模式是其中一种创建型设计模式,它提供了一种创建对象家族的方法,这些对象来自同一个接口但属于不同的类。在这个“C#简单登录演示抽象工厂设计模式”的案例中,我们将深入探讨如何在C#中应用这个模式来...
### 简单工厂设计模式概述 简单工厂模式(Simple Factory Pattern)是设计模式中较为基础的一种模式,属于创建型模式。它通过提供一个统一的接口来创建一系列相关的或相互依赖的对象,而无需指定具体类。 #### ...
Java抽象工厂设计模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在抽象工厂模式中,一个工厂接口用于创建一系列相关的或相互依赖的对象,而无需指定它们的具体类。这种模式让代码与具体实现解耦,使得...
在给定的“设计模式资料之工厂设计模式”中,我们主要关注的是工厂设计模式,这是一种创建型设计模式,它提供了创建对象的最佳方式。在这个资料中,可能会详细解释工厂模式的概念、目的以及如何在实际编程中应用。 ...
工厂方法与抽象工厂设计模式,这份文档介绍了这种设计模式
单例设计模式、工厂设计模式和抽象工厂模式是常见的软件开发设计模式。这些设计模式提供了一些有用的思想和实现方式,可以帮助开发人员在设计和实现复杂的软件系统时,更加灵活和高效地进行编程。 单例设计模式是一...
本资源包含两部分:工厂设计模式和对象池的设计与实现,主要面向Java开发者。 首先,我们来深入理解工厂设计模式。工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需暴露创建逻辑,同时允许...
例题简单的阐述了Java工厂模式的概念,有利于读者更好地了解Java工厂模式
工厂设计模式是面向对象设计中的一种创建型模式,它的主要目的是为了解耦对象的创建过程,使得客户端代码不再直接通过new关键字创建对象,而是通过一个工厂类来获取所需的对象。这样做的好处在于,当需要添加新的...
工厂设计模式是其中最基础且常用的一种,它属于创建型设计模式,主要用于对象的创建。本实例将深入讲解工厂设计模式的概念、结构以及如何在实际项目中应用。 ### 工厂设计模式概述 工厂设计模式的核心思想是定义一...
**Java工厂设计模式之简单工厂** 简单工厂设计模式是一种创建型设计模式,它提供一个创建对象的静态方法,客户端可以通过这个静态方法获取所需的具体产品,而无需了解这些产品的具体实现。这种模式的主要目的是将...
《工厂设计模式详解——以Seahe为例》 工厂设计模式是软件工程中一种常见的创建型设计模式,它提供了一种创建对象的最佳方式。在工厂设计模式中,一个工厂类负责创建对象,而客户端则不再直接实例化对象,而是通过...
在本文中,我们将深入探讨三种工厂设计模式——简单工厂模式、抽象工厂模式和工厂方法模式,以及两种单例模式——饿汉单例模式和懒汉单例模式。这些模式都是面向对象设计中的重要组成部分,对于理解和构建可维护、可...
【工厂设计模式】是软件开发中常用的设计模式之一,它主要解决的是在代码中如何创建对象的问题,使得创建对象的过程更加灵活,同时也降低了代码之间的耦合。工厂模式分为三种主要类型:简单工厂模式、工厂方法模式和...