Java设计模式(一) -- 工厂方法模式
java的设计模式大体上分为三大类: •创建型模式(5种):工厂方法模式,抽象工厂模式,单例模式,建造者模式,原型模式。 •结构型模式(7种):适配器模式,装饰器模式,代理模式,外观模式,桥接模式,组合模式,享元模式。 •行为型模式(11种):策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。 此外,还有两类:并发型模式和线程池模式。
工厂模式:工厂模式是Java常用的设计模式之一,该设计模式属于创建型于创建型模式,它提供了一种创建对象的最佳方式。工厂模式主要是为创建对象提供过渡接口,无需给客户端暴露创建逻辑,将创建对象的具体过程封装隐蔽起来,达到设计上的灵活性。工厂模式可以分为三类:(1)简单工厂模式(Simple Factory)(2)工厂方法模式(Factory Method)(3)抽象工厂模式(Abstract Factory)简单工厂模式:简单工厂模式又称静态工厂方法模式,将实现的业务的细节放到工厂类中,客户端只需传入工厂类的参数即可 组成部分: (1)工厂类:核心类,包含业务的逻辑,用于创建产品(2)抽象产品:一般是具体产品继承的父类或者实现的接口(3)具体产品:工厂类创建的对象即为该类的实例
下面我们看一下具体的例子:
package FactoryMode.Simple_Factory;public class Circle implements Shape{@Overridepublic void draw() {System.out.println("I can draw a circle.");}
}
package FactoryMode.Simple_Factory;public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("I can draw a rectangle.");}
}
package FactoryMode.Simple_Factory;public class Square implements Shape {@Overridepublic void draw() {System.out.println("I can draw a square.");}
}
package FactoryMode.Simple_Factory;public interface Shape {public void draw();
}
package FactoryMode.Simple_Factory;public class ShapeFactory {public Shape getShape(String shapeType){if ("circle".equals(shapeType)){return new Circle();}else if ("rectangle".equals(shapeType)){return new Rectangle();}else if ("square".equals(shapeType)){return new Square();}else {return null;}}
}
package FactoryMode.Simple_Factory;public class ShapeTest {public static void main(String[] args){ShapeFactory sf = new ShapeFactory();sf.getShape("circle").draw();sf.getShape("rectangle").draw();sf.getShape("square").draw();}
}
结果是:
I can draw a circle.
I can draw a rectangle.
I can draw a square.
很显然,当我们需要增加新的图形时,工厂类限制了我们的扩展,增加了类之间的耦合度,需要我们手动修改工厂类。因此简单工厂模式只适合在创建对象较少、 简单情况下使用。
工厂方法模式:定义一个创建对象的工厂接口,让子类决定实例化哪一个类,并将实际创建工作推迟到子类当中。 组成部分:(1)抽象工厂:该模式的核心部分,给客户端调用的一个接口,是具体工厂必须实现的接口或者继承的父类(2)具体工厂:具体业务逻辑的实现,可创建具体产品的实例对象(3)抽象产品:具体产品必须实现的接口或者继承的父类(4)具体产品:具体工程创建的对象是此类的实例
具体实例:
package FactoryMode.Factory_Method;public interface Shape {public void draw();
}
package FactoryMode.Factory_Method;import FactoryMode.Simple_Factory.Shape;public class Circle implements Shape {@Overridepublic void draw() {System.out.println("I can draw a circle.");}
}
package FactoryMode.Factory_Method;import FactoryMode.Simple_Factory.Shape;public class Rectangle implements Shape {@Overridepublic void draw() {System.out.println("I can draw a rectangle.");}
}
package FactoryMode.Factory_Method;import FactoryMode.Simple_Factory.Shape;public interface ShapeFactory {public Shape getShape();
}
package FactoryMode.Factory_Method;import FactoryMode.Simple_Factory.Shape;public class CircleFactory implements ShapeFactory {@Overridepublic Shape getShape() {return new Circle();}
}
package FactoryMode.Factory_Method;import FactoryMode.Simple_Factory.Shape;public class RectangleFactory implements ShapeFactory {@Overridepublic Shape getShape() {return new Rectangle();}
}
package FactoryMode.Factory_Method;public class FactoryTest {public static void main(String[] args){ShapeFactory cf = new CircleFactory();cf.getShape().draw();ShapeFactory rf = new RectangleFactory();rf.getShape().draw();}
}
结果是:
I can draw a circle.
I can draw a rectangle.
工厂方法模式通过多个实现抽象工厂的具体工厂,为简单工厂模式的工厂类分担了压力,当有新的Shape产生时,只需创建一个 具体工厂类和具体产品类,无需修改原有的代码,复合六大原则的开闭原则。
以上就是简单工厂模式和工厂方法模式,抽象工厂模式将放到下一小节。
Java设计模式(一) -- 工厂方法模式相关推荐
- 一文叫你弄懂Java设计模式之工厂方法模式:图解+日志记录器代码实例
文章目录 详解Java设计模式之工厂方法模式 案例引入工厂方法模式 工厂方法模式 定义 案例分析 UML类图分析 代码分析 工厂方法的重载 工厂方法的隐藏 模式优点 模式缺点 模式适用环境 详解Jav ...
- Java设计模式之工厂方法模式与抽象工厂模式
2019独角兽企业重金招聘Python工程师标准>>> 一.前期回顾 上一篇<Java设计模式之单例模式>详细介绍了单例模式,介绍了单例模式的使用场景,优缺点,同时也写了 ...
- Java 设计模式之工厂方法模式
本文为笔者学习<Head First设计模式>的笔记,并加入笔者自己的理解和归纳总结 工厂方法模式定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个.工厂方法让类把实例化推迟到子类 ...
- Java设计模式 之 工厂方法模式
1. 使用设计模式的好处:可提高代码的重复性,让代码更容易被他人理解,保证代码的可靠性. 2. 工厂模式定义:就是创建一个工厂类来创建你需要的类,工厂模式包括工厂模式和抽象工厂模式,抽象工厂模式是工厂 ...
- java设计模式之工厂方法模式
工厂方法模式是类的创建模式,又叫虚拟构造模式(Virtual Constructor)模式或者多态工厂(Polymorphic Factory)模式. 工厂方法模式的用意是定义一个创建产品的工厂接口, ...
- 最简单java设计模式:工厂方法模式
前言 在前一篇文章讲解了一下简单工厂模式,在上篇文章中,我们也讲到了简单工厂模式的缺点,就是不满足开闭原则,这对于软件的设计来说,是不太好的,而下面讲解的工厂方法模式,正是为了弥补简单工厂模式的缺点, ...
- java设计模式通俗_通俗易懂的Java设计模式之工厂方法模式
一 .工厂方法(Factory Method)模式 工厂方法模式的意义是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中.核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负 ...
- java设计模式1——工厂方法模式(Factory Method)
工厂方法模式分为三种: 1.普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建.首先看下关系图: 举例如下:(我们举一个发送邮件和短信的例子) 首先,创建二者的共同接口: pub ...
- 二、java设计模式之工厂方法+抽象工厂模式(创建型设计模式)
创建型设计模式-工厂模式和应用 工厂模式介绍: 它提供了一种创建对象的最佳方式,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象 例子: 需要购买一辆车,不用管 ...
- 设计模式:工厂方法模式(Factory method)
设计模式:工厂方法模式(Factory method) 一.问题 在前一章中通过披萨的实例介绍了简单工厂模式.在披萨实例中,如果我想根据地域的不同生产出不同口味的披萨,如纽约口味披萨,芝加哥口味披萨. ...
最新文章
- TCP/IP常见英文缩写释义
- bookstrap 怎么用ajax,bootstrap里怎么用ajax请求数据到table里
- code blocks代码性能分析_记一次Python Web接口优化,性能提升25倍!
- .NET-记一次架构优化实战与方案-前端优化
- Arctext.js - 基于 CSS3 jQuery 的文本弯曲效果
- 摩拜单车又涨价了!真的要骑不起了
- Spring : ConfigurableListableBeanFactory
- 漫步者蓝牙只有一边有声音_2019年上半年最具“诚意”的真无线劲挂蓝牙耳机新品...
- macOS Big Sur在APFS格式的驱动器上支持Time Machine有几个问题?
- Fiddler(FD)抓包工具汉化版及使用方法
- Python+tkinter模拟京东登录时拖动图片式验证码
- 软件测试 _ 基础知识
- js月份的计算公式_js判断某年某月有多少天(闰年计算方法)
- MediaWiki配置
- 蒙城县有4000多年,夏为禹贡豫州之域
- html中form表单标签的使用
- Quick BI和Power BI实测比对
- 头条的动态页面爬取+百度下拉搜索框
- 微信小程序版 九宫格数独游戏
- 优麒麟 20.04 LTS Pro 发布 - 以初心,铸匠心