工厂方法模式(factory method pattern)
工厂方法模式相对于简单工厂模式的长处是为了更好的拓展,当假设再新加一种产品,对于简单工厂模式来说须要改动核心的工厂类,但对于工厂方法模式则不须要,在工厂方法模式中核心的工厂类不再负责创建全部产品的创建。而是将详细创建的工作交给了了类去实现,自己的核心类则变成一个抽象的工厂角色。
这样的 进一步的抽象的结果 是能够同意系统在不改动工厂类的前提下引进新的产品。此模式涉及到四种 角色。分别例如以下:
抽象 工厂(Creator) 详细工厂(Concrete creator) 抽像产品(Product) 详细产品(Concrete Product),详细代码例如以下:
1:抽象工厂:
public interface Creator { public Product factory();
}
2:抽象产品
public interface Product { void plant();
}
3:详细工厂1:
public class ConcreteCreator1 implements Creator {
@Override
public Product factory() {
return new ConcreteProduct1();
} }
4:详细工厂2:
public class ConcreteCreator2 implements Creator{
@Override
public Product factory() {
return new ConcreteProduct2();
}
}
5:详细产品1:
public class ConcreteProduct1 implements Product { public ConcreteProduct1() {
System.out.println("ConcreteProduct1.ConcreteProduct1");
} @Override
public void plant() {
System.out.println("ConcreteProduct1.plant");
}
}
6:详细产品2:
public class ConcreteProduct2 implements Product { public ConcreteProduct2() {
System.out.println("ConcreteProduct2.ConcreteProduct2");
} @Override
public void plant() {
System.out.println("ConcreteProduct2.plant");
}
}
7:測试类:
public class Tests { @Test
public void testFactoryMethod() { ConcreteCreator1 concreteCreator1 = new ConcreteCreator1();
Product product1 = concreteCreator1.factory();
product1.plant();
ConcreteCreator2 concreteCreator2 = new ConcreteCreator2();
Product product2 = concreteCreator2.factory();
product2.plant(); }
}
8:执行结果例如以下:
ConcreteProduct1.ConcreteProduct1
ConcreteProduct1.plant
ConcreteProduct2.ConcreteProduct2
ConcreteProduct2.plant Process finished with exit code 0
9:此project是基于maven构建,測试框架是JUnit
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
工厂方法模式(factory method pattern)的更多相关文章
- 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern)
原文:乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 工厂方法模式(Factory Method Pa ...
- 【设计模式】工厂方法模式 Factory Method Pattern
在简单工厂模式中产品的创建统一在工厂类的静态工厂方法中创建,体现了面形对象的封装性,客户程序不需要知道产品产生的细节,也体现了面向对象的单一职责原则(SRP),这样在产品很少的情况下使用起来还是很方便 ...
- 二十四种设计模式:工厂方法模式(Factory Method Pattern)
工厂方法模式(Factory Method Pattern) 介绍定义一个用于创建对象的接口,让子类决定将哪一个类实例化.Factory Method使一个类的实例化延迟到其子类. 示例有SqlMes ...
- 设计模式-03工厂方法模式(Factory Method Pattern)
插曲.简单工厂模式(Simple Factory Pattern) 介绍工厂方法模式之前,先来做一个铺垫,了解一下简单工厂模式,它不属于 GoF 的 23 种经典设计模式,它的缺点是增加新产品时会违背 ...
- 六个创建模式之工厂方法模式(Factory Method Pattern)
问题: 在使用简单工厂模式的时候,如果添加新的产品类,则必需修改工厂类,违反了开闭原则. 定义: 定义一个用于创建对象的接口,让子类决定具体实例化哪个产品类.此时工厂和产品都具有相同的继承结构,抽象产 ...
- 设计模式之工厂方法模式(Factory Method Pattern)
一.工厂方法模式的诞生 在读这篇文章之前,我先推荐大家读<设计模式之简单工厂模式(Simple Factory Pattern)>这篇文档.工厂方法模式是针对简单工厂模式中违反开闭原则的不 ...
- 工厂方法模式(Factory Method Pattern)
工厂方法模式概述 工厂方法模式是为了弥补简单工厂模式的不足并且继承它的优点而延生出的一种设计模式,属于GoF中的一种.它能更好的符合开闭原则的要求. 定义:定义了一个用于创建对象的接口,但是让子类决定 ...
- 【UE4 设计模式】工厂方法模式 Factory Method Pattern 及自定义创建资源
概述 描述 又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式,或者多态工厂(Polymorphic Factory)模式 工厂父类负责定义创建产品对象的公共接口,而工厂子类 ...
- C#设计模式——工厂方法模式(Factory Method Pattern)
一.概述在软件系统中,经常面临着“某个对象”的创建工作,由于需求的变化,这个对象的具体实现经常面临着剧烈的变化,但是它却拥有比较稳定的接口.如何应对这种变化?如何提供一种封装机制来隔离出“这个易变对象 ...
- php工厂方法模式(factory method pattern)
继续练 <?php /* The factory method pattern deals with the problem of creating objects without having ...
随机推荐
- XenCenter注册码一年申请
http://deliver.citrix.com/go/citrix/xenserver_activation?transactionID=2f65d2f134bf485d871291a566d67 ...
- PIL Gif分割成多个图片
项目中遇到GIF图片读取问题,使用PIL中Image im=Image.open("D:\\yzm\\0009.gif") mode = 'RGB' im.seek(0) im.c ...
- javascript实现的可改变滚动方向的无缝滚动
效果图如下: 代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:// ...
- HDU 4857 (反向拓扑排序 + 优先队列)
题意:有N个人,M个优先级a,b表示a优先于b.而且每一个人有个编号的优先级.输出顺序. 思路来自:与PKU3687一样 在主要的拓扑排序的基础上又添加了一个要求:编号最小的节点要尽量排在前面:在满足 ...
- mongodb查询分页优化
要求不用skip 前提:1.时间倒序排列(自己现在的项目中也是按照时间倒序排列的) 2.每页显示10条数据 int limit = 10;//刚开始点击查询的时候设置十条 查询形式为 db ...
- CentOS下安装MySQL,Windows下使用Navicat for MySql连接
安装 查看有没有安装过: yum list installed mysql* rpm -qa | grep mysql* 查看有没有安装包: yu ...
- 在Ubuntu Desktop打开终端的2种方式
共有3中方法: 1.在Ubuntu左上角选择File/Open in Terminal 2.快捷键alt+F2调出Run a Command,输入gnome-terminal 添加右键支持 在终端,输 ...
- JVM内存配置详解(转)
前段时间在一个项目的性能测试中又发生了一次OOM(Out of swap sapce),情形和以前网店版的那次差不多,比上次更奇怪的是,此次搞了几天之后啥都没调整系统就自动好了,死活没法再重现之前的O ...
- 基于三星I9250演示自己弄的Miracast功能-手机对手机
最终把Miracast功能測试通了,为了节省时间.我的Source端和Sink端都採用同一个机型.这样能够降低我为目标机编译4.4.2源码所耗费的时间.今天简单录制了一段视频.视频是用手机录制的,室内 ...
- RIA Test:try catch 对 Error #1009 (无法访问空对象引用的属性或方法)的处理
功能: 实现登录账户的强制登录, 用If 判断当前账户是否可用.若可用,则跳出if体直接登录,若不可用,则进入If体点击 “强制登录” 按钮. 问题:如果不可用,则if 条件中的对象不可见,这样程序会 ...