设计模式——工厂模式,做个笔记
2016-07-07 14:35
344 查看
今天来学习一下工厂模式,学习了鸿洋的卖肉夹馍,自己写了下,做个记录。
简单工厂模式
//肉夹馍
public abstract class RouJiaMo {
public String type;
//准备材料
public void prepare(){
System.out.println(type+"正在准备中……");
}
//生火
public void fire(){
System.out.println(type+"出锅中……");
}
//打包
public void packag(){
System.out.println(type+"打包出售……");
}
}
//辣味肉夹馍
public class LaRouJiaMo extends RouJiaMo{
public LaRouJiaMo(){
this.type = "辣味肉夹馍";
}
}
//酸味肉夹馍
public class SuanRouJiaMo extends RouJiaMo{
public SuanRouJiaMo(){
this.type = "酸味肉夹馍";
}
}
//甜味肉夹馍
public class TianRouJiaMo extends RouJiaMo {
public TianRouJiaMo (){
this.type = "甜味肉夹馍";
}
}
//工厂
public class SimpleRouJiaMoFactory {
private RouJiaMo rouJiaMo;
public RouJiaMo creatRouJiaMo(String type){
if (type.equals("suan")) {
rouJiaMo = new SuanRouJiaMo();
}else if (type.equals("tian")) {
rouJiaMo = new TianRouJiaMo();
}else if (type.equals("la")) {
rouJiaMo = new LaRouJiaMo();
}
return rouJiaMo;
}
}
//肉夹馍店
public class RouJiaMoStore {
private RouJiaMo rouJiaMo;
private SimpleRouJiaMoFactory factory;
public RouJiaMoStore(SimpleRouJiaMoFactory factory){
this.factory = factory;
}
public RouJiaMo sellJiaMo(String type){
rouJiaMo = factory.creatRouJiaMo(type);
rouJiaMo.prepare();
rouJiaMo.fire();
rouJiaMo.packag();
return rouJiaMo;
}
}
工厂方法模式
public abstract class RouJiaMoStore {
private RouJiaMo rouJiaMo;
//抽象一个私有对象,将创建肉夹馍的方法放在子类中执行,工厂方法模式,把实例化过程放到子类中
public abstract RouJiaMo creatRouJiaMo(String type); //私有方法不可抽象
public RouJiaMo sellJiaMo(String type){
rouJiaMo.prepare();
rouJiaMo.fire();
rouJiaMo.packag();
return rouJiaMo;
}
}
//北京店继承总店
public class BeiJingRouJiaMoStore extends RouJiaMoStore {
private RouJiaMo rouJiaMo;
//在这里你可以定义自己的肉夹馍店
@Override
public RouJiaMo creatRouJiaMo(String type) {
if (type.equals("suan")) {
rouJiaMo = new SuanRouJiaMo();
}else if (type.equals("la")) {
rouJiaMo = new LaRouJiaMo();
}else if (type.equals("tian")) {
rouJiaMo = new TianRouJiaMo();
}else if (type.equals("suantian")) {//北京店特有酸甜味
}
return rouJiaMo;
}
}
//调用
BeiJingRouJiaMoStore beiJingRouJiaMoStore = new BeiJingRouJiaMoStore();
beiJingRouJiaMoStore.sellJiaMo("suan");//卖肉夹馍
工厂方法模式就是让肉夹馍商店只负责肉夹馍的产生,把肉夹膜的实例放到子类进行。这样耦合度再次降低。
这只是最简单的工厂模式,感觉不过瘾看看鸿洋大神的
http://blog.csdn.net/lmj623565791/article/details/24460585
简单工厂模式
//肉夹馍
public abstract class RouJiaMo {
public String type;
//准备材料
public void prepare(){
System.out.println(type+"正在准备中……");
}
//生火
public void fire(){
System.out.println(type+"出锅中……");
}
//打包
public void packag(){
System.out.println(type+"打包出售……");
}
}
//辣味肉夹馍
public class LaRouJiaMo extends RouJiaMo{
public LaRouJiaMo(){
this.type = "辣味肉夹馍";
}
}
//酸味肉夹馍
public class SuanRouJiaMo extends RouJiaMo{
public SuanRouJiaMo(){
this.type = "酸味肉夹馍";
}
}
//甜味肉夹馍
public class TianRouJiaMo extends RouJiaMo {
public TianRouJiaMo (){
this.type = "甜味肉夹馍";
}
}
//工厂
public class SimpleRouJiaMoFactory {
private RouJiaMo rouJiaMo;
public RouJiaMo creatRouJiaMo(String type){
if (type.equals("suan")) {
rouJiaMo = new SuanRouJiaMo();
}else if (type.equals("tian")) {
rouJiaMo = new TianRouJiaMo();
}else if (type.equals("la")) {
rouJiaMo = new LaRouJiaMo();
}
return rouJiaMo;
}
}
//肉夹馍店
public class RouJiaMoStore {
private RouJiaMo rouJiaMo;
private SimpleRouJiaMoFactory factory;
public RouJiaMoStore(SimpleRouJiaMoFactory factory){
this.factory = factory;
}
public RouJiaMo sellJiaMo(String type){
rouJiaMo = factory.creatRouJiaMo(type);
rouJiaMo.prepare();
rouJiaMo.fire();
rouJiaMo.packag();
return rouJiaMo;
}
}
工厂方法模式
public abstract class RouJiaMoStore {
private RouJiaMo rouJiaMo;
//抽象一个私有对象,将创建肉夹馍的方法放在子类中执行,工厂方法模式,把实例化过程放到子类中
public abstract RouJiaMo creatRouJiaMo(String type); //私有方法不可抽象
public RouJiaMo sellJiaMo(String type){
rouJiaMo.prepare();
rouJiaMo.fire();
rouJiaMo.packag();
return rouJiaMo;
}
}
//北京店继承总店
public class BeiJingRouJiaMoStore extends RouJiaMoStore {
private RouJiaMo rouJiaMo;
//在这里你可以定义自己的肉夹馍店
@Override
public RouJiaMo creatRouJiaMo(String type) {
if (type.equals("suan")) {
rouJiaMo = new SuanRouJiaMo();
}else if (type.equals("la")) {
rouJiaMo = new LaRouJiaMo();
}else if (type.equals("tian")) {
rouJiaMo = new TianRouJiaMo();
}else if (type.equals("suantian")) {//北京店特有酸甜味
}
return rouJiaMo;
}
}
//调用
BeiJingRouJiaMoStore beiJingRouJiaMoStore = new BeiJingRouJiaMoStore();
beiJingRouJiaMoStore.sellJiaMo("suan");//卖肉夹馍
工厂方法模式就是让肉夹馍商店只负责肉夹馍的产生,把肉夹膜的实例放到子类进行。这样耦合度再次降低。
这只是最简单的工厂模式,感觉不过瘾看看鸿洋大神的
http://blog.csdn.net/lmj623565791/article/details/24460585
相关文章推荐
- C# 设计模式系列教程-简单工厂模式
- C++设计模式之工厂模式
- 介绍php设计模式中的工厂模式
- asp.net 简单工厂模式和工厂方法模式之论述
- 深入理解JavaScript系列(28):设计模式之工厂模式详解
- js简单工厂模式用法实例
- JavaScript设计模式经典之工厂模式
- javascript 模式设计之工厂模式详细说明
- 实例解析Java单例模式编程中对抽象工厂模式的运用
- python中getattr函数使用方法 getattr实现工厂模式
- 工厂模式在Zend Framework中应用介绍
- 浅析php工厂模式
- C++设计模式之抽象工厂模式
- C++设计模式之简单工厂模式实例
- c#使用简单工厂模式实现生成html文件的封装类分享
- PHP高级对象构建 工厂模式的使用
- 基于php设计模式中工厂模式详细介绍
- PHP 面向对象程序设计(oop)学习笔记(三) - 单例模式和工厂模式
- JavaScript面向对象程序设计教程
- C++设计模式之工厂方法模式