设计模式学习(二)-简单工厂模式

---恢复内容开始---

简单工厂设计模式

  1. 简单工厂模式定义:

    简单工厂设计模式又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。

  1. 简单工厂主要分为如下几个角色

    1. 抽象产品(abstract product):为所有具体产品的抽象表现,一般为抽象类
    2. 具体产品(product):为抽象产品的具体实现
    3. 生成产品工厂(factory):负责实现创建所有实例的内部逻辑
  2. 具体类图
    1. Book 抽象产品
    2. ChineseBook,EnglishBook具体产品
    3. BookFactory:工厂类

  3. 具体Java实现
    package cn.lonecloud.pattern.creational.simplefactory;?/** * @author lonecloud * @version v1.0 * @Package cn.lonecloud.pattern.creational.simplefactory * @Description: TODO * @date 2018/12/2下午12:09 */public class BookFactory {?    public static Book getBook(String name){        if ("english".equals(name)){            return new EnglishBook();        }else {            return new ChineseBook();        }    }}?
  4. 该模式的优点:
    1. 将类的创建缩小到factory类中进行,免除调用方对创建类时候的一个责任,
    2. 客户端无需知道类名,只需要知道对应的参数即可
    3. 可以在引入配置文件的基础上,可以无需改变代码即可更换产品,实现灵活
  5. 该模式的缺点
    1. 所有类创建都建立在factory中进行,一旦该类出现了问题,则其他的所依赖的类都无法进行
    2. 系统扩展复杂,如果产品类型比较多的话,会导致factory中逻辑判断会非常多,不利于系统维护和扩展
    3. 简单工厂模式由于使用了静态工厂方法,造成工厂角色无法形成基于继承的等级结构
  6. 使用场景
    1. 负责创建的类的数量相对较少,由于创建类的数量相对比较少,类的复杂性也就不会这么高
    2. 客户端创建类的时候,既不需要关心创建细节,甚至连类名都不需要记住,只需要知道类型所对应的参数。
  7. 应用
    1. Calendar中的使用
        private static Calendar createCalendar(TimeZone zone,                                           Locale aLocale)    {        CalendarProvider provider =            LocaleProviderAdapter.getAdapter(CalendarProvider.class, aLocale)                                 .getCalendarProvider();        if (provider != null) {            try {                return provider.getInstance(zone, aLocale);            } catch (IllegalArgumentException iae) {                // fall back to the default instantiation            }        }?        Calendar cal = null;?        if (aLocale.hasExtensions()) {            String caltype = aLocale.getUnicodeLocaleType("ca");            if (caltype != null) {                switch (caltype) {                case "buddhist":                cal = new BuddhistCalendar(zone, aLocale);                    break;                case "japanese":                    cal = new JapaneseImperialCalendar(zone, aLocale);                    break;                case "gregory":                    cal = new GregorianCalendar(zone, aLocale);                    break;                }            }        }        if (cal == null) {            if (aLocale.getLanguage() == "th" && aLocale.getCountry() == "TH") {                cal = new BuddhistCalendar(zone, aLocale);            } else if (aLocale.getVariant() == "JP" && aLocale.getLanguage() == "ja"                       && aLocale.getCountry() == "JP") {                cal = new JapaneseImperialCalendar(zone, aLocale);            } else {                cal = new GregorianCalendar(zone, aLocale);            }        }        return cal;    }

---恢复内容结束---

设计模式学习(二)-简单工厂模式

原文地址:https://www.cnblogs.com/lonecloud/p/10053024.html

时间: 2024-10-12 02:52:38

设计模式学习(二)-简单工厂模式的相关文章

[大话设计模式]学习笔记——简单工厂模式

序 说好的每天进步一点点的,结果工作太忙,一直在加班,都没有学习新东西.我还要进BAT呢. 坚持每天学习新东西. 写代码时,意识到在代码结构上还是有点欠缺.赶紧补上. 纪录对设计模式的认识.小菜变大鸟.进攻BAT. 应用场景: 编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果. 这本书使用C#写的.已有博主用JAVA写出来,参考:http://blog.csdn.net/ghsau/article/details/8163418 常见的做法: 写一个方法封装计算机的功能,我们只需传参

Java设计模式学习记录-简单工厂模式、工厂方法模式

前言 之前介绍了设计模式的原则和分类等概述.今天开启设计模式的学习,首先要介绍的就是工厂模式,在介绍工厂模式前会先介绍一下简单工厂模式,这样由浅入深来介绍. 简单工厂模式 做法:创建一个工厂(方法或类)用来制造对象. 当一个人想要用手机的时候,需要自己创建手机然后来使用. 如下: public class IphoneX { public IphoneX(){ System.out.println("##### 制造iphoneX #####"); } } public class I

设计模式学习笔记--简单工厂模式

背景: 在开发过程中,经常会创建大量的对象,创建对象后还会涉及到一系列的初始化操作,而我们也不一定会只是在创建对象之后马上就使用对象,而且如果初始化操作很复杂,代码看起来就会非常杂乱,如果有变动,所有的初始化操作都要进行修改,相当难以维护. 功能: 将对象的创建和使用分离开来,专门用于创建对象并初始化.并且进行扩展后,可以根据参数不同,创建不同的对象. 例子: // 设计模式Demo.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #includ

设计模式学习之简单工厂模式

简单工厂模式,其实就是有一个静态的工厂方法,可以根据输出的条件返回对应的实例,然后再条用具体的实例的方法执行计算. 简单工厂模式相当与将条件判断都集中到了一个静态的工厂方法中.这样的好处是,执行具体计算任务的代码不需要再有很多的if判断,只专注于具体的计算.如果有新的计算需求,那么只需要增加相应的计算方法,并且在工厂方法中添加对应的入口条件就行了,对原有的计算方法没有任何影响. 一个简单计算器的实现例子如下 计算的类型接口: /** * @author wgyang * Create time:

设计模式学习一简单工厂模式

简单工厂模式 第一步, 创建父类A(抽象类),抽象方法,以及具体变量 第二步, 创建工厂类父类B,用于实现创建抽象类A 第三步, 创建要子类C,继承父类A,重载父类方法,写方法具体实现,以及变量具体赋值. 第四步, 创建工厂类D,继承工厂类父类B,用来创建具体实现的 子类C (相当于AC  是工厂里面的模板) (BD 是工厂里面生产的产品) 简单工厂模式,备忘

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

1.动机与定义 工厂模式中,一个工厂仅仅能提供一个或一类产品,当产品种类较多,形成产品系列(比方我们要创建跨平台的button,菜单,文本框等等一系列GUI控件: 单纯使用工厂模式会产生大量工厂,并且后期维护也不方便,我们能够从产品中找到规律,假设产品等级相对固定,以后仅仅会新增产品族,那么我们就能够把整个产品族放到一个工厂创建,以后新增其它系统产品族也很方便,例如以下图: 这样的模式就是抽象工厂,工厂方法模式针对的是一个产品等级结构,而抽象工厂模式则须要面对多个产品等级结构,一个工厂等级结构能

设计模式一:简单工厂模式

概念理解: 1. 解耦:一般通过增加一些抽象层,来实现 功能提供者和功能使用者 两者的解耦隔离.而如果想要扩展功能即增加功能,只需要添加相应的相应的新的功能类,修改中间的抽象类即可,并不用修改使用者部分的代码.并且功能提供者的代码可以复用.而且使得程序更容易理解. 简单工厂模式介绍 一.什么是简单工厂模式? 简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个子类(这些子类继承  自一个父类或接口)的实例. 二.简单工厂模式包含的角色: 1.工厂角色(工厂类): 它负责创建所有

C#设计模式系列:简单工厂模式(Simple Factory)

1.简单工厂模式简介 1.1>.定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又称为静态工厂模式,Factory类为静态类或包含静态方法. 1.2>.使用频率  中 2.简单工厂模式结构 2.1>.结构图 2.2>.参与者 简单工厂模式参与者: ◊ Product:抽象产品类,将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中. ◊ ConcretePr

(设计模式之一)浅析简单工厂模式

简单工厂模式 举个两个例子: 我输入两个数字和(+ - * /)其中一个符号,计算出两个数的结果. 饲养员让(狗 猫 鸟 猪)其中一个动物 叫 这里就是一个简单的工厂模式, 用户只需要提供他需要的接口,而不需要知道具体的实现 工厂判断用户提供的接口,创建对应的子类对象, 返回父类变量给用户(这里涉及里氏替换原则:声明父类变量替换子类对象) 当后面追加新的操作类例如:求根类  求平方类 , 从数据安全角度: 只需要创建新的类继承于Operation抽象类 ,从而不影响其他操作类(+ - * /),