java的工厂模式
来源:互联网 发布:wifi连接上没有网络 编辑:程序博客网 时间:2024/05/22 06:48
工厂设计模式
大家先看下面的一个简单列子(此列子引出工厂设计模式)
package lianjeishujuku;
/**
* 工厂设计模式简单应用
* 接口简单的应用
* */
public class start {
public static void main(String[]args) {
//现在要执吃苹果的方法
shuiguo chi=new Apple();
chi.eat();
}
}
//有一个水果的方法
interface shuiguo{//注意接口里面的方法都是虚方法 权限是public 默认是abstract
public void eat();
}
//下面定义一个苹果类 来继承于接口水果
class Apple implements shuiguo{
@Override /***这行代码是java中注解 这个单词是重写的意思 因为一个类实现一个接口要不这个接口里面的所有方法
都要写一遍*(注意:抽象类实现接口对于接口里面的方法抽象类可以实现也可以不实现)*/
public void eat() {
System.out.println("吃苹果........");
}
}
以上代码是没有任何语法错误,但是这个代码存在一个设计问题,什么设计问题呢?假如现在有这么一个需求,比如在增加一个水果类,
package lianjeishujuku;
/**
* 工厂设计模式简单应用
* 接口简单的应用
* */
public class start {
public static void main(String[]args) {
//现在要执吃苹果的方法
shuiguo chi=new banana();//这个位置和上面那个代码不一样 这个是香蕉的 ,上面是苹果的
chi.eat();
}
}
//有一个水果的方法
interface shuiguo{//注意接口里面的方法都是虚方法 权限是public 默认是abstract
public void eat();
}
//下面定义一个苹果类 来继承于接口水果
class Apple implements shuiguo{
@Override /***这行代码是java中注解 这个单词是重写的意思 因为一个类实现一个接口要不这个接口里面的所有方法
都要写一遍*(注意:抽象类实现接口对于接口里面的方法抽象类可以实现也可以不实现)*/
public void eat() {
System.out.println("吃苹果了........");
}
}
//现在增加一个吃香蕉的类
class banana implements shuiguo{
@Override
public void eat() {
System.out.println("吃香蕉了........");
}
}
从以上面代码中可以看出 增加一个水果类就要改变主函数里面的 这样是影响客户端的 ,有什么办法既能增加水果类由不用改变客户端的影响呢????看下面代码。
利用工厂设计模式
package lianjeishujuku;
/**
* 工厂设计模式简单应用
* 接口简单的应用
* */
public class start {
public static void main(String[]args) {
//现在要执吃苹果的方法
shuiguo f=hello.name(args[0]);//初始化参数
if (f!=null) {
f.eat();
}
}
}
//有一个水果的方法
interface shuiguo{//注意接口里面的方法都是虚方法 权限是public 默认是abstract
public void eat();
}
//下面定义一个苹果类 来继承于接口水果
class Apple implements shuiguo{
@Override /***这行代码是java中注解 这个单词是重写的意思 因为一个类实现一个接口要不这个接口里面的所有方法
都要写一遍*(注意:抽象类实现接口对于接口里面的方法抽象类可以实现也可以不实现)*/
public void eat() {
System.out.println("吃苹果了........");
}
}
//现在增加一个吃香蕉的类
class banana implements shuiguo{
@Override
public void eat() {
System.out.println("吃香蕉了........");
}
}
class hello{
public static shuiguo name(Stringclassname) {//直接去的接口实例
if ("apple".equals(classname)) {
return new Apple();
}else if("banana".equals(classname))
{
return new banana();
}else {//如果都没有返回空
return null;
}
}
}
- java的工厂模式
- Java的工厂模式
- java的工厂模式
- Java的工厂模式
- java的工厂模式
- java的工厂模式
- java的工厂模式
- [工厂模式]JAVA设计模式 – 工厂模式的案例
- Java的工厂模式(Factory)
- java工厂模式的简介
- Java的工厂模式例子
- java的工厂模式理解
- java的工厂模式图解
- java工厂模式的理解
- JAVA的设计模式之工厂模式
- Java设计模式--工厂模式的自述
- Java 常用的设计模式-工厂模式
- Java的设计模式---工厂方法模式
- java当中的List<E> 接口
- 分类中常见的类别不平衡问题解决方法
- .net core 2.0学习笔记(六):Remoting核心类库RealProxy迁移
- 维优尚品——全国首家C2M电子商务平台
- jQuery如何追加tr到table中任意位置--向Table中指定位置添加tr或td(jQuery)
- java的工厂模式
- 准备PAT之All Roads Lead to Rome Dijikstra算法变型
- 高效实现List反序功能的实现
- Iterator、AbstractCollection、AbstractList
- C#路径中获取文件全路径、目录、扩展名、文件名称
- Android开发显示之前获取view的宽高方法
- 直接继承View来自定义控件时,需要重写onMeasure()方法并设置wrap_content时的大小 原理分析
- [日推荐]『拉了吗』出门必备
- 如何设置connect超时时间