博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式二之工厂模式
阅读量:6590 次
发布时间:2019-06-24

本文共 2033 字,大约阅读时间需要 6 分钟。

一、工厂模式  

  工厂模式主要是为创建对象提供过渡接口,以便将创建对象的具体过程屏蔽隔离起来,达到提高灵活性的目的。

优点:

  • 一个调用者想创建一个对象,只要知道其名称就可以了,降低了耦合度。
  • 扩展性高,如果想增加一个产品,只要扩展一个工厂类就可以。使得代码结构更加清晰。
  • 屏蔽产品的具体实现,调用者只关心产品的接口。

1.1、简单工厂模式

        实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。简单工厂模式的创建目标,所有创建的对象都是充当这个角色的某个具体类的实例,这个比较简单例子就不写了。但是简单工厂模式不符合开闭原则。

1.2、工厂方法模式

        工厂方法是粒度很小的设计模式,因为模式的表现只是一个抽象的方法。 提前定义用于创建对象的接口,让子类决定实例化具体的某一个类,即在工厂和产品中间增加接口,工厂不再负责产品的创建,由接口针对不同条件返回具体的类实例,由具体类实例去实现。对扩展友好,无需修改原有的代码。但是也新增了好多的文件,从理论上讲,工厂方法模式有优势,从实际上讲,还是使用简单工厂模式占优势,可见没有绝对的好坏。

  交通工具类接口

package com.duchong.factorymodel;/** * Created by DUCHONG on 2018/3/29. */public interface Car {     void move();}

  具体的交通工具实现类

package com.duchong.factorymodel;/** * @author DUCHONG * @since 2018-03-29 14:05 **/public class Bus implements Car{    @Override    public void move() {        System.out.println("Bus move slowly");    }}
package com.duchong.factorymodel;/** * @author DUCHONG * @since 2018-03-29 14:06 **/public class Taxi implements Car{    @Override    public void move() {        System.out.println("Taxi move faster");    }}

  交通工具的工厂类接口

package com.duchong.factorymodel;/** * Created by DUCHONG on 2018/3/29. */public interface CarFactory {    Car getCar();}

  具体的交通工具工厂类的实现类

package com.duchong.factorymodel;/** * @author DUCHONG * @since 2018-03-29 14:08 **/public class BusFactory implements CarFactory{    @Override    public Car getCar() {        return new Bus();    }}
package com.duchong.factorymodel;/** * @author DUCHONG * @since 2018-03-29 14:09 **/public class TaxiFactory implements CarFactory{    @Override    public Car getCar() {        return new Taxi();    }}

  调用者,这里用main方法代替

package com.duchong.factorymodel;/** * @author DUCHONG * @since 2018-03-29 14:09 **/public class Main {    public static void main(String[] args) {        CarFactory factory=null;        factory=new BusFactory();        Car bus=factory.getCar();        bus.move();        factory=new TaxiFactory();        Car taxi=factory.getCar();        taxi.move();    }}

  运行结果

 

转载于:https://www.cnblogs.com/geekdc/p/8669643.html

你可能感兴趣的文章
开源人工智能技术将改变一切
查看>>
2015 上半年 JavaScript 使用统计数据
查看>>
《Python算法教程》——1.6 如果您感兴趣
查看>>
干货 | 豆子科技首席架构师钟声:Java的纯真年代
查看>>
深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
查看>>
SSH原理与运用(一):远程登录
查看>>
Spring Framework 4.2 中的新功能和增强功能
查看>>
动态代理解决网站字符集编码
查看>>
我所想的GIX4的权限
查看>>
Hbuilder--让手爽,飞一般的编码(二)
查看>>
后台统计
查看>>
React组件: 提取图片颜色
查看>>
3D应用开发中的欧拉角和旋转矩阵
查看>>
爬虫必备技能xpath的用法和实战
查看>>
MacOS下安装Grafana、InfluxData、telegraf
查看>>
RxJava2.0的初学者必备教程(九)
查看>>
记一次omi的项目之旅
查看>>
Android API级别、代号、发布时间及平台亮点整理
查看>>
安装配置nagios
查看>>
QQ第三方授权登录(带详细源码)
查看>>