FactoryMethodPattern(23种设计模式之一)
设计模式六大原则(1):单一职责原则
设计模式六大原则(2):里氏替换原则
设计模式六大原则(3):依赖倒置原则
设计模式六大原则(4):接口隔离原则
设计模式六大原则(5):迪米特法则
设计模式六大原则(6):开闭原则
FactoryMethodPattern,UML抽象图百度找,代码实现如下
使用工厂方法模式设计一个可以创建不同系列520和525系列的宝马车,每个型号宝马车都要有一个输出自己信息的方法make()方法
抽象产品类
package FactoryMethodPattern;
public interface Product {
public void make();
}
具体产品类
package FactoryMethodPattern.ConcreteProduct;
import FactoryMethodPattern.Product;
public class makeBMW520a implements Product{
public void make() {
System.out.println("I'm B520a!I made.");
}
}
package FactoryMethodPattern.ConcreteProduct;
import FactoryMethodPattern.Product;
public class makeBMW520b implements Product{
public void make() {
System.out.println("I'm B520b!I made.");
}
}
package FactoryMethodPattern.ConcreteProduct;
import FactoryMethodPattern.Product;
public class makeBMW525a implements Product {
public void make() {
System.out.println("I'm B525a!I made.");
}
}
package FactoryMethodPattern.ConcreteProduct;
import FactoryMethodPattern.Product;
public class makeBMW525b implements Product {
public void make() {
System.out.println("I'm B525b!I made.");
}
}
抽象工厂类
package FactoryMethodPattern;
// 建造者
//工厂方法是创建一个框架,让子类决定要如何实现具体的产品
public abstract class Creator {
public Product FactoryMethod(String f_ProductType)
{
Product product;
product=CreateProduct(f_ProductType);
//可对产品做其它的操作.....
return product;
}
//让子类去实现要生产什么产品
public abstract Product CreateProduct(String f_Type);
}
具体工厂类
package FactoryMethodPattern.ConcreteCreator;
import FactoryMethodPattern.Creator;
import FactoryMethodPattern.Product;
import FactoryMethodPattern.ConcreteProduct.makeBMW520a;
import FactoryMethodPattern.ConcreteProduct.makeBMW520b;
public class B520MakeFactory extends Creator {
@Override
public Product CreateProduct(String f_Type) {
switch (f_Type)
{
case "B520a":
return new makeBMW520a();
case "B520b":
return new makeBMW520b();
}
return null;
}
}
package FactoryMethodPattern.ConcreteCreator;
import FactoryMethodPattern.Creator;
import FactoryMethodPattern.Product;
import FactoryMethodPattern.ConcreteProduct.makeBMW525a;
import FactoryMethodPattern.ConcreteProduct.makeBMW525b;
public class B525MakeFactory extends Creator {
@Override
public Product CreateProduct(String f_Type) {
switch (f_Type)
{
case "B525a":
return new makeBMW525a();
case "B525b":
return new makeBMW525b();
}
return null;
}
}
测试类
package FactoryMethodPattern;
import FactoryMethodPattern.ConcreteCreator.B520MakeFactory;
import FactoryMethodPattern.ConcreteCreator.B525MakeFactory;
public class Test {
public static void main(String[] args) {
//生产第一个工厂的车
Creator creator = new B520MakeFactory();
Product product = creator.FactoryMethod("B520a");
product.make();
product = creator.FactoryMethod("B520b");
product.make();
//生产第二个工厂的车
Creator creator2 = new B525MakeFactory();
Product product2 = creator2.FactoryMethod("B525a");
product2.make();
product2 = creator2.FactoryMethod("B525b");
product2.make();
}
}
别嫌弃我没写注释,这个代码很简单,注释省略,嘿嘿。
FactoryMethodPattern(23种设计模式之一)的更多相关文章
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
- Java开发中的23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- Java开发中的23种设计模式(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- c#中的23种设计模式
C# 23种设计模式汇总 创建型模式 工厂方法(Factory Method) 在工厂方法模式中,工厂方法用来创建客户所需要的产品,同时还向客户隐藏了哪种具体产品类将被实例化这一细节.工厂方法模式的核 ...
- Java 23种设计模式
转自: http://zz563143188.iteye.com/blog/1847029 ; i<count; i++){ list.add(new MailSender()); } } pu ...
- 从追MM谈Java的23种设计模式(转)
从追MM谈Java的23种设计模式 这个是从某个文章转载过来的.但是忘了原文链接.如果知道的,我追加一下. 1.FACTORY-追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西 ...
- java 23种设计模式及具体例子 收藏有时间慢慢看
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代 码可靠性. 毫无疑问,设计模式 ...
- JAVA:23种设计模式详解(转)
设计模式(Design Patterns) ——可复用面向对象软件的基础 设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了 ...
- 从追MM谈Java的23种设计模式
从追MM谈Java的23种设计模式 1.FACTORY—追MM少不了请吃饭了,麦当劳的鸡翅和肯德基的鸡翅都是MM爱吃的东西,虽然口味有所不同,但不管你带MM去麦当劳或肯 德基,只管向服务员说“来四个鸡 ...
- 23种设计模式全解析 (java版本)
转自:http://blog.csdn.net/longyulu/article/details/9159589 其中PHP常用的五种设计模式分别为:工厂模式,单例模式,观察者模式,策略模式,命令模式 ...
随机推荐
- Git学习--创建版本库
什么是版本库呢?版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或 ...
- "Cannot declare member function ...to have static linkage"错误
英文解释: if you declare a method to be static in your .cc file. The reason is that static means somethi ...
- 如果两个人,两台电脑同时登录同一个帐号,同时对同一个账单提交,账单同时被服务器处理,那服务器应该先处理谁的,或者怎么规避这个问题。 非单点登录,重定向,stoken拦截器的问题
方法一:给用户设置个状态 服务器端坐标记,比如数据库中增加一列,标识是否登陆,登录时先判断这个就行了,不过要考虑非正常退出的情况 http 方法二:在用户表里面 多加一个状态字段,登录成功 改变状态 ...
- HDU 5776
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5776 求是否有区间的和是m的倍数 预处理前缀和,一旦有两个数模m的值相同,说明中间一部分连续子列可以组 ...
- C#异步编程(二)用户模式线程同步
基元线程同步构造 多个线程同时访问共享数据时,线程同步能防止数据损坏.不需要线程同步是最理想的情况,因为线程同步存在许多问题. 第一个问题就是它比较繁琐,而且很容易写错. 第二个问题是,他们会损害性能 ...
- Docker容器的重启策略及docker run的--restart选项详解
https://blog.csdn.net/taiyangdao/article/details/73076019 1. Docker容器的重启策略 Docker容器的重启策略是面向生产环境的一个启动 ...
- VirtualBox为虚拟OS硬盘扩容
1.关闭虚拟OS. 2.进入到在VirtualBox的安装路径,执行命令例子如: VBoxManage.exe modifyhd F:\VM\Debian7.2.vdi --resize 40000 ...
- 容器中跨主机的网络方案-flannel
容器中的网络是建立docker集群的重要内容. 本文将介绍如何用flannel实现容器的多节点互通. 下图是flannel的实现原理,摘自: http://docker-k8s-lab.readthe ...
- 一:HTML文本编译器 kindeditor-4.1.10 的使用 SpringMVC+jsp的实现
一:我用的kindeditor版本是4.1.10 下载完成打开目录结构如下: 二:下面是工程目录也很重要, 三: 好了,准备工作已经做好了,现在就直接上代码了. 首先是页面JSP代码 ...
- HP 防止cciss设备被DM映射
http://h10025.www1.hp.com/ewfrf/wc/document?cc=cn&lc=zh-hans&dlc=zh-hans&docname=c034933 ...