[设计模式] 简单工厂/工厂方法/抽象工厂
来源:互联网 发布:ipad手绘软件 编辑:程序博客网 时间:2024/05/16 05:11
问题
典型的接口和实现类如下,我们要根据相应的需求创建出不同的对象。
public interface Animal { void say();}public class Cat implements Animal { public void say() { System.out.println("I am a cat"); }}public class Dog implements Animal { public void say() { System.out.println("I am a dog"); }}
简单工厂
public class AnimalFactory { public static Animal createAnimal(String animal) { if (animal.equals("Dog")) { return new Dog(); }else if (animal.equals("Cat")) { return new Cat(); } return null; }}public class Client { public static void main(String[] args) { Animal cat = AnimalFactory.createAnimal("Cat"); Animal dog = AnimalFactory.createAnimal("Dog"); }}
简单工厂其实就是:传入一个对象的标识,然后根据标识创建对象。这个方法实现简单,但是如果再添加一个Bird类,需要创建Bird对象的话则需改动AnimalFactory方法。
工厂方法
public interface Factory { Animal createAnimal();}public class CatFactory implements Factory{ public Animal createAnimal() { return new Cat(); }}public class DogFactory implements Factory { public Animal createAnimal() { return new Dog(); }}public class Client { public static void main(String[] args) { Animal cat = new CatFactory().createAnimal(); Animal dog = new DogFactory().createAnimal(); }}
工厂方法如上,即使当需要添加一个Bird时,同时创建BirdFactory即可在客户端中使用,而不用改动到其它代码。
抽象工厂
这个设计到一个产品族的概念,Cat,Dog是分为不同家的。我要么统一买A家的Cat,Dog,要么统一买B家的。
public interface Animal { void say();}//A家产品public class CatA implements Animal { public void say() { System.out.println("I am a cat from A"); }}public class DogA implements Animal { public void say() { System.out.println("I am a dog from A"); }}//B家产品public class CatB implements Animal { public void say() { System.out.println("I am a cat from B"); }}public class DogB implements Animal { public void say() { System.out.println("I am a dog from B"); }}
public interface Factory { Animal createCat(); Animal createDog();}public class FactoryA implements Factory {//A家工厂 public Animal createCat() { return new CatA(); } public Animal createDog() { return new DogA(); }}public class FactoryB implements Factory {//B家工厂 public Animal createCat() { return new CatB(); } public Animal createDog() { return new DogB(); }}
public class Client { public static void main(String[] args) { Factory factoryA = new FactoryA(); Animal catA = factoryA.createCat(); Animal dogA = factoryA.createDog(); }}
抽象工厂如上,创建一个A工厂,从A工厂生产出来的都是A家的产品,避免了产品创建之间的混乱。
1 0
- 设计模式-工厂模式(简单工厂,工厂方法,抽象工厂)
- 设计模式 - 工厂模式(简单,工厂方法,抽象工厂)
- 设计模式-工厂方法 简单工厂 抽象工厂 模板方法
- 设计模式之-简单工厂、工厂方法、抽象工厂
- 简单工厂、工厂方法和抽象工厂设计模式
- 【设计模式】简单工厂,工厂方法,抽象工厂
- 设计模式 - 简单工厂、工厂方法、抽象工厂
- 设计模式-简单工厂、工厂方法与抽象工厂
- 【设计模式】全局看 简单工厂 -工厂方法- 抽象工厂
- 设计模式之简单工厂/工厂方法/抽象工厂
- 设计模式学习之简单工厂、工厂方法、抽象工厂
- 设计模式--简单工厂、工厂方法和抽象工厂
- 设计模式——简单工厂,工厂方法,抽象工厂
- 设计模式之工厂方法、简单工厂、抽象工厂
- 设计模式: 简单工厂, 工厂方法, 和抽象工厂总结
- 设计模式之简单工厂、工厂方法和抽象工厂
- 设计模式之简单工厂、工厂方法和抽象工厂
- 设计模式——简单工厂、工厂方法、抽象工厂
- 简单方便设置滚动条的代码
- 记一次服务器线上测试
- Atitit常见需求分析方法与工具链 attilax大总结
- 419. Battleships in a Board
- servlet中的乱码问题
- [设计模式] 简单工厂/工厂方法/抽象工厂
- unix 环境高级编程1
- HFun.快速开发平台(五)=》自定义系统数据选择
- java日志系统问题总结
- FreeRTOS的源代码个人分析(基于KEIL下STM32F103的Demo) 六
- SQL Server 基础III
- Python爬虫四(正则表达式)
- 如何快速找到多个字典中的公共键
- 开始认真的写点东西 沉淀下自己的心