工厂模式
来源:互联网 发布:tcp udp端口 编辑:程序博客网 时间:2024/06/05 20:37
简单工厂模式:又叫静态方法工厂模式。
优点:客户端不需要在负责对象的创建,明确了各个类的职责。
缺点:这个静态工厂负责所有对象的创建,有新对象增加,或者某些对象的创建方式不同,就需要不断地修改工厂类,不利于后期维护。
public class AnimalFactory { private AnimalFactory() { } public static Animal createAnimal(String type) { //静态方法 if ("dog".equals(type)) { return new Dog(); } else if ("cat".equals(type)) { return new Cat(); } else { return null; } }}
public class AnimalDemo { public static void main(String[] args) {Animal a = AnimalFactory.createAnimal("dog"); a.eat(); a = AnimalFactory.createAnimal("cat"); a.eat(); // NullPointerException a = AnimalFactory.createAnimal("pig"); if (a != null) { a.eat(); } else { System.out.println("对不起,暂时不提供这种动物"); } }}
public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); }}
public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); }}
public abstract class Animal { public abstract void eat();}
工厂方法模式中抽象工厂类负责定义创建对象的接口,具体对象的创建工作由继承抽象工厂的具体类来实现。
优点:客户端不需要在负责对象的创建,从而明确了各个类的职责,如果有新的对象增加,只需要增加一个具体的类和具体的工厂类即可,不影响已有的代码,后期维护容易,增加了系统的扩展性。
缺点:需要额外的编写代码,增加了工作量。
public interface Factory { public abstract Animal createAnimal();}
public class DogFactory implements Factory { @Override public Animal createAnimal() { return new Dog(); }}
public class Dog extends Animal { @Override public void eat() { System.out.println("狗吃肉"); }}
public class CatFactory implements Factory { @Override public Animal createAnimal() { return new Cat(); }}
public abstract class Animal { public abstract void eat();}
public class Cat extends Animal { @Override public void eat() { System.out.println("猫吃鱼"); }}
public class AnimalDemo { public static void main(String[] args) { // 需求:我要买只狗 Factory f = new DogFactory(); Animal a = f.createAnimal(); a.eat(); System.out.println("-------"); //需求:我要买只猫 f = new CatFactory(); a = f.createAnimal(); a.eat(); }}
阅读全文
0 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- ThinkPHP5.0图片上传
- 创建一个Xcode 8 插件——Source Editor Extensions
- Linux opencv 安装与删除
- ubuntu14.04远程桌面(安装vnc, winscp传输文件)
- VMware虚拟机实现linux系统与windows系统的复制粘贴
- 工厂模式
- WEBRTC核心技术穿透
- 深度优先-Leetcode46 全排列
- ImportError: No module named caffe.proto解决办法
- 递归详解(斐波拉契和汉诺塔应用)
- jdbcTemplate实现crud操作(查询介绍)
- Spring Cache抽象详解
- 错误信息:Microsoft 分布式事务处理协调器(MS DTC)已取消此分布式事务
- BZOJ 1058: [ZJOI2007]报表统计 STL