一头扎进设计模式-抽象工厂模式
来源:互联网 发布:数据分析做什么的 编辑:程序博客网 时间:2024/04/27 20:25
定义:抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。根据里氏替换原则,任何接受父类型的地方,都应当能够接受子类型。因此,实际上系统所需要的,仅仅是类型与这些抽象产品角色相同的一些实例,而不是这些抽象产品的实例。换言之,也就是这些抽象产品的具体子类的实例。工厂类负责创建抽象产品的具体子类的实例。
通俗的讲:就是通过接口定义好“工厂”的类型与“产品的类型”,把产品的产生制作流程封装在工厂里面,调用时直接使用接口声明,实现一个可拔插的效果。
代码实现:
抽象工厂类(这里我不使用接口,而运用了类似于模版的方法,把一些特殊的实现交给子类)
/** * */package com.jjt.factory;/** * @author jiangjintai * */public abstract class IFactory { private String name; public IFactory(String name){ this.name=name; } public void name(){ System.out.println(name); } public abstract IProduct creat(FactoryEnum fenum);//创建商品主方法}
抽象产品类
/** * */package com.jjt.factory;/** * @author jiangjintai * */public abstract class IProduct { private String name; public IProduct(String name){ this.name=name; } public abstract void xuxu(); public void name(){ System.out.println(name); }}
具体的工厂1实现类
/** * */package com.jjt.factory;/** * @author jiangjintai * */public class BoyFactory extends IFactory { /** * @param name */ public BoyFactory(String name) { super(name); // TODO 自动生成的构造函数存根 } /* (非 Javadoc) * @see com.jjt.factory.IFactory#creat() */ @Override public IProduct creat() { // TODO 自动生成的方法存根 this.name(); System.out.println("正在制作一个男孩"); return new Boy("江锦泰"); }}
具体工厂实现类2
/** * */package com.jjt.factory;/** * @author jiangjintai * */public class GirlFactory extends IFactory { /** * @param name */ public GirlFactory(String name) { super(name); // TODO 自动生成的构造函数存根 } /* (非 Javadoc) * @see com.jjt.factory.IFactory#creat() */ @Override public IProduct creat() { // TODO 自动生成的方法存根 this.name(); System.out.println("正在制作一个女孩"); return new Girl("黄瑜琪"); }}
具体产品实现类1
/** * */package com.jjt.factory;/** * @author jiangjintai * */public class Boy extends IProduct { /** * @param name */ public Boy(String name) { super(name); // TODO 自动生成的构造函数存根 } /* (非 Javadoc) * @see com.jjt.factory.IProduct#xuxu() */ @Override public void xuxu() { // TODO 自动生成的方法存根 System.out.println("站着嘘嘘"); }}
具体产品实现类2
/** * */package com.jjt.factory;/** * @author jiangjintai * */public class Girl extends IProduct { /** * @param name */ public Girl(String name) { super(name); // TODO 自动生成的构造函数存根 } /* (非 Javadoc) * @see com.jjt.factory.IProduct#xuxu() */ @Override public void xuxu() { // TODO 自动生成的方法存根 System.out.println("蹲在嘘嘘"); }}
测试
public static void main(String[] args){ IFactory f = new BoyFactory("男孩制作工场"); IProduct i = f.creat(FactoryEnum.boy); i.name(); i.xuxu(); f=new GirlFactory("女孩制作工厂"); IProduct i3 = f.creat(); i3.name(); i3.xuxu(); }
结果如下:
男孩制作工场正在制作一个男孩江锦泰站着嘘嘘女孩制作工厂正在制作一个女孩黄瑜琪蹲在嘘嘘
总结简单工厂模式-工厂模式-抽象工厂模式的区别
首先简单工厂模式:创建什么产品都由一个方法决定,比如:
public Product getProduct(String status){ if(status==1) return new Product1(); if(status==2) return new Product2(); }
工厂模式:把创建不同的产品分开到不同的工厂类中,比如对上面代码进行改进:
public interface Factory(){ Product getProduct(); } public class Product1Factory(){ public Product getProduct(){ return new Product1(); } } public class Product2Factory(){ public Product getProduct(){ return new Product2(); } }
抽象工厂模式:对一个生成不同产品族,其实就是说此时的工厂接口,不仅可以生产产品,也可以生产其他的产品,再次升级:
public interface Factory(){ Product getProduct(); OrderProduct getOrderProduct(); }
1 0
- 一头扎进设计模式-抽象工厂模式
- 一头扎进设计模式-适配器模式
- 一头扎进设计模式-组合模式
- 一头扎进设计模式-外观模式
- 一头扎进设计模式-代理模式
- 一头扎进设计模式-模版模式
- 一头扎进设计模式-命令模式
- 一头扎进设计模式-迭代器模式
- 一头扎进设计模式-观察者模式
- 一头扎进设计模式-状态模式
- 一头扎进设计模式-策略模式
- 抽象工厂设计模式
- 设计模式-----抽象工厂
- 抽象工厂设计模式
- 抽象工厂设计模式
- 抽象工厂设计模式
- 设计模式 抽象工厂
- 设计模式--抽象工厂
- 点击Home健,退出程序,再点击图标,进入程序
- 排序(1)——冒泡排序及其优化
- 关于人脸识别基础知识blog
- MySQL 5.6 for Windows 解压缩版配置安装
- 数据结构复习笔记— —堆
- 一头扎进设计模式-抽象工厂模式
- 使用SharedPreferences来实现判断程序是不是第一次运行和临时保存数据
- swift MD5 加密
- 软考网络规划设计师能力标准
- Android录音工具类
- YoMail新版发布会:YoMail+石墨文档+坚果云,重新定义Email APP发展新方向
- Eclipse格式化代码时,总是换行问题
- mysql Lock wait timeout exceeded; try restarting transaction
- jQuery.extend 函数详解