简单工厂模式(静态工厂模式)

1.定义一个工厂类,它可以根据参数的不同返回不同类的实例,被创建的实例通常都具有共同的父类。因为在简单工厂模式中用于创建实例的方法是静态方法,因此简单工厂模式又被称为静态工厂方法模式,它属于类创建型模型。
2.简单工厂模式包括:
2.1.Factory(工厂角色):工厂角色即工厂类,他是简单工厂模式的核心,负责实现创建所有产品实例的内部逻辑;工厂类可以被外界直接调用,创建所需的产品对象;在工厂类中提供了静态工厂方法factoryMethod(),它返回类型为抽象产品类型Product。
2.2.Product(抽象产品角色):他是工厂类所创建的所有对象的父类,封装了各种产品对象的共有方法,它的引入将提高系统灵活性,使得在工厂类中只需定义一个通用的工厂方法,因为所创建的具体产品对象都是其子类对象。
2.3.ConcreteProduct(具体产品角色):他是简单工厂模式的创建目标,所有被创建的对象都充当这个角色的某个具体类的实例。每一个具体产品角色都继承了抽象产品角色,需要实现在抽象产品中申明的抽象方法。
3.在简单工厂模式中,客户端用过工厂类来创建一个产品实例,而无须直接使用new关键字来创建对象,他是工厂模式家族中最简单的一员。
4.创建具体对象时,每更换一个具体对象时,都要更换客户端的调用静态工厂方法的参数,客户端代码要重新编译,这对于客户端而言违反了“开闭原则”,常用的解决方式有:将调用静态工厂方法的参数作为配置项,那么每次只需修改配置文件就可以达到获取不同类型的实例。

原文地址:https://blog.51cto.com/10450730/2358507

时间: 2024-11-04 19:39:49

简单工厂模式(静态工厂模式)的相关文章

Java代理模式——静态代理模式

一:代理模式 代理模式的作用是:为其他对象提供一种代理以控制这个对象的访问.在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 二:代理模式设计到的角色 抽象角色:声明真是对象和代理对象的共同接口(抽象类或接口). 代理角色:代理对象角色内部含有对真是对象的引用,从而可以操作真是对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真是对象.同时,代理对象可以在执行真实对象的操作时,附加其他操作,相当于对真是对象进行封装. 真实

简单工厂模式(静态工厂方法模式)【设计模式】

定义:提供一个创建实例的功能,客户端使用者无需关心实例的具体实现.被创建实例可以是接口.抽象类,也可以是具体的类.它又称为静态工厂方法(Static Factory Method)模式 简单工厂模式的作用,优点:为客户端屏蔽所需要的实例的具体实现,客户端只需关注某个接口便可,无需关注实现.具体实现被封装起来:客户端和具体实现解耦,客户端只需关注接口,接口的实现变化对客户端没有影响.总结起来,就是封装功能,封转实例的具体实现:解耦功能,接口实现的变化影响不了客户端. 例子: 例子1:不带参数 没有

JAVA笔记7__接口应用/Object类/简单工厂模式/静态代理模式/适配器模式

/** * 接口应用 */ public class Main { public static void main(String[] args) { Person p = new Person("fish7"); p.setIsay(new BeforeGong()); p.say(); p.setIsay(new AfterGong()); p.say(); } } class Person{ //只有在运行期才和say行为关联起来,这就叫面向接口编程 private String

php设计模式 — 简单工厂模式(静态工厂方法模式)

概念 简单工厂模式 [静态工厂方法模式](Static Factory Method) 是类的创建模式 工厂模式的几种形态: 1.简单工厂模式(Simple Factory) |又叫做  静态工厂方法模式(Static Factory Method) 2.工厂方法模式(Factory Method) |又叫做 多态性工厂模式(Polymorphic Factory) 3.抽象工厂模式(Abstract Factory) |又叫做 工具箱模式(ToolKit) 配图 代码实例 直接将代码运行即可,

浅析 抽象工厂、工厂方法、简单(静态)工厂

----简单工厂 (也叫静态工厂模式):一个抽象产品抽象出多个具体产品类,一个具体工厂类 代码: //抽象产品角色 public interface Car{ public void drive(); } //具体产品角色 public class Benz implements Car{ public void drive() { System.out.println("Driving Benz "); } } public class Bmw implements Car{ pub

简单工厂(静态工厂)

简单工厂模式是属于创建型模式,又叫做静态工厂.是由一个工厂对象(Factory)决定创建出哪一种产品类(Product)的实例. 设计模式可以结合具体场景进行分析,但不要局限在具体场景中,本文直接使用模型进行说明,相对抽象,但对举一反三有好处. base.h #ifndef BASE_H #define BASE_H #include <string> using namespace std; class IBase { public: virtual ~IBase(); virtual co

Head First设计模式——简单工厂、工厂、抽象工厂

前言:按照惯例我以Head First设计模式的工厂模式例子开始编码学习.并由简单工厂,工厂模式,抽象工厂模式依次演变,归纳他们的相同与不同. 话说Head First认为简单工厂并不是设计模式,而是一种编程习惯,但并不妨碍我们使用它,接下来我们对工厂模式一探究竟. 1.披萨店例子 首先我们要开一个披萨店,对于业务不复杂的情况下我们可以快速的开发出一个披萨店以及订购披萨的逻辑 public Pizza OrderPizza() { Pizza pizza = new Pizza(); pizza

静态工厂 + DbHelper

在 .NET 的学习过程中用过三种数据库:Sql Server.Access.SQLite.Sql Server 用得相对多一点点,但是,麻烦,每次用它都需要开服务,而且还费资源,更麻烦的是拷贝到一台没有装SqlServer的电脑上还不能用,所以一般练习中只要不涉及到什么存储过程这些也基本不用它.Access简单的文件型数据库,office的套件,基本的SQL语句也支持,在一般的小型应用系统中用起来还行,而且在Windows 7开始操作系统中就已经内置了Access的服务,随便拷贝.SQLite

HCNA配置静态LACP模式链路聚合

1.静态LACP模式 静态LACP模式是一种利用LACP协议进行聚合参数协商.确定活动接口和非活动接口的链路聚合方式.该模式下,需手工创建Eth-Trunk,手工加入Eth-Trunk成员接口,由LACP协议协商确定活动接口和非活动接口. 静态LACP模式也称为M∶N模式.这种方式同时可以实现链路负载分担和链路冗余备份的双重功能.在链路聚合组中M条链路处于活动状态,这些链路负责转发数据并进行负载分担,另外N条链路处于非活动状态作为备份链路,不转发数据.当M条链路中有链路出现故障时,系统会从N条备

静态工厂方法的介绍

本文略长,所以先来个内容提要 序:什么是静态工厂方法 静态工厂方法的优势 2.1 静态工厂方法与构造器不同的第一优势在于,它们有名字 2.2 第二个优势,不用每次被调用时都创建新对象 2.3 第三个优势,可以返回原返回类型的子类 2.4 第四个优势,在创建带泛型的实例时,能使代码变得简洁 除此之外 3.1 可以有多个参数相同但名称不同的工厂方法 3.2 可以减少对外暴露的属性 3.3 多了一层控制,方便统一修改 总结 1. 序:什么是静态工厂方法 在 Java 中,获得一个类实例最简单的方法就是