简单工厂模式
来源:互联网 发布:如何安装车载导航软件 编辑:程序博客网 时间:2024/06/05 03:16
简单工厂模式
工厂模式定义了一个创建产品的工厂接口,让子类决定实例化哪一种实例对象,也就是将创建具体实例的工作推迟到了子类当中,核心工厂不再负责具体产品的创建。(具体生产类实现工厂接口,实现接口方法,生产具体实例)
设计原则:
1.开闭原则---对扩展开放,对修改关闭
2.依赖倒置原则----不论是接口还是具体的实例,都应该依赖于抽象的类,(具体model都会继承一个抽象的类),而不是具体实现类(具体实现类,又可能会修改,破坏了对修改关闭的原则)
试用场景
1.当子类型有可能会有很多,以后需要不断添加不同的子类实现时。
2.当一个系统尚在框架设计阶段,还不知道将来需要实例化哪些具体类时(相当于设计一张设计图,知识定义了某些规则而已)
java List 使用了工厂模式
1.public interface List<E> extends Collection<E> List本身定义就是接口,内部包含Iterator接口,
2.ArrayList 继承了抽象类 abStractList, AbstractList 实现了List 接口,(此处就是典型的工厂模式,arrayList 的model 继承至抽象类,并且实现了对应的接口)
3.源码中 Iterator是在AbstractList 实现的,(list的方法在abstractlist实现,在arraylist中被重写)
4.此处的abstractList就是抽象组件(依赖倒置原则),此处的依赖倒置理解为:a为接口,如果此时有两个子类(c,d),如果中间不设置一个中间件,当a接口发生变化(增加了一个方法newFunc()),此时c,d中都需要修改(增加对a中的newFunc()进行实现),但是如果新建立一个Abstract类 b,b实现了接口,c和d继承b,这时候c和d只要有选择的重写b中的方法就可以,而且a发生变化时,只需要修改b,c和d就可以不需要做任何修改。。此处的AbstractList就是充当b的角色。
demo:
通过反射机制实现的工厂模式
interface Car{
public void run();
public void stop();
}
class Benz implements Car{
public void run(){
System.out.println("Benz开始启动了。。。。。");
}
public void stop(){
System.out.println("Benz停车了。。。。。");
}
}
class Ford implements Car{
public void run(){
System.out.println("Ford开始启动了。。。");
}
public void stop(){
System.out.println("Ford停车了。。。。");
}
}
class Toyota implements Car{
public void run(){
System.out.println("Toyota开始启动了。。。");
}
public void stop(){
System.out.println("Toyota停车了。。。。");
}
}
class Factory{
public static Car getCarInstance(String type){
Car c=null;
try {
c=(Car)Class.forName("org.jzkangta.factorydemo03."+type).newInstance();//利用反射得到汽车类型
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return c;
}
}
public class FactoryDemo03 {
public static void main(String[] args) {
Car c=Factory.getCarInstance("Toyota");
if(c!=null){
c.run();
c.stop();
}else{
System.out.println("造不了这种汽车。。。");
}
}
}
- 工厂模式-简单工厂
- 工厂模式-简单工厂
- 工厂模式-简单工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 工厂模式-简单工厂模式
- 简单工厂模式,工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂、工厂模式、抽象工厂模式
- 简单工厂&工厂模式&抽象工厂模式
- 简单工厂和工厂模式
- 简单工厂和工厂模式
- 1,工厂模式--简单工厂
- 简单工厂和工厂模式
- 简单工厂,工厂模式,抽象工厂
- 简单工厂,工厂模式,抽象工厂
- 简单工厂、工厂方法、抽象工厂模式
- 简单工厂、工厂模式和抽象工厂
- ios开发 block 在ARC机制下的内存管理
- Struts2中的ModelDriven机制及其运用
- 一对夫妇的离婚账单
- Linux系统对IO端口和IO内存的管理
- iOS中 设置 uiview的背景图片 制定uiview的某个角为圆角
- 简单工厂模式
- QUERY_REWRITE_INTEGRITY
- Android实践--apk反编译
- C++中sizeof(string)
- CCRef.h
- Java远程访问Oracle教程
- chrome 下修改 agent 的方法
- java构造器的学习
- 利用convertView优化ListView性能