java设计模式——工厂模式二
来源:互联网 发布:我的世界地狱门算法 编辑:程序博客网 时间:2024/06/01 17:25
工厂模式第二篇:”工厂方法”模式
对工厂模式的个人理解:
(1)工厂模式的核心在于“工厂”,通过“工厂类”的“工厂方法”创建“产品”对象(即让工厂方法返回“产品”对象)。工厂方法是“产品类”与“客户类”(需要某种产品的类)之间的桥梁。工厂方法返回一个具体的产品对象,以供客户类使用(往往客户类中含有一个抽象产品类的对象引用——然后将工厂方法返回的具体产品对象赋于该对象引用,在使用该对象引用调用具体产品类的方法)
(2)工厂模式中不一定非得需要把工厂方法写在工厂类中,可以直接把工厂方法封装在客户类中(结合实际想一下:一些客户也可以自己含有生产方法去生产自己想要的东西,而不一定非得去买别人制作成的)。以下的代码根据披萨制作介绍了工厂模式(将工厂方法封装在客户类中):
public abstract class pizza //抽象产品类pizza{ //先声明一些pizza类的数据成员; String name; //披萨的名字 String miantuantype; //该类型pizza所需要的面的类型 String zuoliaotype; //该类型pizza所需要的作料类型 public abstract void prepare(); //抽象方法,定义制作pizza所需的准备工作 public abstract void desc(); //抽象方法,描述该披萨}public class redpizza extends pizza //具体产品类{ public redpizza() //在构造器中初始化继承自父类的数据成员 { this.name="红披萨"; this.miantuantype="发面"; this.zuoliaotype="淡盐,酱油,芝麻酱"; } @Override public void prepare() { System.out.println("这种披萨类型为:"+this.name); System.out.println("我需要准备的东西有"+this.miantuantype); } @Override public void desc() { System.out.println("这是一个红披萨!!!!"); }}public class blackpizza extends pizza //具体产品类{ public blackpizza() { this.name="黑披萨"; this.miantuantype="非发面"; this.zuoliaotype="酱油,味精,糖"; } @Override public void prepare() { System.out.println("这是一个"+name+",需要准备的材料是黑颜料"); System.out.println("需要的面团类型为:"+miantuantype); System.out.println("需要的作料类型为:"+this.zuoliaotype); } @Override public void desc() { System.out.println("这是一个黑披萨!!"); } }public abstract class pizzastore //抽象客户类,需要某种特定类型的产品{ pizza pi; public pizza orderpizza(String type) //决定提供那种类型的pizza,并且在该方法内对该类型的pizza做一些操作 { //面向接口编程,都肯定会用到上转型和接口回调,即将子类对象传递给父类引用, //然后让该引用调用子类中重写的父类的方法(或继承自父类的方法) pi=pizzamake(type); //将工厂方法产生的“具体产品”类的对象赋于抽象产品类的对象引用(上转型对象) pi.desc(); pi.prepare(); return pi; } abstract pizza pizzamake(String type); //pizza的制造工厂方法,根据传递进来的参数决定该方法返回那种类型的pizza `````` //将工厂方法封装在"客户类"中!!!!!}public class pizzamaker1 extends pizzastore //具体客户类{ @Override pizza pizzamake(String type) { if(type=="红披萨") return new redpizza(); else if(type=="黑披萨") return new blackpizza(); else { System.out.println("对不起,本店没有您想要的这种pizza"); return null; } } }public class test { public static void main(String[] args) { // TODO code application logic here pizzastore pizzamaker01=new pizzamaker1(); //实例化一个“具体客户”对象并赋于抽象客户的对象引用(上转型对象) pizzamaker01.orderpizza("红披萨"); //通过抽象客户的对象引用,调用具体客户中继承自抽象客户类中的方法(或是重写的方法)。 System.out.println(); pizzamaker01.orderpizza("黑披萨"); }}
0 0
- JAVA设计模式(二)——工厂方法模式
- 二Java设计模式——工厂模式
- java设计模式——工厂模式二
- java设计模式(二)——抽象工厂模式
- Java设计模式—工厂设计模式
- Java设计模式—工厂方法模式&抽象工厂模式
- Java设计模式—工厂方法模式&抽象工厂模式
- JAVA设计模式——工厂模式
- java设计模式——工厂模式
- java设计模式——工厂模式
- Java设计模式——工厂模式
- Java设计模式——工厂模式
- java设计模式——工厂模式
- Java设计模式——工厂模式
- java设计模式——工厂模式
- java设计模式——工厂模式
- java设计模式——工厂模式
- java设计模式——工厂模式
- 权限修饰符
- 利用exif.js解决ios手机上传竖拍照片旋转90度问题
- javax.imageio.IIOException: Can't read input file!
- HDU
- vivado----fpga硬件调试 (七)----数据导出并用MATLAB读取
- java设计模式——工厂模式二
- COJ-1010-Water Drinking
- Log4J入门教程(三) web项目的log4j配置
- plugman 创建cordova插件
- java 二分查找
- js运动动画的八个知识点
- 打印沙漏
- Glid加载轮播图图片,加载不全问题 http://bbs.csdn.net/topics/391915759
- java线程